20-08-2022, 18:12
Powinieneś się tu pochwalić źródłem tego programu C#, bo z Twojej wypowiedzi zrozumiałem, że on nadaje ciąg znaków "01 10 7d 00 00 16 59 ab" jako tekst, to pewnie że nie można tego zrobić jako proste rzutowanie, bo zamiast bajtu 01 do arduino przylatują dwa bajty dla znaków char '0' i '1' czyli w sumie to już liczba 16 bitowa, a spacja jest kolejną liczbą byte.
buffor[i]+=mySerial.read(); Tu nie wiem po co jest +, przecież jak przylatuje nowy znak to go tu wpisujesz = a nie dodajesz do poprzedniego który siedzi w buffor[i]?
Jak jednak nadaje z C# komendą analogicznie write z tablicy wartości bajtów to też rzutowanie nie jest potrzebne na byte.
Jak to ma być głupi przekaźnik to tylko powinno być odbierz/wyślij, żadnego for dla 8 bajtów. Bo ucieknie Ci jakiś bajt i już żadna ramka RTU nie będzie się kleić. Albo można weryfikować w programie, że zbierasz taką wybraną ramkę, sprawdzasz czy jest kompletna, czy CRC się zgadza i nadajesz ją dalej. Musisz wykrywać gdzie jest początek, gdzie jest koniec, zweryfikować, nadać. Chyba prościej wywalić wszystko i zostawić tylko 2 linijki, jak coś przyleciało z 1 to write na 2 i to samo z 2 do 1.
buffor[i]+=mySerial.read(); Tu nie wiem po co jest +, przecież jak przylatuje nowy znak to go tu wpisujesz = a nie dodajesz do poprzedniego który siedzi w buffor[i]?
Jak jednak nadaje z C# komendą analogicznie write z tablicy wartości bajtów to też rzutowanie nie jest potrzebne na byte.
Jak to ma być głupi przekaźnik to tylko powinno być odbierz/wyślij, żadnego for dla 8 bajtów. Bo ucieknie Ci jakiś bajt i już żadna ramka RTU nie będzie się kleić. Albo można weryfikować w programie, że zbierasz taką wybraną ramkę, sprawdzasz czy jest kompletna, czy CRC się zgadza i nadajesz ją dalej. Musisz wykrywać gdzie jest początek, gdzie jest koniec, zweryfikować, nadać. Chyba prościej wywalić wszystko i zostawić tylko 2 linijki, jak coś przyleciało z 1 to write na 2 i to samo z 2 do 1.
Miło być decenianym https://buycoffee.to/kaczakat