Написал в личку, дублирую сюда.
Панель СП310 мастер отправляет скриптом:
void send() {
WORD setpoints[3];
setpoints[0]=PSW[500];
setpoints[1]=PSW[501];
setpoints[2]=PSW[502];
Writes(PLC, 1, MODBUS_RTU_REGS_4X, 0, 3, setpoints);
}
ПЛК154 принимает(через конфигуратор все ОК), через библиотеку корректно не работает, вот код:
TYPE SLAVE_DATA :
STRUCT
v1: WORD;
v2: WORD;
v3: WORD;
END_STRUCT
END_TYPE
PROGRAM PLC_PRG
VAR
stComSettings: COMSETTINGS;
stSlaveData: SLAVE_DATA;
fbRtuSlave: MB_RTU_SLAVE;
END_VAR
stComSettings.Port := 4;
stComSettings.dwBaudRate := 115200;
stComSettings.byParity := 0;
stComSettings.byStopBits := 0;
fbRtuSlave(xEnable := TRUE, stComSettings := stComSettings, usiSlaveAddress:= 1, pSlaveBuffer := ADR(stSlaveData), uiSlaveBufferSize := SIZEOF(stSlaveData));
Сначала проверьте через библиотеку читает панель данные с ПЛК или нет. Потом пробуйте писать.
Использую библиотеку с целью возможности оперативного изменения параметров связи с панели управления (Параметры связи опускаются с панели СП307Б на ПЛК160[М02] по RS232 через конфигурацию, опрос ПЛК160 выполняется по RS485 через библиотеку. При смене любого параметра связи в программе "передергивается" на 3с вход xEnable для применения новых параметров) Обмен с параметрами "Адрес, скорость, 8, N, 1" есть, в том числе при изменении любых параметров, кроме четности. Но стоит только задать (на мастере и, соответственно, в библиотеке) вместо параметра N (т.е 0) - ODD или EVEN (1 или 2), как порт тут же замолкает. Мастер "вываливается" по таймауту. Библиотека флаг xError не выставляет, то есть вообще никак не реагирует на поступающий запрос. Стоит выставить снова N вместо E или O, как связь тут же появляется. Опрашиваю с ноутбука через АС-4М.
OwenModbusSlave 2.3.9.4 поддерживает параметры "Адрес, скорость, 8, E, 1" и "Адрес, скорость, 8, O, 1"? Кому-нибудь удавалось установить связь с указанными параметрами через библиотеку? Может есть какие особенности?
Привожу фрагмент реализации:
2020-08-09_17-53-16.png