Здравствуйте.

В сети RS-485 есть множество устройств, часть из них работает на скорости 115200 (модули ввода/вывода) и часть на скорости 19200 (частотники, сторонние контроллеры). В мастер сеть все теги не влазят, поэтому приходится вести обмен данными вручную через библиотеки.

Собственно трудность: на одной скорости чтение и запись по RS не представляет сложности, но вот перейти на другую скорость обмена у меня не получается. Прошу помощи опытных специалистов, как лучше и правильнее менять скорость порта?

Я пытаюсь это делать путём закрытия порта и открытия его с новыми настройками. Однако данный манёвр приводит к полному отсутствию связи с каким-либо устройством.

Программа выгляди так:

IF port_opened=0 THEN
Settings.Port:=0;
Settings.dwBaudRate:=115200;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=1;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
END_IF

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );

IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF

IF port_opened=2 THEN

CASE master1 OF

0:
get1_modbus(
Enable:=enabl ,
Mode:=MB_RTU ,
DevAddr:=150 ,
FirstAddr:=520 ,
Quantity:=1,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer ,
Complete=>cmpl ,
Exception=>err ,
ByteCnt=>DataSize );
IF cmpl THEN
IF err=0 THEN
x1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
END_IF
master1:=0;
END_IF


Как правильно перенастроить или переоткрыть порт с новыми настройками?