Szanowni koledzy,
Mam pewien problem. Mianowicie stworzyłem sobie aplikację komunikującą się na porcie szeregowym. Aplikacja umożliwia otwarcie jednego z dostępnych portów. Komunikacja ma odbywać się w protokole modbus RTU. Zgodnie z ideą programowania obiektowego chciałbym sobie utworzyć klasę o nazwie ModbusFrame
której konstruktor byłby w stanie mi utworzyć pełną ramkę modbusową którą dalej za pomocą już istniejącej instancji userserialport
byłbym w stanie wysłać.
Mam jednak problemy:
- Obiekt
UserSerialPort
aby coś wysłać należy podać pod argument tablicębyte [ ]
a nie obiekt klasyModbusFrame
. Jak to "po obiektowemu" zrobić najlepiej żeby to się zazębiło ? - Jak wiadomo protokół modbus ma pole "funkcja" a ja osobiście chciałbym używać funkcji 0x03 (03dec) oraz 0x10 (16dec) czyli odczyt i zapis n-rejestrów. Główny problem polega na tym że nazbyt bardzo jestem przyzwyczajony do "strukturalnego" programowania i do tego że jak piszę funkcję to ona mi zwraca pewne wartości - gdybym to pisał w takim standardzie, to funkcja formująca ramkę zwracałaby np. wskaźnik na tablicę typu
byte [ ]
w której to tablicy znajdowałaby się cała stworzona przez tą funkcję ramka Modbusowa. Oczywiście ktoś powie że mógłbym to robić analogicznie (a np. obiekt klasyModbusFrame
mógłby mieć pewnąwłaściwość
która by była ustawiana na właśnie wskaźnik na tablicębyte
. To jednak mija się z ideą programowania obiektowego. Najlepiej byłoby zrobić to tak że mam sobie klasęModbusFrame
której obiekt załatwia mi wszystko, tzn. tworzy mi ramkę modbusową. - Pojawia się kolejny problem - jak przekazywać do niego parametry i to jeszcze różną ich ilość - raz tyle a raz tyle... ? Dla funkcji 0x03 potrzeba stałej ilości parametrów, jednakże dla funkcji 0x10 w zależności od tego ile chcemy rejestrów zapisać , danych jest raz tyle a raz tyle... Jak to ugryźć w ogóle?
- Jak te parametry w ogóle do tego obiektu przekazywać ? Poprzez konstruktor, właściwości czy może jeszcze inaczej ?
Słuchajcie żeby była jasność, leszcz ze mnie jeszcze i tyle, nie obraźcie się. Dla mnie każda porada będzie bezcenna i za każdą z góry dziękuję.
PS. Mam już nawet napisaną funkcję która oblicza mi CRC (ostatnie dwubajtowe pole ramki)...
PS. To pierwszy z serii postów które w tonie pytającym mam zamiar publikować, myślę że przydadzą się także początkującym w przyszłości, dlatego tym bardziej prosiłbym o jakieś wskazówki.
PS. Książek się już naczytałem na temat programowania obiektowego i protokołów sporo ale praktycznie nie wpłynęło to na moje możliwości projektowania architektury systemu obiektowego.... pomocy!
byte x = 3;
lubbyte x = new byte(3);
?public List <byte> frame;
i przypisuję coś do niego tylko w konstruktorze tej klasy to wyskakuje nad tym polem takie ostrzeżenie: "field is never assigned to and will always have its default value null"... ?