Показано с 1 по 7 из 7

Тема: Опрос двух устройств по ModBus RTU

  1. #1

    По умолчанию Опрос двух устройств по ModBus RTU

    Прошу помощи. Не могу наладить работу двух МВ110(2а и 2ас) и ПЛК110-60 по ModBusRTU
    Когда одно из устройств опрашивается, то все идет, как пытаюсь два, то второе устройство даже не мигает. Ошибка 255.Подскажите, пожалуйста в чем ошибка.
    FUNCTION_BLOCK COM_RS_485_1
    VAR_INPUT
    END_VAR
    VAR_OUTPUT
    DAV_SISTEM:REAL;
    DAV_SISTEM1: REAL;
    END_VAR
    VAR
    get1_modbus1: MB_RD_HOLD_REGS; (*функция 03 - чтение параметра типа INT*)
    get2_modbus2: MB_RD_HOLD_REGS; (*функция 03 - чтение параметра типа INT*)
    Buffer: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)
    Buffer1: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)
    cmpl: BOOL;
    port_opened: BYTE := 0;
    Init: BOOL; Settings:COMSETTINGS;
    com_num: PORTS:=0; (*0 - RS-485, 2 - RS-482-2, 1 - RS-232*)
    enabl: BOOL; (*состояние работы блока*)
    err: INT; (*номер ошибки*)
    TimeOut: TIME:=T#100ms; (*таймаут*)
    Exception: BYTE;
    DataSize: WORD;
    master1: BYTE:= 0;
    t: DWORD; (*переменная для организации счетчика*)
    A: WORD := 0; (*счетчик*)
    COM_SERVICE1: COM_SERVICE;
    ptr_R1:POINTER TO BYTE;
    ptr_D:POINTER TO BYTE;
    ptr_D1:POINTER TO BYTE;

    END_VAR
    ###########################################
    t:=t+1;
    IF (t MOD 1000)=0 THEN
    A := A + 1;
    IF A > 9999 THEN
    A := 0;
    END_IF
    END_IF
    IF port_opened=0 THEN
    Settings.Port:=com_num;
    Settings.dwBaudRate:=38400;
    Settings.byParity:=0;
    Settings.dwTimeout:=0;
    Settings.byStopBits:=0;
    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: (* Опрашиваем МВ110-2ас*)
    get1_modbus1(
    Enable:=enabl ,
    Mode:=MB_RTU ,
    DevAddr:=2 ,
    FirstAddr:=264 ,
    Quantity:=2,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Buffer:=Buffer ,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );


    IF cmpl THEN
    IF err=0 THEN
    ptr_D:=ADR(DAV_SISTEM);
    ptr_D^:=buffer[3];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[2];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[1];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[0];
    END_IF


    IF cmpl THEN
    master1:=1;
    END_IF


    END_IF

    1: (* Опрашиваем МВ110-2а*)
    get2_modbus2(
    Enable:=enabl ,
    Mode:=MB_RTU ,
    DevAddr:=3 ,
    FirstAddr:=4,
    Quantity:=2,
    ComHandle:=Settings.Port ,
    TimeOut:=TimeOut ,
    Buffer:=Buffer1 ,
    Complete=>cmpl ,
    Exception=>err ,
    ByteCnt=>DataSize );


    IF cmpl THEN

    IF err=0 THEN
    (* ==> Сюда программа не входит вообще, так как выдает ошибку 255 <<==*)
    ptr_D1:=ADR(DAV_SISTEM1);
    ptr_D1^:=buffer1[3];
    ptr_D1:=ptr_D1+1;
    ptr_D1^:=buffer1[2];
    ptr_D1:=ptr_D1+1;
    ptr_D1^:=buffer1[1];
    ptr_D1:=ptr_D1+1;
    ptr_D1^:=buffer1[0];
    END_IF
    master1:=0;


    END_IF

    END_CASE

    IF enabl = FALSE THEN
    enabl := TRUE;
    END_IF

    IF err <> 0 THEN
    enabl := FALSE;
    END_IF

    END_IF

  2. #2

    По умолчанию

    Порт открывается. с первого устройства с номером 2 все считывается. А вот до номера 3 не доходит.

  3. #3

    По умолчанию

    Думаю ответ кроется в настройках самих МВ110, в параметре Задержка ответа по RS485. Может быть кто то даст рекомендации. Все приборы на столе около друг друга. Скорость 38400.

  4. #4
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,033

    По умолчанию

    Проверьте состояние перемычки Х2 на приборах МВ (мануал, Приложение Б, стр. 46). У меня были случаи, когда эта перемычка стояла в положении "Заводские настройки". В Конфигураторе приборы виделись, настраивались, все запоминалось, но работали с другими девайсами только по заводским настройкам (9600, адрес 16) независимо от того какие я прописывал скорости и адреса.

  5. #5
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,317

    По умолчанию

    Мутная работа c "enabl". Например:
    Код:
    IF enabl = FALSE THEN
     enabl := TRUE;
     END_IF
    
     IF err <> 0 THEN
     enabl := FALSE;
     END_IF
    =>
    Код:
    enabl := err = 0;
    Если
    Код:
    master1: BYTE:= 0;
    заменить на
    Код:
    master1: BYTE:= 1;
    эффект какой ?

  6. #6
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    882

    По умолчанию

    ПЛК110 - М02?
    Прошивка какая ?

    Иногда помогает таймаут между запросами.

    ЗЫ
    А enabl - это с сайта пример, видимо.

  7. #7

    По умолчанию

    Не отписался по вопросу, уезжал. Вопрос решен. Проблема была именно в настройках таймаутов в самих приборах. Начал их менять и второй прибор начал отвечать.

Похожие темы

  1. Опрос нескольких устройств по modbus
    от gias67 в разделе Сетевые технологии
    Ответов: 5
    Последнее сообщение: 26.11.2018, 15:48
  2. Ответов: 15
    Последнее сообщение: 17.09.2018, 17:04
  3. Ответов: 7
    Последнее сообщение: 12.04.2018, 17:17
  4. Опрос ПЛК160 по Modbus TCP с двух ПК.
    от Фаттахов Ринат в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 04.04.2017, 15:53
  5. Ответов: 8
    Последнее сообщение: 18.08.2015, 20:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •