Hej! Jag gissar att "isOpen" kontrollerar om porten är öppen (=programmet sköter kommunikationen som sker på den), inte om det finns någon som skickar/lyssnar i andra änden. Utan att egentligen ha någon aning om vad jag säger nu så tror jag inte att det finns något stöd i RS232 för att se om det finns något anslutet i andra änden. Det du får göra är att kontrollera om du får någon information från enheten, får du inte det kan du anta att den inte är ansluten. Jag funderade om det kunde vara så att RS232 inte har något egentligt stöd för det. Nej, det finns inget sådant i RS232. Du har (egentligen) följande trådar: RS232 hanterar detta i hårdvara med handskakning. Hm... Du behöver inte mer än Gnd/RX/TX egentligen så det går faktiskt inte att anta att allting stödjer handskakningsbiten ;) Om man behöver dem eller inte avgörs till stor del av använd hastighet kontra i/o-kapacitet i det aktuella systemet. Kör man t.ex. 115 kbit som inte är helt ovanligt på viss industriell utrustning, är det inte många system som klarar det utan någon form av handskakning. 115 kbit låter inte särskilt högt tycker jag, känns som att det borde vara snabbare innan det blir problemSeriell kommunikation
I flera projekt har jag varit tvungen att köra seriell kommunikation.
.NET har ju inte så bra stöd för seriell kommunikation.
Jag har använt mig av openNetCF's bibliotek och det har fungerat bra.
Jag har dock irriterat mig över att om man förlorar förbindelsen så känner inte biblioteket av det utan tror att porten fortfarande är öppen.
T.ex. om man kommunicerar med en enhet och man drar ur kabeln.
openNet har en metod som heter något i stil med isOpen. Den returnerar true även om kabeln har dragits ur.
Jag har nu testat .NET Framework 2.0 beta som har en seriell kommunikationsklass "serialport".
Men när jag testar samma scenario med den klassen visar den också att porten fortfarande är öppen.
Nu undrar jag om problemet ligger i Windows och inte i klasserna.
Det hade ju varit smart att kunna få reda på om förbindelsen fortfarande är intakt från programmet.
Nu senast har jag testat blåtands-kommunikation och om man stänger av blåtandsfunktionen på telefonen eller går iväg med telefonen tillräckligt långt bort så förlorar man ju kontakten men klassen tror fortfarande att telefonen är där.
MVH,
ChristianSv: Seriell kommunikation
/JohanSv:Seriell kommunikation
Någon som har koll på RS232?Sv: Seriell kommunikation
* Jord
* TX
* RX
Det finns ingen möjlighet att veta om det finns något där
Nu är det dock så att det där bara gäller en fysisk "serieport", en virtuell vet jag inte riktigt hur de hanteras... Det enklast vore väl om det finns något "pingkommando" som du kan anropa lite då och då...Sv:Seriell kommunikation
Minst fyra olika signaler finns inblandade för att kunna upptäcka om mottagaren finns resp. är redo att ta emot data och omvänt.
CTS ClearToSend
RTS RequestToSend
DTR DataTerminalReady
DSR DataSetReady
Det finns fler, men det mesta brukar fixa sig med dessa.
Det förutsätter ju natrurligvis att båda ändar hanterar detta.
Många enheter nuförtiden har ju så vassa processorer att man tycker att handskakning inte behövs, men det kan då bli som ditt problem, man märker inte när hunden rev ur sladden.
Om sedan den klass du använder tittar på dessa signaler och hur du kan få ut informationen är ju en annan femma.Sv: Seriell kommunikation
Sv:Seriell kommunikation
Det går ibland att klara sig med Gnd/RX/TX och mjukvaruhandskakning (XON/XOFF) men min erfarenhet är att HW-Handskakning är att föredra.
Om det sen gäller 9600 kbit eller så, behövs naturligvis inte någotdera i modern utrustning.
Och som jag skrev ovan, det förutsätter ju att andra sidan stödjer det man vill utnyttja.Sv: Seriell kommunikation