написал программу для PLC-150:
Код:
VAR_GLOBAL
I1 AT %QD7.0:REAL;
di0 AT %IX0.0:BOOL;
di1 AT %IX0.1:BOOL;
do0 AT %QX1.0:BOOL;
do1 AT %QX1.1:BOOL;
do2 AT %QX1.2:BOOL;
do3 AT %QX1.3:BOOL;
END_VAR
Код:
PROGRAM PLC_PRG
VAR
beg:BOOL:=TRUE;
comPort:PORTS:=0;
openComPort:DWORD;
closeComPort:BOOL;
inp:BOOL;
outp:BOOL;
xOutput:fOutput;
ok:BOOL;
ComSet:comsettings;
vI:REAL;
bytesRead:DWORD;
buf: REAL;
END_VAR
Код:
IF di0 THEN
(*завершение*)
closeComPort:=SysComClose(opencomport);
ELSE
IF beg THEN
(*инициализация*)
openComPort:=SysComOpen(comPort);
IF openComPort=INVALID_HANDLE THEN
i1:=5.1;
ELSE
i1:=10.1;
END_IF;
ComSet.dwBaudRate:=9600;
ComSet.byParity:=0;
ComSet.byStopBits:=0;
ComSet.dwBufferSize:=4;
ComSet.dwScan:=0;
ComSet.dwTimeout :=10;
ComSet.Port:=comPort;
ok:=SysComSetSettings(openComPort,ADR(ComSet));
IF ok THEN
do3:=TRUE;
END_IF;
vI:=0.001;
beg:=FALSE;
ELSE
(*цикл пока не нажата кнопка di0*)
bytesread:=SysComRead(opencomport,ADR(buf),4,300);
IF bytesread=4 THEN
(*vI:=buf;*)
I1:=buf;
END_IF;
IF bytesread>0 THEN
do0:=((bytesread MOD 2)=1);
do1:=(((bytesread/2) MOD 2)=1);
do2:=(((bytesread/4) MOD 2)=1);
(* do3:=(((bytesread/16) MOD 2)=1);*)
END_IF;
END_IF (* IF beg ELSE*)
END_IF (*IF di0 ELSE*)
При старте программы начинает выдавать ток с 1-ого аналогового выхода 10.1 мА (т.е. порт открыт)
почему-то загорается лампочка дискретного выхода №1 вместо №4-ого (т.е. конфигурация установлена)
передаю с копма сообщение, а контроллер не ловит его, о чём говорят лампочки остальных дискретных выходов (т.е. количество принятых байт=0)
Заметил, что при логиневании CoDeSys говорит, что я не правильно задал ComSet.Port, и всегда принудительно менял значение переменной comPort на COM1
Пробовал связываться через RS-232 и RS-485 (менял подключение Rx,Tx - A,B) результат одинаковый.
Вопросы:
1. Можно ли общаться с этим контроллером через RS-232 или он только для записи в него программы?
2. Как подключаться к RS-485 (в смысле: Tx к A, Rx к B или наоборот)? Что будет если я не правильно подключу?
заранее спасибо