Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Овен ПЛК160+МВ110ДН+платаTE-TMS

  1. #1

    Question Овен ПЛК160+МВ110ДН+платаTE-TMS

    Здравствуйте! Работаю сейчас над проектом, в котором необходима связь между ОВЕН ПЛК160, МВ110(модуль дискретного ввода), и платой TE-TMS, связь осуществляю по сети RS485, по протоколу ModBus RTU, связь между приборами организована, но когда работают все 3и девайса скорость обмена падает в разы, либо виснет сеть вообще, при настройки параметров сети в сторону увеличения скорости обмена.
    вообще выявлено, что для 3х устройств является оптимальными настройки framing time и polling time = 100ms, при уменьшении этих параметров, сеть виснет(возникает ошибка 81(тайм аут))
    framing time и polling time для ПЛК160 и МВ110, => 2ms
    framing time и polling time для ПЛК160 и TE-TMS, => 20ms
    скорость обмена 19200бит/с,
    как можно увеличить скорость сети для 3х девайсов, что я еще не настроил!?

  2. #2
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    Сколько регистров опрашиваете? С конфигурацией особо не работал, поэтому не знаю какой там запрос: групповой или одиночный. Если одиночный - то необходимо использовать библиотеку модбаса для реализации группового запроса. Скорость заметно возрастёт.

  3. #3

    По умолчанию

    пока опрашиваю 2а регистра но в дальнейшем будет около 100, не подскажите как реализовать групповой опрос(что почитать), реализую опрос регистров в вкладке "конфигурация ПЛК"(это одиночный опрос)

  4. #4
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    С сайта или с диска для ПЛК взять би-бку для модбаса и описание к ней.
    Если не понравится - можно сделать свою биб-ку с помощью SysLibCom.
    Если нужна инфа именно про групповой запрос - то спецификация модбаса. 100 регистров за раз - это слишком круто, там есть ограничение в размере пакета, только не помню сколько. А вот в 2-3 присеста очень даже получится.

  5. #5

    По умолчанию

    не подскажите, отличие группового опроса от одиночного в том, что групповой запрос проходит за одно открытие com-порта, а одиночные за каждое?!

  6. #6
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    А зачем его закрывать? Или порт где-то ещё используется?

    По вопросу: Используя Вашу терминологию, то да - за одно "открытие"

  7. #7

    По умолчанию

    (*Организуем счетчик, что бы передавать эти данные по сети*)
    t:=t+1;
    IF (t MOD 1000)=0 THEN
    A := A + 1;
    IF A > 9999 THEN
    A := 0;
    END_IF
    END_IF

    (*Устанавливаем настройки COM-порта*)
    IF port_opened=0 THEN
    Settings.Port:=com_num; (*номер COM-порта*)
    Settings.dwBaudRate:=115200; (*скорость*)
    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 );
    (*Если COM-порт открыт, то переходим к приему и передачи данных *)
    IF COM_SERVICE1.ready THEN
    port_opened:=2;
    END_IF

    IF port_opened=2 THEN (*Удачно проинициализировали*)

    CASE master1 OF

    0: (* функция 03 инт - ФБ считывает значение параметра типа int из прибора с адресом 2 в регистр с номером 8 по протоколу Modbus-ASCII*)
    get1_modbus(
    Enable:=enabl , (* разрешение работы блока *)
    Mode:=MB_ASCII , (*режим передачи*)
    DevAddr:=2 , (*адрес*)
    FirstAddr:=8 , (*номер регистра*)
    Quantity:=1, (*количество регистров*)
    ComHandle:=Settings.Port , (*номер COM-порта*)
    TimeOut:=TimeOut , (*Таймаут T#50ms*)
    Buffer:=Buffer , (* буфер данных *)
    Complete=>cmpl , (* скопировать признак завершения операции *)
    Exception=>err , (* скопировать регистр ошибок *)
    ByteCnt=>DataSize ); (*кол-во считанных байтов *)
    (*если установлен признак завершения операции, то *)
    IF cmpl THEN
    IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
    x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
    END_IF
    master1:=1; (*переходим к выполнению следующего ФБ*)
    END_IF

    1: (* функция 03 флоат - ФБ считывает значение параметра типа int из прибора с адресом 2 в регистр с номаром 10 по протоколу Modbus-ASCII *)
    get3_modbus(
    Enable:=enabl , (* разрешение работы блока *)
    Mode:=MB_ASCII , (*режим передачи*)
    DevAddr:=2 , (*адрес*)
    FirstAddr:=10 , (*номер регистра*)
    Quantity:=2, (*количество регистров*)
    ComHandle:=Settings.Port ,(*номер COM-порта*)
    TimeOut:=TimeOut , (*Таймаут T#50ms*)
    Buffer:=Buffer , (* буфер данных *)
    Complete=>cmpl , (* скопировать признак завершения операции *)
    Exception=>err , (* скопировать регистр ошибок *)
    ByteCnt=>DataSize ); (*кол-во считанных байтов *)
    (*если установлен признак завершения операции, то *)
    IF cmpl THEN
    master1:=2;(*переходим к выполнению следующего ФБ*)
    IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа FLOAT*)
    ptr_D:=ADR(d);
    ptr_D^:=buffer[1];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[0];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[3];
    ptr_D:=ptr_D+1;
    ptr_D^:=buffer[2];
    END_IF
    END_IF

    2: (* функция 04 инт - ФБ считывает значения трех параметров типа Int из прибора с адресом 2 начиная с регистра с номeром 12*)
    get2_modbus(
    Enable:= enabl, (* разрешение работы блока *)
    Mode:=MB_ASCII , (*режим передачи*)
    DevAddr:=2 , (*адрес*)
    FirstAddr:=12 , (*номер регистра*)
    Quantity:=6 , (*количество регистров*)
    ComHandle:= Settings.Port,(*номер COM-порта*)
    TimeOut:=TimeOut , (*Таймаут T#50ms*)
    Buffer:=Buffer , (* буфер данных *)
    Complete=>cmpl , (* скопировать признак завершения операции *)
    Exception=>err , (* скопировать регистр ошибок *)
    ByteCnt=> DataSize); (*кол-во считанных байтов *)
    (*если установлен признак завершения операции, то *)
    IF cmpl THEN
    IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)
    x1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
    x2:=BYTE_TO_WORD(BUFFER[5]) OR SHL(BYTE_TO_WORD(BUFFER[4]),8);
    x3:=BYTE_TO_WORD(BUFFER[9]) OR SHL(BYTE_TO_WORD(BUFFER[8]),8);
    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

    полный текст программы организующий групповой запрос ModBus
    не могу разобраться как работают вот эти строки x1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
    x2:=BYTE_TO_WORD(BUFFER[5]) OR SHL(BYTE_TO_WORD(BUFFER[4]),8);
    x3:=BYTE_TO_WORD(BUFFER[9]) OR SHL(BYTE_TO_WORD(BUFFER[8]),8);

  8. #8
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    238

    По умолчанию

    Из двух байт собирается WORD

  9. #9

    По умолчанию

    не понятно почему оператор "OR" используется?! это логическое сложение?!
    например x1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8); эта строка!
    происходит преобразование сначала младшей части значения х1 из элемента массива BUFFER[1], затем складывается с старшей частью которая в свою очередь формируется из BUFFER[1] со сдвигом на 8 разрядов вправо?!

  10. #10

    По умолчанию

    ошибся BUFFER[0] вконце

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Энкодер и ПЛК160
    от Ильнур в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 01.08.2012, 09:02
  2. ПЛК160 кнопка F1
    от Aleksandr в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 25.07.2012, 13:44
  3. Энкодер и плк160
    от stumex в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 05.05.2012, 13:04
  4. пид регулятор на плк160
    от smokin в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.09.2011, 15:49
  5. ПЛК160
    от CEkip в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 07.02.2011, 11:34

Ваши права

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