Работаю с библиотекой давно и проблем (у меня) с ней не было.
Код:
VAR
SendModbus : MB_WR_REGS;
ES : BOOL := FALSE;
DataReady : BOOL;
MBTimeOut : TIME := T#150ms; //например
Buffer : ARRAY[0..255] OF BYTE;
END_VAR
IF NOT DataReady THEN
...//кладем в Buffer данные
DataReady := TRUE;
ES := TRUE;
END_IF
//настраиваем и открываем порт
//по готовности порта, "работаем" с ним
SendModbus(
Enable := ES,
Mode := MB_RTU,
DevAddr := 1, //например
FirstAddr := 1, //например
Quantity := 2, //например
ComHandle := Settings.Port,
TimeOut := MBTimeOut,
Buffer := Buffer);
ES := FALSE;
IF SendModbus.Complete THEN //можно еще добавить проверку на Exception
...//тут Ваши условия/инструкции по необходимости
ES := TRUE;
DataReady := FALSE;
END_IF
Пользуюсь кодом (когда-то позаимствованным из поста ASo и немного измененным по совету Валенка), указанным выше (пример записи в устройство, чтение аналогичное с небольшими изменениями). Полет нормальный.