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êîðîñòü ïåðåäà÷è ; äàííûõ*)
Com_setEx.byStopBits := 0; (*Êîë. ñòîï-áèò*)
Com_setEx.byParity := 0; (*Êîíòðîëü ; ÷åòíîñòè ;*)
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; çíà÷åíèå ; ïàðàìåòð&# 224; òèïà int èç ïðèáîðà ñ àäðåñîì 16 â ðåãèñòð ñ íîìåðîì 8 ïî ïðîòîêîë&# 243; Modbus-RTU*)
Read(
Enable:=Port_opened, (* ðàçðåøåí&# 232;å ðàáîòû áëîêà *)
Mode:=MB_RTU , (*ðåæèì ïåðåäà÷è ;*)
DevAddr:=16, (*àäðåñ*)
FirstAddr:=51, (*íîìåð ðåãèñòðà ;*)
Quantity:=1, (*êîëè÷åñò âî ðåãèñòðî&# 226;*)
ComHandle:=0 , (*íîìåð COM-ïîðòà*)
TimeOut:=T#10ms, (*Òàéìàóò T#50ms*)
Buffer:=Buffer , (* áóôåð äàííûõ *)
Complete=>Cmpl , (* ñêîïèðîâ&# 224;òü ïðèçíàê çàâåðøåí&# 232;ÿ îïåðàöèè ; *)
Exception=>Error , (* ñêîïèðîâ&# 224;òü ðåãèñòð îøèáîê *)
ByteCnt=>DataSize ); (*êîë-âî ñ÷èòàííû&# 245; áàéòîâ *)
(*åñëè óñòàíîâë&# 229;í ïðèçíàê çàâåðøåí&# 232;ÿ îïåðàöèè ;, òî *)
IF Cmpl THEN
IF Error=0 THEN (*Åñëè íåò îøèáîê, òî ïîëó÷àåì ; äàííûå èç áóôåðà òèïà 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 , (*ðåæèì ïåðåäà÷è ;*)
DevAddr:=16 , (*àäðåñ*)
FirstAddr:= 50, (*íîìåð ðåãèñòðà ;*)
Quantity:= 1, (*êîëè÷åñò âî çàïèñûâà&# 229;ìûõ ðåãèñòðî&# 226;*)
ComHandle:=0 , (*íîìåð ñîì-ïîðòà*)
TimeOut:=T#10ms , (*òàéìàóò T#50ms*)
Buffer:=Buffer , (* áóôåð äàííûõ *)
Complete=>Cmpl , (* ñêîïèðîâ&# 224;òü ïðèçíàê çàâåðøåí&# 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;





Ответить с цитированием