Hallo!
Ik wil graag een groot aantal (eigenlijk zo veel mogelijk) PC's aan elkaar koppelen, en dat allemaal via hun serial port. Er is 1 server, die in feite met alle andere PC's moet kunnen communiceren. Mijn idee was als volgt:
Server zegt: PC21: blablabla.
schakeling ziet: hee, dat is voor PC21
schakeling stuurt boodschap door naar PC21
PC21 leest: blablabla.
Of makkelijker is misschien dit:
Server zegt: PC21: blablabla.
Schakeling ziet niks, maar stuurt boodschap door aan ALLE PC's.
PC06 leest: PC21: blablabla, niks mee doen, is niet voor mij.
PC21 leest: PC21: blablabla: leuk zeg! (of zo,
)
Welnu, ik denk dat het tweede alternatief makkelijker is, omdat het onmogelijk is om tussen gigantisch veel PC' s te switchen. In dit geval moet ik een schakeling hebben die een constante RS-232 verbinding "verzorgt" voor alle PC's, die het bericht van de server ontvangt en vervolgens naar iedereen doorstuurt. Jammer (of gelukkig?) dat het niet mogelijk is om de RS232 kabel gewoon te splitsen naar elke PC.... 
Heeft iemand een idee hoe ik dit moet aanpakken?
Als ik overigens met een microcontroller moet gaan werken: ik heb totaal geen C++ ervaring (laat staan assembly...) Basic en pascal gaan goed bij mij, is het ook mogelijk om een uC-programma te schrijven in een van deze talen en vervolgens te compileren? (en zo ja: welke progz en uC's ondersteunen dat?)
Pelle.
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
3 redenen:
1. Allemaal hele ouwe PC's
2. programma moet in VBDOS (100% compatible met QBasic) worden geschreven, dat iets makkelijker met RS232 overweg kan dan met bijvoorbeeld IPX
3. Waarschijnlijk is met het oog op het grote aantal PC's dit voordeliger.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Hier zijn eenvoudige oplossingen voor, maar je moet een beetje electronica snappen om ze te begrijpen.
1. zet bij iedere PC een RS232<->RS485 omzetter. RS-485 is een bus, dus iedereen 'praat' naar iedereen. lastigste punt: je moet de RS-485 driver omschakelen van zenden naar ontvangen, bv met een handshake lijn.
2. zet bij iedere PC een schakeling die RS-232 omzet naar bv open-collector op 12 Volt. Die open-colletor lijn voer je dan uit als bus, met iedereen parallel. Wat minder betrouwbaar dan RS-485, maar wel mekkelijker zelf te maken.
3. Zet bij iedere PC een schakeling die het RS-232 signaal van de vorige PC optelt bij wat deze PC zend, en dat doorstuurt naar de volgende. En omgekeerd: wat hij ontvangt van de volgende buffert, zelf ontvangt en doorstuurt naar de vorige.
Er zijn zo nog wel wat variaties te bedenken.
Let er bij alle 3 wel op dat je de aardes van alle PCs aan elkaar aan het verbinden bent. Dit kan problemen opleveren!
Misschien is er wel markt voor iets als dit, en moet ik er maar eens een productje van maken 
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Dit systeem is al eens uitgevonden. Ik heb er een tijd geleden wel een programmaatje voor gehad. Dit werkte onder DOS. De seriele poorten worden dan van pc naar pc doorgekoppeld, een soort token-ring systeem.
Marcel
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 19 september 2003 23:29:51 schreef Marcel:
De seriele poorten worden dan van pc naar pc doorgekoppeld, een soort token-ring systeem.
Dus de ene PC zend naar de volgende, en die zend weer door naar de daaropvolgende? Met zoiets was ik 15 jaar geleden bezig. En wat als er een PC uit staat? (mijn idee was om een relais bij iedere PC te zetten, IIRC werkt token-ring hardware ook zo).
Op zich is het idee leuk, maar omdat de kans bestaat dat er idd een PC uitvalt (of ueberhaupt niet wordt aangezet) mogen PC's niet afhankelijk van elkaar zijn. Ik dacht meer aan een soort "Server" die alles regelt. Van RS-485 heb ik weinig verstand, ik weet alleen dat het ook wordt gebruikt bij DMX-512, maar dat is juist de manier van aansluiten die ik NIET mag gebruiken, omdat elke "schakelbreuk" dan fataal kan zijn. Ik wilde eigenlijk een uC opleiden tot "switch".
Iemand een idee?
Pelle.
[Edit]
[Kwoot]mijn idee was om een relais bij iedere PC te zetten[/UnKwoot]
Dat is op zich een goed idee, maar de vraag is of de RS-232 dat wel lust.
P.S. Is het in principe mogelijk om een RS-232 lijn paralel door te trekken naar een hele hoop PC's? (Ik denk al hardop: "nee, natuurlijk".)[/edit]
[Bericht gewijzigd door pelleke op ]
Ik heb zoiets ook eens ooit gemaakt voor een heleboel ouwe XT's aan een server te knopen en dan kon men chatten
. Ik heb het gedaan met RS485 converters
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> Van RS-485 heb ik weinig verstand, ik weet alleen dat het ook wordt gebruikt bij DMX-512, maar dat is juist de manier van aansluiten die ik NIET mag gebruiken, omdat elke "schakelbreuk" dan fataal kan zijn. Ik wilde eigenlijk een uC opleiden tot "switch".
Als je RS-485 als een bus gebruikt ipv als een kralensnoer (zoals bij DMX) heb je daar geen last van.
>mijn idee was om een relais bij iedere PC te zetten.
>Dat is op zich een goed idee, maar de vraag is of de RS-232 dat wel lust.
Hoe bedoel je dat? De suggestie is om een relais te gebruiken om als een node niet aan staat het RS-232 signaal gewoon door te lussen. Het RS-232 signaal ziet dus alleen de schakelaar van het relais.
> P.S. Is het in principe mogelijk om een RS-232 lijn paralel door te trekken naar een hele hoop PC's?
nee, in praktijk werkt het wel (met 2 of 3 ontvangers parallel) maar het heeft wel invloed op de betrouwbaarheid, max snelheid etc.
> ik wou een uC opleiden tot switch
Ik ben een enorme voorstander van het gebruim van uC's, behalve als ze (zoals in dit geval) echt helemaal overbodig zijn.
elektron_
beetje gek
Indien de pc's met mekaar niet moeten praten denk ik dat het eenvoudiger kan, tenminste als de dataoverdracht beperkt is. TX van server bufferen en in ster naar alle RX sturen.
TX van pc via opamp-optel schakeling naar RX server.
Om collision te vermijden moet de server de pc's pollen,
en alleen dan mag een pc iets naar de serve sturen.
Afgeschermde bedrading gebruiken.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 20 september 2003 22:23:53 schreef elektron_:
Indien de pc's met mekaar niet moeten praten denk ik dat het eenvoudiger kan (snip)
Je bent nu je eigen netwerk aan het bedenken. Dit is al voor je gedaan, een resultaat is bv RS-232, RS-485, current-loop, etc. Als je echt denkt dat je het zelf beter en/of goedkoper kan moet je het vooral doen! Ik neem aan dat je snapt wat het effect is van impedantie mismatching, ground currents, en common mode stoorsignalen?
elektron_
beetje gek
Wouter, je hebt gelijk, misschien zie ik het te simpel...
[Bericht gewijzigd door elektron_ op ]
Geloof ons nou maar RS485 is het makkelijkste je gebruikt gewoon het RTS of DTR sigaal voor het bedienen van de zender c.q. ontvanger (als de poort op 3F8 zit zit dat register op 3FB)
sven
pointers don't kill programs, programmers kill programs
mij lijkt RS485 ook de beste oplossing.
Wat je ook zou kunnen doen.
TX server bufferen
Alle TX'n van de overige pc's via een MAX232(familie) omzetten naar TTL en via diodes alle signalen OR'en deze uitgang terug via MAX232 naar RS232 niveau brengen.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 21 september 2003 23:14:44 schreef sven:
Wat je ook zou kunnen doen.
TX server bufferen
Alle TX'n van de overige pc's via een MAX232(familie) omzetten naar TTL en via diodes alle signalen OR'en deze uitgang terug via MAX232 naar RS232 niveau brengen.
Zie mijn suggestie nr3, alleen suggereer jij een ster-topologie ipv een keten (kost wrsch. wat meer bekabeling).
[Kwoot]TX server bufferen
Alle TX'n van de overige pc's via een MAX232(familie) omzetten naar TTL en via diodes alle signalen OR'en deze uitgang terug via MAX232 naar RS232 niveau brengen.[/UnKwoot]
En ik denken dat ik expert was...
Kan iemand mij de volgende termen enigszins toelichten:
Bus
TX
TTL
OR (Je bedoelt toch niet de binaire verwerker OR?)
Verder heb ik ooit gevraagd wat een Max232 PRECIES doet, en daar ben ik helaas niet wijzer van geworden. (Zie hem altijd staan in RS232-schakelingen) Kan iemand mij dit uitleggen in redelijk begrijpbare taal.
Miezjel
Si vis pacem para bellum.
betreft de MAX: dit is een component dat de signaalniveaus van de pc (RS232) omzet naar TTL niveau. even van het gemak uitgaande dat je deze begrippen wel kent.
de ic's uit de TTL/CMOS serie kunnen niet omgaan met de signalen afkomstig uit de serieele poort van je computer
voorbeeld:
een pinnetje CTS (clear to send) wordt actief dat wil in dit geval zeggen dat het niveau van dit pinnetje ongeveer -12 volt wordt als hij niet actief is issie +12 volt hier kan je op TTL niveau niet mee werken omdat daar een actief +5 volt is en niet actief een logische 0 volt
wat de max doet is van het lage -12 volt van de CTS actief een 5 volt positieve spanning maken.
hoop dat het nu iets duidelijker is voor je
betreft de begrippen:
Bus een datalijn waar meerdere sturingen doorgaan ik meen parralel maar ik weet dit niet zeker
TX of TXD staat voor transmit data (RS232)
TTL uhh weet ik zo ff niet staat elders op het forum al ff de search gebruiken:P (EDIT: Transistor Transistor Logic(/EDIT)
OR neem aan dat het hier om een logisch poort gaat (TTL niveau)
succes.
mvg Michel
Okee, nu kan ik iets zinnigs vragen.
[Kwoot]Wat je ook zou kunnen doen.
TX server bufferen
Alle TX'n van de overige pc's via een MAX232(familie) omzetten naar TTL en via diodes alle signalen OR'en deze uitgang terug via MAX232 naar RS232 niveau brengen.[/UnKwoot]
>> TX server bufferen.
(Wie moet die bufferen? De server zelf?)
>> en via diodes alle signalen OR'en en
Dat vat ik niet helemaal, misschien kan ik meer met een tekeningetje
>> en deze uitgang terug via MAX232
Welke uitgang??? (sluit waarschijnlijk aan op vorige vraag)
>> naar RS232 brengen.
Wat krijg ik dan in godsnaam uiteindelijk op mijn RS232-ingang te zien?
Als een (of meer) vraag/vragen nergens op slaan hoor ik het graag.
Pelle.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Als een (of meer) vraag/vragen nergens op slaan hoor ik het graag.
Je vragen slaan best wel ergens op maar het is iig mij te veel werk om het helemaal uit te spellen (of te tekenen).
sven
pointers don't kill programs, programmers kill programs
Wie moet die bufferen? De server zelf?
De uitgang van de server (=TX) harwarematig bufferen. Een standaard uitgang van een pc is bedoeld om op 1 ontvanger aan te sluiten.
>> en via diodes alle signalen OR'en en
Dat vat ik niet helemaal, misschien kan ik meer met een tekeningetje
je hebt dan net alle TX'n van de pc omgezet van RS232 naar TTL niveau. Al deze uitgangen moeten op 1 ingang. Je kan niet al deze uitgangen gewoon aan mekaar knopen, want dan krijg je kortsluitingen. Door nu steeds een diode te plaatsen (in de richting van de data) krijg je geen kortsluitingen. Je moet anders maar eens wat zoeken achter de werking van digitale poorten, dit zal je zekertegenkomen bij besprekingen over OR-poorten.
>> en deze uitgang terug via MAX232
Welke uitgang??? (sluit waarschijnlijk aan op vorige vraag)
het knooppunt van deze diode's is nog steeds TTL. Je server-RX moet RS232 niveau hebben. de MAX232 doet deze omzetting
>> naar RS232 brengen.
Wat krijg ik dan in godsnaam uiteindelijk op mijn RS232-ingang te zien?
dan komen alle antwoorden van je pc's binnen. Er mag natuurlijk maar 1pc tegelijkertijd een antwoord sturen, anders heb je onbruikbare rommel.
Rx = Receive = ingang
Tx = Transmit = uitgang
bus = samenhangen van verschillende ontvangers/zenders op 1 leiding. Dit kan parallel (IDE,PCI,...) of serieel(USB,RS485,...) zijn.
[Kwoot]Er mag natuurlijk maar 1pc tegelijkertijd een antwoord sturen, anders heb je onbruikbare rommel.[/UnKwoot]
Dus dat is het idee achter een bus, als ik het goed begrijp. En hoe moet de ene PC nou weten dat hij data mag sturen terwijl niet een andere PC dat al doet?
Het lijkt me overigens ook (nog steeds) noodzakelijk dat elke PC zich identificeert met een of ander nummer ofzo, omdat de server anders niet kan zien waar het signaal vandaan komt.
Hoe kan ik trouwens de TxD hardwarematig bufferen?
Pel.
sven
pointers don't kill programs, programmers kill programs
de server "polt" je pc's -->
server stuurt steeds een commando van pc1 iets te vertellen?
pc2? pc3?...pc1?
enkel wanneer de pc wordt aangesproken mag deze iets antwoorden.
Die Tx bufferen zou je ook kunnen doen via een max232.
Je moet maar eens de datasheet ervan bestuderen. Daar staat meestal ook de aanverwanten in beschreven,dwelke misschien beter zijn. Je hebt er namelijk aanverwanten van die 8 omzetters bevatten voor RS232 --> TTL
Ik snap niet dat je wilt bufferen, de COM poort heeft een buffer van zichzelf die groot genoeg is, volgens mij ben je het wiel opnieuw aan het uitvinden