Witam.
Od paru dni bawię się komunikacją Modbus między sterownikiem 750-880, a czujnikiem temperatury. Problem mam czysto programowy. Na podstawie przykładu ze strony stworzyłem testowy progam.PROGRAM modbusRTU
VAR
(* deklaracja zmiennych zgodnie z pdf wago*)
start: BOOL;
MODBUS_EXTENDED_MASTER1: MODBUS_EXTENDED_MASTER;
error: enumMB_ERROR;
zapytanie: typModbusExtendedQuery;
odpowiedz: typModbusResponse;
queryFinished: F_TRIG;
queryPending : SEMA;
krok: BYTE;
temp AT %MB10 : WORD;
hum AT %MB11 : WORD;
mode_s : WORD;
temp_set AT %MB12 : WORD;
time_h AT %MB13: WORD;
time_m AT %MB14: WORD;
time_ AT %MB15: WORD;
END_VAR
MODBUS_EXTENDED_MASTER1(
ENABLE:=TRUE ,
ASCII_Mode:= ,
bCOM_PORT:= 2,
cbCOM_BAUDRATE:= 960,
cpCOM_PARITY:= 0,
csCOM_STOPBITS:= 1,
cbsCOM_BYTESIZE:= 8,
cfCOM_FLOW_CONTROL:= 4,
tTIME_OUT:=t#500ms ,
(*wymagane parametry uruchomieniowe*)
Response:=odpowiedz,
StartFunction:=start ,
ExtQuery:=zapytanie ,
MB_Error=>error ,
bInterfaceError=> );
queryFinished(CLK := start);
queryPending(CLAIM := start, RELEASE := queryFinished.Q);
IF queryFinished.Q THEN
CASE krok OF
0:
temp:=odpowiedz.Data[0];
hum:=odpowiedz.Data[1];
mode_s:=odpowiedz.data[2];
time_h:=odpowiedz.data[5];
time_m:=odpowiedz.data[6];
krok:=krok+1;
1:
temp_set:= odpowiedz.Data[0];
krok:=0;
END_CASE;
END_IF;
IF NOT queryPending.BUSY THEN
zapytanie.SlaveAddress:=50;
CASE krok OF
0:
(*przygotowanie zapytania*)
zapytanie.FunctionCode:=4; (* 4 - read input register*)
zapytanie.Read_Quantity:=8; (* ile rejestrow czytamy*)
zapytanie.Read_StartAddress:=4; (* adres rejestru *)
1:
zapytanie.FunctionCode:=4; (* 4 - read input register*)
zapytanie.Read_Quantity:=8; (* ile rejestrow czytamy*)
zapytanie.Read_StartAddress:=51; (* adres rejestru *)
END_CASE;
start := TRUE;
END_IF;
Wysyłam dwa zapytania (0,1) do regulatora, za każdym razem czytając po 8 rejestrów. Następnie odczytane dane przypisuje do określonych zmiennych. Problem polega na tym, że wykonuję zapytanie 0, przypisuje dane do określonych zmiennych(temp, hum, mode itp), potem wysyłam zapytanie 1, i w tym czasie nadpisują mi się dane w tablicy i zmieniają wartości odczytane w kroku 0. I nie bardzo wiem jak sobie z tym poradzić. Wszelkie podpowiedzi mile widziane. Pozdrawiam.