Примерно так?
Код:
IF port_opened=0 THEN
settings.Port:=0; (*номер порта RS-485*)
settings.dwBaudRate:=baud_rate; (*скорость*)
settings.byParity:=0;
settings.dwTimeout:=0;
settings.byStopBits:=0;
settings.dwBufferSize:=0;
settings.dwScan:=0;
END_IF
(*открываем COM-порт*)
com_service1(enable:=(port_opened=0), settings:=settings, task:=open_tsk);
(*если COM-порт открыт, пепреходим к приему и передаче данных*)
IF com_service1.Ready THEN
port_opened:=2;
END_IF
IF (port_opened=2) THEN
Buffer[1].0:=out1;
...
Buffer[0].7:=out16;
send_modbus(
enable:=enabl, (*резрешение работы блока*)
mode:=mb_rtu, (*режим передачи*)
DevAddr:=slave_addr, (*адрес*)
FirstAddr:=50, (*номер первого регистра*)
quantity:=16, (*количество записываемых регистров*)
ComHandle:=settings.Port, (*номер СОМ-порта*)
TimeOut:=TimeOut, (*таймаут, естессно*)
buffer:=buffer, (*ну буфер же*)
Complete=>cmpl, (*копировать признак завершения операции*)
Exception=>err, (*копируем регистр ошибок*)
RegCnt=>DataSize); (*кол-во записанных байтов*)
END_IF
Где-то что-то напутал, индикатор rs-485 теперь не загорается. Пойду разберу экибану, надо адрес перепроверить.