(*программа принимает число через COM порт (с компьютера) и выдаёт его на аналоговый выход 1*)
IF di0 THEN
(*завершение*)
closeComPort:=SysComClose(opencomport);
do0:=FALSE;
do1:=FALSE;
do2:=FALSE;
do3:=FALSE;
i1:=4.1;
ELSE
IF beg THEN
(*инициализация*)
bufold:=0;
comPort:=0;(*RS-485*)
openComPort:=SysComOpen(comPort); (*выдаёт openComPort=0 *)
IF openComPort=INVALID_HANDLE THEN
i1:=5.1;
closeComPort:=SysComClose(comPort);
popytka:=(popytka+1) MOD 500;
IF popytka=0 THEN
do0:=NOT do0;
END_IF;
ELSE
i1:=10.1;
ComSet.dwBaudRate:=(*9600;*) 115200;
ComSet.byParity:=0;
ComSet.byStopBits:=0; (*1,5*)
ComSet.dwBufferSize:=5;
ComSet.dwScan:=0;
ComSet.dwTimeout :=100;
ComSet.Port:=comPort;
ok:=SysComSetSettings(openComPort,ADR(ComSet)); (*выдаёт ok=FALSE *)
IF ok THEN
do3:=TRUE;
vI:=0.001;
END_IF;
beg:=FALSE;
END_IF;
ELSE
(*цикл пока не нажата кнопка di0*)
bytesread:=SysComRead(opencomport,ADR(buf),4,300);
IF bytesread=4 THEN
I1:=buf;
I2:=4;
bufold:=buf;
END_IF;
IF bytesread>0 THEN
do0:=((bytesread MOD 2)=1);
do1:=(((bytesread/2) MOD 2)=1);
do2:=(((bytesread/4) MOD 2)=1);
END_IF;
END_IF; (* IF beg ELSE*)
END_IF; (*IF di0 ELSE*)