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

Тема: Modbus(master) не читает входные переменные

  1. #1

    По умолчанию Modbus(master) не читает входные переменные

    Подскажите, в чем причина, почему в конфигурации ПЛК150ІМ (прошивка 2.07.02, таргет 2.07) Modbus(Master) не отображается входная переменная T2 .Протокол Modbus(RTU). Сниффером обмен просматривается нормально. Внешний прибор принимает и отвечает, реагирует на изменения выходного регистра С2r по команде 0х06, отвечает и на запрос 0х03:
    01 03 00 7C 00 02 05 D3
    01 03 04 13 88 00 00 7E 9D - что соответствует значению 5000,
    а во входном регистре ПЛК не отображается . Пробовал и Real и Registr.
    Менял и время опроса и фрейм тайм. Last error показывает 81, при изменении выходного регистра кратковременно меняется на 0.
    Прибор также нормально подключается через AC-4 и Lectus к Simp Light, читает и записывает по тем же адресам.
    По RS-485 даный ПЛК нормально работает с МДВВ, поэтому мне кажется
    порт здесь ни причем.
    Последний раз редактировалось vojt; 10.01.2011 в 22:07.

  2. #2

    По умолчанию

    порт Dbgu в режиме Rtu не работает как мастер.

  3. #3

    По умолчанию

    Порт Dbgu на даный момент я не использую, , поскольку в этом ПЛК 150ІМ (2008г.в.) не развязан Dbgu, и дает помехи на аналоговые входы. Связь с ПК по ТСР как установлено в праметрах связи.

  4. #4

    По умолчанию

    <порт Dbgu в режиме Rtu не работает как мастер>
    Владислав, я не совсем понял ответ. Обмен идет по RS-485, а на сколько я понимаю, порт Dbgu это Debug RS-232, или иначе?

  5. #5

    По умолчанию

    Вспомнил, что с этой прошивкой 2.07.02 были проблемы по связи с МДВВ, пока не изменил минимальное время цикла до 10. Может причина в этом? Еще вопрос, на форуме я нашел здесь: http://www.owen.ru/forum/showthread.php?t=2915
    что изменения на 7-битный режим работы порта в Вашем мастере не предусмотрено, а у меня в настройках установлено 8 но 2 стоп-бита (такие заводские настройки внешнего прибора УБЗ-302) , от этого работа мастера не может нарушаться?
    Последний раз редактировалось vojt; 12.02.2010 в 03:58.

  6. #6

    По умолчанию

    1. 2 стоп бита должны стоять и у мастера, и у ВСЕХ приборов в сети.
    2. Framing time для мастера ставим в 0.
    Последний раз редактировалось Филоненко Владислав; 12.02.2010 в 12:37.

  7. #7

    По умолчанию

    Все равно Modbus(Master) не читает. Не знаю, может дело в этом ПЛК может в прошивке, перепрошивать не хочу, потому, что он установлен в рабочей установке . Для этой задачи буду покупать новый ПЛК150ИМ, может в нем будет все нормально.
    Как резервный вариант пробую использовать библиотеку Unm. Нормально идет передача, нормально прием только не знаю как перевести символы в принятой строке в числовое значение.

  8. #8

    По умолчанию

    с расшифровкой символов я разобрался через указатели. но, что делать если в строке идет символ $00, после которого строка обрывается и последующии символы не записываются ни в строку ни адресное пространство указанное указателем. на форуме обсуждался такой вопрос http://www.owen.ru/forum/showthread.php?p=6561&
    но я так и не понял каким образом прочитать и расшифровать всю строку в которой встречаются нулевые символы?
    При передаче с библиотекой UNM нулевые символы все-таки передаются, их видно сниффером (01 03 00 7C 00 02 05 D3 ) , да и внешний прибор не выдал бы ответную посылку, если б не получил полную команду включая и CRC. В СоDeSys эта строка в онлайне выглядит так trans_str:='$01 $03' , хотя задается вот так trans_str:STRING(80):='$01 $03 $00 $7C $00 $01 $45 $D2';
    Если нулевые символы передаются, не смотря на то, что их в онлайне не видно, то значит они все-таки где-то храняться?
    Последний раз редактировалось vojt; 20.02.2010 в 00:11.

  9. #9

    По умолчанию

    Я уже сам спрашиваю, сам и отвечаю. Может не правильно формулирую вопросы ,или нужно сменить раздел или тему ?
    Подскажите будет ли работать такой скрипт с библиотекой UNM и структурой RBDATE, чтоб вместо принятия строки принимать байты, тем самым обойти нулевые символы в строке:
    <
    VAR
    LockDevise: RBDATA;
    RB_0: BYTE; (*Принятые байты *)

    RB_8: BYTE;
    i2:INT;
    END _VАR
    ….
    (*побайтно а не в строку*)
    CASE i2 OF
    0:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_0:=LockDevise.data;
    i2:=1;
    1:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_1:=LockDevise.data;
    i2:=2;


    8:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_8:=LockDevise.data;
    i2:=0
    END_CASE
    ……
    >
    Вместо принятия строки:
    <
    FOR i:=1 TO 9 DO
    dat:=GetByte(DeviceNumber :=id_dev);
    rcv_str:=CONCAT(rcv_str,RBDATA_TO_STRING(dat));
    END_FOR
    >
    Или ‘date’ в структуре ‘RBDATE’ не являеться байтом принятой посылки?

Ваши права

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