Mam problem z komunikacją mojego V280 z przelicznikiem. Chciałbym cyklicznie odpytywać przelicznik, a dokładnie chodzi o jeden rejestr (nr rejestru 43 wg załączonej dokumentacji). Na chwilę obecną działą to tak, że v280 wysyła pytanie natomiast odpowiedź jest błędna. Proszę o pomoc i podpowiedzi co robię źle. W załączeniu program i dokumentacja.
Oczywiście ma Pan rację zmieniłem to. Zmieniłem również pierwszy rejestr wektora na zmienna typu ML2. W takim przypadku otrzymuje na ekranie V280 wartość ML2 temp. gazu = 11008,03258 i ta wartość nie zmienia się (jest ciągle taka sama). Następnie zmieniam długość wektora z wartości 1 na wartość 2 i w takim przypadku wartość ML2 temp. gazu jest zmienna i oscyluje wokół 11008,03258 (zwiększając fizycznie temp. gazu = ML2 zwiększa się co do wartości), gdzie fizyczna wartość temp. to ok 20 C. Co może być przyczyną różnicy wskazań pomiędzy temp. rzeczywistą a temp. gazu ML2 wyświetlaną na V280??
Witam, z opisu zmiennej "Bieżąca wartość temperatury gazu" wynika, że jest to zmienna typu short (czyli 8bitowa). Powinien Pan w takim razie użyć rejestru MI zamiast ML do odczytu wartości o długości 1. Co wtedy Pan dostaje w rejestrze? Czy wartość "43" jest podana, jako DEC czy HEX?
Dla "Bieżąca wartość temperatury gazu" zmieniłem typ na MI i przy długości wektora równej 1 otrzymuje na v280 wartość stałą -24811. Natomiast dla długość wektora równej 2 otrzymuje na v280 wartości -32768 do +32767 zmieniają się losowo ( przynajmniej tak mi się wydaje). Tak jest zarówno w przypadku wartości 43 podanej jako Hex i Dec
W takim przypadku, brak komunikacji z urządzeniem i wartości te może Pan edytować, ponieważ Modbus nic tam nie wpisuje. Proszę napisać, jak Pan połączył je ze sobą. Proszę jeszcze o przesłanie dokumentu "Protokoły transmisji" od tego urządzenia. Z góry dziękuję.
Cały czas kombinuje i okazuje się, że ustawiając długość wektora na 2, MI13(status) jest równy zero czyli jak rozumiem komunikacja poprawna. Pytam o rejestr 1285 (Temperatura gazu T (DP:22) przestawiona w postaci liczby Całkowitej) wypisuje mi poprawną temp. (tylko że temperatura ta jest przedstawiona jako liczba całkowita a ja potrzebuję wartość dokładniejszą).
Status 0 w rejestrze MI13 świadczy o poprawnej komunikacji. Jeśli rejestr o który Pan pyta jest typu zmiennoprzecinkowego powinien Pan pytać o niego komendą Read Float Registers, wtedy otrzyma Pan dokładniejszą wartość.
Jeśli jednak jest to rejestr jest typu short (8 bitów), należy pytać o niego komendą Read Holding Registers tak Pan to robił do tej pory i otrzymana wartość będzie liczbą całkowitą.
Prawie rozgryzłem temat. tylko jeszcze jedna kwestia. Czy istnieje możliwość wyświetlenia zmiennej typu MF na ekranie?? Wybierając do wyświetlania Numeric ----> Number niema możliwości przypisania zmiennej typu MF.
Może Pan w programie rozbić zmienną MF na dwa rejestry MI i wyświetlić je na panelu HMI. W tym celu proszę użyć bloczku INV, który jest dostępny w zakładce Math -> Float -> Convert.
Dziękuję za podpowiedzi. W wyniku analizy doszedłem, że przelicznik należy odpytywać funkcją Read Float Registers (ponieważ liczba którą odczytujemy jest zmienno przecinkowa), co wydaje się oczywiste. Natomiast Format liczb F.P. w protokole modbas musi być 1-2-3-4. Ważne jest również żeby odpytywać jednocześnie wszystkie rejestry składające się na parametr urządzenia, co w tym przypadku wiąże się z pytaniem o wektor długości równej 2.