Dag iedereen,
wij hebben een laboratorium apparaat, dat met een seriele poort aan de computer is verbonden. Ik heb een windows service geschreven, die de datareceived event gebruikt om de data te ontvangen van dat apparaat en vervolgens verwerkt. Hierin gebruik ik de methode SerialPort.Readline();
Dit werkt perfect, helemaal geweldig.
Nu hadden wij vervolgens een lastige situatie ergens door een machine die te ver weg stond van enig pc, en de seriele kabel van dat ding mocht niet langer zijn dan 7 meter, want dan ging de data verloren.
Oplossing was; een tussenapparaatje dat serieel als input heeft, en netwerk aansluiting als output. Dat tussenapparaatje (TryCom C31S) is redelijk cool, programmeerbaar via software en via webbrowser.
De software maakt ook een virtuele com-poort aan op de pc, en zoekt automatisch het apparaatje in het netwerk (dus je kan hem gewoon in de switch stoppen).
Nu is het volgende het probleem. Ik heb het apparaatje goed gevonden, goed de baudrate, data & stop-bits, parity, allemaal goed ingevuld en goed gemapped met de virtuele com-poort. Als ik HyperTerminal gebruik ziet hij ook perfect alle data binnenkomen (ongeveer 8 regels).
Maar als ik vervolgens mijn eigen Windows C# service gebruik, verwerkt hij maar 2 regels! En als ik nog een keer op zend druk op het laboratorium-apparaat - wat dus alle regels opnieuw moet zenden- krijg ik de volgende 2 regels! Ik begrijp er vrij weinig van. Na een hoop gegoogle heb ik veel gelezen over handshakes om de flow te controleren, dus heb ik daar ook alles settings geprobeerd maar geen resultaat. Ook heb ik gelezen dat de Readline() methode de stroom even blokkeert (dus dit leek me misschien logisch omdat hij maar 2 regels verwerkt, maar nog steeds vind ik het vreemd dat hij dan niet maar 1 regel verwerkt) Ik heb ook readExisting() geprobeerd, maar dan krijg ik ook maar 2 regels binnen. Dus ik ben redelijk gefrustreerd en geen idee wat hier aan de hand is. Waarom krijgt hyperterminal wel alles in 1 keer binnen en ik maar 2 regels?
Alle suggesties zijn welkom
wij hebben een laboratorium apparaat, dat met een seriele poort aan de computer is verbonden. Ik heb een windows service geschreven, die de datareceived event gebruikt om de data te ontvangen van dat apparaat en vervolgens verwerkt. Hierin gebruik ik de methode SerialPort.Readline();
Dit werkt perfect, helemaal geweldig.
Nu hadden wij vervolgens een lastige situatie ergens door een machine die te ver weg stond van enig pc, en de seriele kabel van dat ding mocht niet langer zijn dan 7 meter, want dan ging de data verloren.
Oplossing was; een tussenapparaatje dat serieel als input heeft, en netwerk aansluiting als output. Dat tussenapparaatje (TryCom C31S) is redelijk cool, programmeerbaar via software en via webbrowser.
De software maakt ook een virtuele com-poort aan op de pc, en zoekt automatisch het apparaatje in het netwerk (dus je kan hem gewoon in de switch stoppen).
Nu is het volgende het probleem. Ik heb het apparaatje goed gevonden, goed de baudrate, data & stop-bits, parity, allemaal goed ingevuld en goed gemapped met de virtuele com-poort. Als ik HyperTerminal gebruik ziet hij ook perfect alle data binnenkomen (ongeveer 8 regels).
Maar als ik vervolgens mijn eigen Windows C# service gebruik, verwerkt hij maar 2 regels! En als ik nog een keer op zend druk op het laboratorium-apparaat - wat dus alle regels opnieuw moet zenden- krijg ik de volgende 2 regels! Ik begrijp er vrij weinig van. Na een hoop gegoogle heb ik veel gelezen over handshakes om de flow te controleren, dus heb ik daar ook alles settings geprobeerd maar geen resultaat. Ook heb ik gelezen dat de Readline() methode de stroom even blokkeert (dus dit leek me misschien logisch omdat hij maar 2 regels verwerkt, maar nog steeds vind ik het vreemd dat hij dan niet maar 1 regel verwerkt) Ik heb ook readExisting() geprobeerd, maar dan krijg ik ook maar 2 regels binnen. Dus ik ben redelijk gefrustreerd en geen idee wat hier aan de hand is. Waarom krijgt hyperterminal wel alles in 1 keer binnen en ik maar 2 regels?
Alle suggesties zijn welkom