Цитата Сообщение от kondor3000 Посмотреть сообщение
Лучший способ выяснить правду, как и что надо считывать, программа Owen OPC Server, ставиться за 2 мин. на комп. Любой бит и регистр можно настроить и проверить. Чтение и запись, любая функция, RS485 через переходник типа АС-4, есть и TCP https://owen.ru/product/new_opc_server 1 ОПС сервер.jpg
Можете проверить программу? Копирую сразу как есть.
Переменные:
Скрытый текст:

PROGRAM PLC_PRG
VAR
RHR: MB_RD_HOLD_REGS; (*ôóíêöèÿ 03 - ÷òåíèå ïàðàìåòð&# 224; òèïà INT*)
RIR:MB_RD_INPUTS; (*ôóíêöèÿ 02 - ÷òåíèå ñòàòóñà äèñêð âõ.*)
RCoils:MB_RD_COILS;
WrR: MB_WR_SNG_REG; (*ôóíêöèÿ 6 - çàïèñü åäåíè÷íî&# 227;î ðåãèñòð&#224 ;*)
WrCoil: MB_WR_SNG_COIL; (*ôóíêöèÿ 5 - çàïèñü åäåíè÷íî&# 227;î äèñêð âõ. áèòà*)
RIRs:MB_RD_INP_REGS;

Buffer1: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
Buffer2: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
Buffer3: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
Buffer4: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)
Buffer10: ARRAY[0..255] OF BYTE; (* áàéòîâû&#233 ; áóôåð äàííûõ *)


cmpl: BOOL; (*ïðèçíàê çàâåðøåí&# 237;îñòè ðàáîòû ôóíêöèè*)
port_opened: BYTE := 0; (*ðåçóëüòà ò îòêðûòè&#255 ; ïîðòà*)
Settings:COMSETTINGS; (* íàñòðîéê&# 232; ïîñëåäîâ&# 224;òåëüíîã&#23 8; ïîðòà *)
com_num: PORTS:=0; (*0 - 485-1
1 - 232 - COM1
2 - 485-2 - COM2
4 - DBGU - COM4 *)


enable: BOOL; (*ñîñòîÿíè å ðàáîòû áëîêà*)
err: INT; (*íîìåð îøèáêè*)
TimeOut: TIME:=T#500ms; (*òàéìàóò*)
DataSize: WORD; (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)
ptr_byte:POINTER TO BYTE; (*óêàçàòåë ü íà òèï byte*)
COM_SERVICE1: COM_SERVICE;
state: WORD := 0; (*ñîñòîÿíè å*)


(*ñ÷èòàííî å çíà÷åíè&#229 ;*)
status2:WORD;
real2: REAL;
real3: REAL;
status3: WORD;
real4: REAL;
status4: WORD;
real5: REAL;
status5: WORD;
real6: REAL;
status6: WORD;
real7: REAL;
status7: WORD;
real8: REAL;
status8: WORD;
wrd1: WORD:=1;
wrd_rele_0:WORD:=0;
t21: WORD := 0; (* *)
t12: WORD; (* *)
t14: WORD; (* *)
t15: WORD; (* *)
t17: WORD; (* *)
t16: WORD; (* *)
t18: WORD; (* *)
t19: WORD; (* *)
t20: WORD; (* *)
t25: WORD; (* *)
t13: WORD := 0;(* *)
t22: WORD; (* *)
t22_2: WORD := 0; (* *)
t24: WORD := 0; (* *)
t24_2: WORD := 0; (* *)
wrd_out_tok: WORD := 0;
t30: WORD;
count_err_30: WORD;
RT_t1:R_TRIG;
In_1: DWORD;
Sh_1:BOOL;
Sh_2:BOOL;
Sh_3:BOOL;
Sh_4:BOOL;
V1:WORD;
V2:WORD;
V3:WORD;

enable2: BOOL;
enable3: BOOL;
enable4: BOOL;
enable5: BOOL;
ch1: WORD;
reg1: WORD;
rc1: WORD;
rc2: WORD;
rr1: WORD;
rr2: BYTE;
rir1: WORD;
rir2: WORD;
enable6: BOOL;
cmpl1: BOOL;
err1: BYTE;
ss:BOOL;
x1: WORD;
x2: WORD;
x3: WORD;
END_VAR


Программа:
Скрытый текст:


IF port_opened=0 THEN
Settings.Port:=com_num; (*????? COM-????? RS485*)
Settings.dwBaudRate:=9600; (*????????*)
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=2;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );
(*???? COM-???? ??????, ?? ????????? ? ?????? ? ???????? ?????? *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF

(*

(*RCoils(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rc1 , (*????? ????????*)
Quantity:=rc2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); *) (*???-?? ????????? ?????? *)
RIRs(
Enable:=enable3 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rr1 , (*????? ????????*)
Quantity:=rr2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); ;
RT_t1(CLK:=RIRs.Complete , Q=> );
IF RT_t1.Q THEN
t24:=Buffer1[4]+Buffer1[5];
END_IF

IF RCoils.Complete THEN
v1:=1;
END_IF

WrCoil(
Enable:=enable2 ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=V2 ,
Value:=Sh_1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
WrR(
Enable:=enable4 ,
Mode:=MB_RTU ,
DevAddr:=1 ,
RegAddr:=reg1 ,
Value:=ch1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );

(*RhR(
Enable:=enable5 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*?????*)
FirstAddr:=3 , (*????? ????????*)
Quantity:=1 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer2 , (* ????? ?????? *)
Complete=>cmpl , (*??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );*)
*)
IF port_opened=2 THEN
RiR(
Enable:=enable6 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rc1 , (*????? ????????*)
Quantity:=rc2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer10 , (* ????? ?????? *)
Complete=>cmpl1 , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );
(*RhR(
Enable:=enable6 , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=rir1 , (*????? ????????*)
Quantity:=rir2 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer10 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize );*)
IF cmpl1 THEN
(*t30:=RiR.Exception;*)
IF RiR.Exception=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)


(*????1*)
ptr_byte:=ADR(In_1);(**)
ptr_byte^:=buffer10[4];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[5];
(*ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[3];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer10[2];*)
(*
x1:=BYTE_TO_WORD(BUFFER10[3]) OR SHL(BYTE_TO_WORD(BUFFER10[2]),8);
x2:=BYTE_TO_WORD(BUFFER10[5]) OR SHL(BYTE_TO_WORD(BUFFER10[4]),8);
x3:=BYTE_TO_WORD(BUFFER10[8]) OR SHL(BYTE_TO_WORD(BUFFER10[9]),8);*)
enable6 := FALSE;

ss:=FALSE;

ELSE t14:=t14+1;
;
END_IF
END_IF

END_IF
(*
CASE state OF
0: (* ?1 *)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 02 - ?? ????????? ???????? ????????? ???? bool ?? ??????? ?? ????????? Modbus-RTU*)
RIR(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*????? ?1 *)
FirstAddr:=16 , (*????? ????????*)
Quantity:=31 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer1 , (* ????? ?????? *)
Complete=>cmpl , (* ??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)


(*???? ?????????? ??????? ?????????? ????????, ?? *)
IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
(*?????? ???????? ???????? ??????? ?????? ?????? ??? Float32 ? ??????? ?????? ?????? ??? Int16*)
(*??????? ?????????? ???????? "??????-??????" *)
state:=1;
enable:=0;
ELSE t12:=t12+1;
state:=1;
END_IF
END_IF
END_IF

1*?????????? ????????? ?? ????? ?? ?????????? ? ??????? ?1*)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 03 ????? - ?? ????????? ???????? ????????? ???? int16 ?? ??????? ? ??????? 1 *)
RHR(
Enable:=enable , (* ?????????? ?????? ????? *)
Mode:=MB_RTU , (*????? ????????*)
DevAddr:=1 , (*?????*)
FirstAddr:=25 , (*????? ????????*)
Quantity:=1 , (*?????????? ?????????*)
ComHandle:=Settings.Port , (*????? COM-?????*)
TimeOut:=TimeOut , (*??????? *)
Buffer:=Buffer2 , (* ????? ?????? *)
Complete=>cmpl , (*??????? ?????????? ???????? *)
Exception=>err , (* ??????? ?????? ?????????? ????????? MODBUS ??? ??????:0x00 – ?????? ??? ?????????? ?? ??????????, 0xFE – ?????????? ?????? ???,0xFF – ?????? ???????? *)
ByteCnt=>DataSize ); (*???-?? ????????? ?????? *)
(*???? ?????????? ??????? ?????????? ????????, ?? *)

IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ?????? *)


(*????1*)
ptr_byte:=ADR(In_1);(**)
ptr_byte^:=buffer1[5];
ptr_byte:=ptr_byte+1;
ptr_byte^:=buffer1[4];


state:=2;
enable:=0;
ELSE t14:=t14+1;
state:=2;
END_IF
END_IF
END_IF

2*COIL*)
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 05 *)
WrCoil(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=V1 ,
Value:=Sh_1 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );

(*???? ?????????? ??????? ?????????? ????????, ?? *)

IF cmpl THEN
IF err=0 THEN

state:=3;
enable:=0;
ELSE t15:=t15+1;
state:=3;
END_IF
END_IF
END_IF

3*COIL*)
(*enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 05 *)
WrCoil(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
CoilAddr:=0 ,
Value:=Sh_2 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );

(*???? ?????????? ??????? ?????????? ????????, ?? *)

IF cmpl THEN
IF err=0 THEN

state:=3;
enable:=0;
ELSE t16:=t16+1;
state:=4;
END_IF
END_IF
END_IF*)

state:=4;
4:
enable:=1;
IF port_opened=2 THEN (*?????? ???????????????????*)
(* ??????? 06*)
WrR(
Enable:=enable ,
Mode:=MB_RTU ,
DevAddr:=1 ,
RegAddr:=V2 ,
Value:=v3 ,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Complete=>cmpl ,
Exception=>err );
(*???? ?????????? ??????? ?????????? ????????, ?? *)


IF cmpl THEN
IF err=0 THEN (*???? ??? ??????, ?? ???????? ?????? ?? ??????, ????????? ??????????*)
state:=5;
enable:=0;
ELSE t17:=t17+1;
state:=0;
END_IF
END_IF
END_IF


END_CASE*)

В программе работает только блок RiR со строки 87
Начальный адрес задаю 29, количество 1.
Тайм аут менял с 5мс до 2000 мс. Но выдает ошибку тайм аута RiR.Exception= 255