Цитата Сообщение от Валенок Посмотреть сообщение
Если Вы кого-то выключаете, и опрос норм. - тупо коллизия 2 мастера или по адресам.
Если плк всегда норм. опрошивает МК, а в опс-слейве данных нет, 2 варианта:
1.Хреновый слейв на опс. Копайте там
2.Хреновый мастер на 63. Тут все от рук аффтора зависит.
1. Что подразумевается под этой фразой?
2. Не нашел как вставить файл поэтому код ФБ опроса МК вставляю текстом, может поможет в чем:
IF NOT Port_opened THEN
Com_handle := SysComOpen(0);
IF Com_handle = 16#FFFFFFFF THEN
SysComClose(0);
Com_handle:=SysComOpen(0);
END_IF;

Com_setEx.Size := SIZEOF(com_setEx);
Com_setEx.Port := 0; (*Èñïîëüçó åìûé ïîðò*)
Com_setEx.dwBaudRate := 115200; (*cêîðîñòü ïåðåäà÷&#232 ; äàííûõ*)
Com_setEx.byStopBits := 0; (*Êîë. ñòîï-áèò*)
Com_setEx.byParity := 0; (*Êîíòðîë&#252 ; ÷åòíîñò&#232 ;*)
Com_setEx.dwTimeout := 0;
Com_setEx.dwBufferSize := 0;
Com_setEx.dwScan := 0;
Com_setEx.cByteSize := 8; (*Êîë. áàéò â ïîñûëêå*)

Res:=SysComSetSettingsEx(0,ADR(Com_setEx));

IF NOT Res THEN
Port_opened:=TRUE;
END_IF;
END_IF;

IF NOT Port_opened THEN
RETURN;
END_IF;

(************************************************* *************************************)

CASE Master OF

(************************************************* *************************************)

0:

(*ôóíêöèÿ 03 èíò - ÔÁ ñ÷èòûâàå&# 242; çíà÷åíè&#229 ; ïàðàìåòð&# 224; òèïà int èç ïðèáîðà ñ àäðåñîì 16 â ðåãèñòð ñ íîìåðîì 8 ïî ïðîòîêîë&# 243; Modbus-RTU*)

Read(
Enable:=Port_opened, (* ðàçðåøåí&# 232;å ðàáîòû áëîêà *)
Mode:=MB_RTU , (*ðåæèì ïåðåäà÷&#232 ;*)
DevAddr:=16, (*àäðåñ*)
FirstAddr:=51, (*íîìåð ðåãèñòð&#224 ;*)
Quantity:=1, (*êîëè÷åñò âî ðåãèñòðî&# 226;*)
ComHandle:=0 , (*íîìåð COM-ïîðòà*)
TimeOut:=T#10ms, (*Òàéìàóò T#50ms*)
Buffer:=Buffer , (* áóôåð äàííûõ *)
Complete=>Cmpl , (* ñêîïèðîâ&# 224;òü ïðèçíàê çàâåðøåí&# 232;ÿ îïåðàöè&#232 ; *)
Exception=>Error , (* ñêîïèðîâ&# 224;òü ðåãèñòð îøèáîê *)
ByteCnt=>DataSize ); (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)
(*åñëè óñòàíîâë&# 229;í ïðèçíàê çàâåðøåí&# 232;ÿ îïåðàöè&#232 ;, òî *)
IF Cmpl THEN
IF Error=0 THEN (*Åñëè íåò îøèáîê, òî ïîëó÷àå&#236 ; äàííûå èç áóôåðà òèïà INT*)
MK_IB:=(BUFFER[4]);
END_IF
Master:=1; (*ïåðåõîäè ì ê âûïîëíåí&# 232;þ ñëåäóþùå&# 227;î ÔÁ*)
END_IF

(************************************************* *************************************)

1:

(*ôóíêöèÿ 16 - çàïèñü ïàðàìåòð&# 238;â òèïà Int (ðåãèñòð 4) è Real (ðåãèñòð 6) â ïðèáîð ñ àäðåñîì 2 *)

Buffer[1] := DINT_TO_BYTE(MK_OB); (*çàïèñü â áóôôåð ïàðàìåòð&# 224; òèïà INT*)

Writing(
Enable:= Port_opened, (* ðàçðåøåí&# 232;å ðàáîòû áëîêà *)
Mode:=MB_ASCII , (*ðåæèì ïåðåäà÷&#232 ;*)
DevAddr:=16 , (*àäðåñ*)
FirstAddr:= 50, (*íîìåð ðåãèñòð&#224 ;*)
Quantity:= 1, (*êîëè÷åñò âî çàïèñûâà&# 229;ìûõ ðåãèñòðî&# 226;*)
ComHandle:=0 , (*íîìåð ñîì-ïîðòà*)
TimeOut:=T#10ms , (*òàéìàóò T#50ms*)
Buffer:=Buffer , (* áóôåð äàííûõ *)
Complete=>Cmpl , (* ñêîïèðîâ&# 224;òü ïðèçíàê çàâåðøåí&# 232;ÿ îïåðàöè&#232 ; *)
Exception=>Error , (* ñêîïèðîâ&# 224;òü ðåãèñòð îøèáîê *)
RegCnt=> DataSize); (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)

IF Cmpl THEN
Master:=0; (*ïåðåõîäè ì ê âûïîëíåí&# 232;þ ñëåäóþùå&# 227;î áëîêà*)
END_IF

(************************************************* *************************************)

END_CASE

(************************************************* *************************************)
(*Ïîáèòîâî å ïðåäñòàâ&# 235;åíèå âõîäîâ ÌÊ*)
_SPARE_4:=MK_IB.0;
water_pump_run:=MK_IB.1;
water_pump_fail:=MK_IB.2;
MK_I4:=MK_IB.3;
MK_I5:=MK_IB.4;
MK_I6:=MK_IB.5;
MK_I7:=MK_IB.6;
MK_I8:=MK_IB.7;
(************************************************* **************************************)
(*Ïîîäèíî÷ íîå ïðåäñòàâ&# 235;åíèå âûõîäîâ ÌÊ*)
MK_OB.0:=v_2;
MK_OB.1:=v_3_o;
MK_OB.2:=v_3_c;
MK_OB.3:=v_4;