Параметр Всегда обновлять переменные надо перевести в значение Вкл. 2.
ок, будем пробовать..
Доброе утро!
ПЛК210. SP14. OwenCommunication, Float
Не выходит пока организовать нормальную IN_OUT или чтение/запись функцию.
В примере дано отдельно описание на чтение и отдельно запись.
И то и то хорошо работает, а вот когда я начинаю и читать и писать, имею проблемы
Пробовал разделить через BLINK по 200мс, то чтение, то запись. Работает, когда угадываю промежуток, но скажем так себе решение.
Пробовал сделать через блок с входами IN_OUT, выбивает в исключение иногда
Для чего вообще нужно: например SP(REAL) вы ее пишете как с панели, так можете записать в нее и из кода.Цитата:
IF OUT1_old<>OUT1 OR OUT2_old<>OUT2 THEN
IN:=OCL.WORD2_TO_REAL(awSlaveData[OUT1], awSlaveData[OUT2], FALSE);
END_IF;
IF IN_old<>IN THEN
FB (rInput :=IN, wOutput1 => awSlaveData[OUT2], wOutput2 => awSlaveData[OUT1]);
END_IF;
IN_old:=IN;
OUT1_old:=OUT1;
OUT2_old:=OUT2;
Регистры должны обновиться, а в случае изменения регистров, должна измениться связанная с ними переменная
В конфигураторе ПЛК110 переменные именно так и работают.
Как это сделать корректно в Codesys 3.5 SP14?
Доброго дня )вопрос : не могу в документации найти..стандартный компонент Modbus TCP Master ( через дерево объектов) может содержать до 100 запросов....а сколько я могу вычитать за один запрос?
Доброго времени Коллеги) итак : MB_TcpRequest отказывается работать (HANDLE_INVALID,10,Некорректное значение дескриптора интерфейса) хотя дескриптор получает от TcpClient....Через опс сервер ,проблем нет,если добавляю через дерево устройств как модбас слейв тоже читается без проблем...Вложение 56612
Вот весь "Код")) удалил все...
IF EnableRead THEN
CASE ReadState OF
STATE_MB_RD.CONNECTING:
fbTcpClient
(
xEnable := TRUE ,
tTimeout := T#5S,
sIpAddr := '192.168.0.7',
uiPort :=502
);
IF fbTcpClient.xActive THEN
fbReadRequest (xExecute := TRUE);
ReadState := STATE_MB_RD.READ;
ELSIF fbTcpClient.xError THEN
fbTcpClient(xEnable := FALSE);
ReadState := STATE_MB_RD.CONNECTING;
END_IF
STATE_MB_RD.READ:
fbReadRequest
(
xExecute:=TRUE,
tTimeout:=T#5S,
usiRetry:=5,
hConnection:=fbTcpClient.hConnection,
xIsRtuOverTcpMode:=FALSE,
usiUnitId:=1,
eFuncCode:=OCL.MB_FC.READ_INPUT_REGISTERS,
uiDataAddr:=1,
uiDataCount:=32,
pData:=ADR (DatafORFANK),
szSize:=SIZEOF (DatafORFANK)
);
EnableRead:=FALSE;
ReadState := STATE_MB_RD.CONNECTING;
END_CASE
END_IF
Поправил ошибки (выделил исправления жирным).
Вложение 56613Код:IF EnableRead THEN
CASE ReadState OF
STATE_MB_RD.CONNECTING:
fbTcpClient
(
xEnable := TRUE ,
tTimeout := T#5S,
sIpAddr := '192.168.0.7',
uiPort :=502
);
IF fbTcpClient.xActive THEN
fbReadRequest (xExecute := FALSE);
ReadState := STATE_MB_RD.READ;
ELSIF fbTcpClient.xError THEN
fbTcpClient(xEnable := FALSE);
ReadState := STATE_MB_RD.CONNECTING;
END_IF
STATE_MB_RD.READ:
fbReadRequest
(
xExecute:=TRUE,
tTimeout:=T#5S,
usiRetry:=5,
hConnection:=fbTcpClient.hConnection,
xIsRtuOverTcpMode:=FALSE,
usiUnitId:=1,
eFuncCode:=OCL.MB_FC.READ_INPUT_REGISTERS,
uiDataAddr:=1,
uiDataCount:=32,
pData:=ADR (DatafORFANK),
szSize:=SIZEOF (DatafORFANK)
);
IF fbReadRequest.xDone OR fbReadRequest.xError THEN
EnableRead:=FALSE;
ReadState := STATE_MB_RD.CONNECTING;
END_IF
END_CASE
END_IF