Aplikacja gadająca z RS232 - problem z \r\n

0

Cześć
Mam pewien niezrozumiały dla mnie problem z małą aplikacją.
Ma za zadanie wysłać po RS232 wartość "P" aby otrzymać odpowiedź.

Teoretycznie dość banalne:

openSerial();
string inputVal = "P\r\n";
serialPort1.WriteLine(inputVal);
closeSerial();

Jednak jakimś cudem doklejam \r\n czyli 0d 0a do wartości P (czyli 50).

Zrobiłem monitoring portu COM i tak wygląda poprawne wysłanie danych przez herculesa:

W herculesie po nawiązaniu połączenia klikam Send, wartość P pojawia się w oknie konsoli i muszę ustawić kursor za "P" i kliknąć 'Enter' - wtedy otrzymam wynik na jaki liczyłem:

[30/01/2020 19:26:13] Written data (COM6) 
    50                                                P                
[30/01/2020 19:26:14] Written data (COM6) 
    0d 0a                                             ..               
[30/01/2020 19:26:15] Read data (COM6) 
    55 73 65 72 20 49 44 3a 0d 0a 42 41 4c 20 49 44   User ID:..BAL ID 

Natomiast kiedy wysyłam dane z mojego programu, wygląda to tak:

[30/01/2020 19:13:55] Written data (COM6) 
    50 0d 0a                                          P..              
[30/01/2020 19:13:55] - Close port COM6 

O ile pamiętam zwykle wystarczyło podać na końcu "\r\n" i urządzenia czytały to jako "enter" - a tutaj wygląda mi jakby program chciał skleić to wszystko w jedną wartość i nie rozpoznawał \r\n, po prostu zgłupiałem...
Próbowałem z serialPort.WriteLine() na końcu, dwa osobne serialPort.Write("P"); serialPort.Write("\n\r"); - za każdym razem to samo.

Przegapiłem jakąś oczywistą oczywistość? :)

0

jesteś pewien że wysyłasz właściwą ilość bajtów?

pozdrawiam, mr-owl

0

A próbowałeś nie kombinować, tylko użyć WriteLine("P")?

0

Cześć
@AntyKtokolwiek: wszystko niby ok, bajty są te same, ale efekt inny. Mój program wysyła je "sklejone" i wtedy nie dostaję odpowiedzi z urządzenia, a aplikacja do terminala - czyli używany przeze mnie Hercules (akurat się do niego przyzwyczaiłem, nie wymaga instalacji i działa bez problemu na 64bitowych systemach) wysyła je jakby w dwóch porcjach - to jedyna różnica jaką widzę :( Tak to przynajmniej wygląda na debugu z Serial Port Monitor.
@mr-owl: masz na myśli konfigurację portu COM, w sensie ilość bitów itd? Te ustawienia mam zgodne z urządzeniem. Od strony aplikacji wysyłam po prostu stringa z wartością.
@Azarien: próbowałem też tak zrobić, efekt pisania, bez odpowiedzi

 Written data (COM6) 
    50  0a                                              P.  

Jakoś nigdy wcześniej nie miałem tego typu problemu, dzisiaj spróbuję jeszcze zrobić to samo podłączając urządzenia do innego komputera na wszelki wypadek.

0

Witam,

Gdy robilem integracje z drukarkami Intermac po COM moim rozwiazaniem bylo wysylanie danych jako tablica bajtow a nie string-ow.

Pozdrawiam,

mr-owl

1

Wyślij najpierw P A potem \r\n. Może jakiś Sleep pomiędzy.

0

Strasznie na oślep powstaje rozwiązanie. Albo bajty nie takie, albo czas, albo unikod winien (tzreba zabezpieczać, ale tutaj moim zdaniem nie zachodzi). Bez analizy dumpu, bez dokumentacji itd ... Metodą "strzelać a może trafić"

0

Dokumentacja niestety jest na tyle dokładna, że poświęca komunikacji po RS jakieś 3 linijki, wydali swoją aplikację i ją sprzedają :)

Ale, dzięki wam zacząłem kombinować z czasem i faktycznie! Jeśli po wysłaniu wartości "P" uśpię program na sekundę przed '\r\n' to wszystko działa jak trzeba.

Dziękuję bardzo za naprowadzenie na rozwiązanie!! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1