Code: Select all
if z= 1 then
READ_VAR (ADDm('0.0.0.1'),'%MW',64001,0, Mngtwrite,RECV_BUFER);
END_IF;
if z=0 then
WRITE_VAR(ADDM('0.0.0.1'),'%MW',64001,0,SEND_BUFER,Mngtwrite);
end_if;*)
полазил по вашему форуму почитал нашел что то похожее изменил под себя но что то не совсем могу понять что происходит.вроде записывает а куда не пойму.считать тоже не удается.
-------------------------------------------------------------------------------------------------------------------------
Hi, everybody. your help is necessary. there is a chastotnik of Altivar 212 S1A53844 and the controler who works at the modicon m 340 processor there is a communication of the controler with a chastotnik on the Mobdus.в channel this moment record and reading registers of a chastotnik goes separately that is so
Code: Select all
if z = 1 then
READ_VAR (ADDm('0.0.0.1')', %MW', 64001,0, Mngtwrite, RECV_BUFER);
END_IF;
if z=0 then
WRITE_VAR (ADDM('0.0.0.1)'', %MW', 64001,0, SEND_BUFER, Mngtwrite);
end_if; *)
полазил on your forum I read I found something similar I changed under myself but something not absolutely I can understand that происходит.вроде writes down and where I won't understand. it isn't possible to consider too.
-----------------------------------------------------------------------------------------------------------------------
Code: Select all
(*if START_REQ then *) (*----------------inquiry start--------------*)
(*SEND_BUFER[0]: = 16#0017 or 0 and 16#FF00 (*1bayt-adr the 1st рег readings (HI); 2bayt-function
SEND_BUFER[1]: = 1 and 16#00FF (*3bayt-adr the 2nd рег readings (LO), 4bayt-quantity (HI) always = 0
SEND_BUFER[2]: = 5 and 16#00FF or (*5bayt-quantity рег readings (LO)
1 and 16#FF00 (*6bayt-adr the 1st рег for record (HI)
SEND_BUFER[3]: = 1 and 16#00FF (*7bayt-adr the 1st рег for record (LO), a 8bayt-stake (HI) всегда=0
SEND_BUFER[4]: = 5 and 16#00FF or (*9bayt-quantity рег for record (LO)
5*2*16#100 (a *10bayt-stake of the subsequent bytes = кол_регистров*2 => in старш byte
(*---------value of registers for record--------------
for INDEX: = 0 to 5 do
SEND_BUFER[INDEX+5]:=ROL ((EMIS_W[INDEX]) 8); (*preobrazovany BIG/LITTLE ENDIAN
end_for;
GEST_RW [3]: = 5*2+10; (*в the last word of the table of parameters needs to be written down *)
(a *kolichestvo of bytes given with inquiry, except for the address Slave *)
(*
WRITE_VAR (ADR: = ADDR_RW,
OBJ: = ' MW %',
NUM: = 1,
EMIS :=S END_BUFER,
GEST: = GEST_RW);
READ_VAR (ADR: = ADDR_RW,
OBJ: = ' MW %',
NUM: = 0,
NB: = 5,
gest: = GEST_RW,
RECP => RECV_BUFER);
-----------------------------------------------------------------------------------------------------------------------
Code: Select all
(*if START_REQ then*) (*---------------- запуск запроса--------------*)
(*SEND_BUFER[0]:= 16#0017 or 0 and 16#FF00(*1байт-адр 1-го рег чтения (HI);2байт-функция
SEND_BUFER[1]:= 1 and 16#00FF (*3байт-адр 2-го рег чтения (LO), 4байт-количество (HI) всегда = 0
SEND_BUFER[2]:= 5 and 16#00FF or (*5байт-количество рег чтения (LO)
1 and 16#FF00 (*6байт-адр 1-го рег для записи (HI)
SEND_BUFER[3]:= 1 and 16#00FF (*7байт-адр 1-го рег для записи (LO), 8байт-кол (HI) всегда=0
SEND_BUFER[4]:= 5 and 16#00FF or (*9байт-количество рег для записи (LO)
5*2*16#100 (*10байт-кол последующих байт = кол_регистров*2 => в старш байт
(*--------- значение регистров для записи --------------
for INDEX:=0 to 5 do
SEND_BUFER[INDEX+5]:=ROL ((EMIS_W[INDEX]),8); (*преобразование BIG/LITTLE ENDIAN
end_for;
GEST_RW [3]:= 5*2+10;(*в последнее слово таблицы параметров нужно записать*)
(*количество передаваемых с запросом байт, за исключением адреса Slave*)
(*
WRITE_VAR(ADR:=ADDR_RW ,
OBJ:='%MW',
NUM:=1,
EMIS :=SEND_BUFER,
GEST := GEST_RW);
READ_VAR(ADR:=ADDR_RW ,
OBJ:='%MW',
NUM:=0,
NB:=5,
gest:=GEST_RW,
RECP => RECV_BUFER);