80. Работа в режиме slave по нестандартному протоколу обмена

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ก.ย. 2022
  • Ссылка на доработанный пример из видео:
    ftp.owen.ru/CoDeSys3/21_Examp...
    Я оговорился на 17:18 - сброс таймера не нужен, так как сбрасывается флаг xReceiveInProcess, от которого таймер и запускается.
    Библиотеки OwenVendrorProtocols и OwenCommunication:
    owen.ru/product/codesys_v3/li...
    Документ "CODESYS V3.5. Реализация нестандартных протоколов":
    ftp.owen.ru/CoDeSys3/11_Docum...
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 23

  • @endprg6477
    @endprg6477 ปีที่แล้ว +1

    "Таймер внутри IF - к длительным командировкам..." ))) Это прям закон Мёрфи.

  • @rv9wfj
    @rv9wfj ปีที่แล้ว +1

    Спасибо Евгений. Было особенно интересно сначала самому код написать, а затем на вашу реализацию посмотреть.
    По практике использования данного весового терминала могу сказать, что описание протокола не соответствует реальности.
    1.Реальная посылка терминала 'ww000000 kg$R$N' или 'ww-00000 kg$R$N' (в моем случае терминал настроен на вес брутто и индикацию без плавающей точки)
    2.Постоянно в порт приходят склейки пакетов, в среднем у меня за один цикл приходит 1,5 пакета.
    3.Терминал при работе от 220в крайне помеха незащищенный и часто вместо цифр в середине пакета приходит все что угодно. Если этот же терминал запитать от аккумулятора то пакеты идут правильные.
    Отличия от вашего кода:
    1.Я открывал/закрывал порт через ФБ библиотеки CAA SerialCom. Есть ли принципиальная разница? И в случае ошибки я закрывал COM порт (как в примере CoDeSys).
    2.В качестве буфера приема я сразу использовал текстовую строку и обратил внимание что часто LEN(sReciveBuffer) и fbRead.szSize имеют разную длину. Наверно правильнее использовать все же массив байт.
    3.Из за постоянных склеек и получения мусора по середине пакета пришлось написать функцию контроля каждого пришедшего байта на валидность.
    P.S. Если кому-то нужна моя реализация, пишите в личку.

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว +2

      1. Принципиальный разницы нет. COM_CONTROL - это обертка над COM.Open и COM.Close.
      2. Я думаю, лучше использовать массив байт. Длина строки определяется по наличию в строке символа с кодом 0x00 - поэтому вы и наблюдали разницу (например, из-за помехи в середине пакета появлялся символ с этим кодом).

  • @DruBrawler
    @DruBrawler ปีที่แล้ว

    Спасибо. Хорош.👍

  • @user-du3gy4og8x
    @user-du3gy4og8x ปีที่แล้ว +1

    Здравствуйте, такой вопрос: программирую весы cas ad, они работают с текстовым форматом ascii. Не совсем понимаю в какой форме отправлять запрос: в формате string или array of byte:= [16#...] ?
    Назначение команд (из инструкции ): "Enq"-> 05H (для примера)

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Добрый день. В принципе, в вашей ситуации подойдет любой из вариантов. Но для STRING потребуется делать это так: '$05'. Знак доллара - спецсимвол, указывающий, что следом за ним размещен код символа ASCII.

  • @user-du3dt9dh4c
    @user-du3dt9dh4c ปีที่แล้ว

    Здравствуйте! Есть ли возможность опроса контроллером не физического com порта, а виртуального. В смысле через коммутатор подключиться к MOXA NPort 5210A, к которой в свою очередь подключено устройство RS232? (не нашёл в руководстве "Реализация нестандартных протоколов
    "

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Добрый день. С MOXA NPort потребуется работать через TCP или UDP (см. документ "Реализация обмена через сокеты"). Организовать "Real COM Mode" не получится.

  • @user-du3gy4og8x
    @user-du3gy4og8x ปีที่แล้ว

    Здравствуйте, есть преобразователь Adam-4521. Где можно в codesys указать адрес преобразователя , если преобразователей несколько и нам нужно обратить к одному из них?

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Насколько я понял из описания Adam-4521 - если вы подключаете несколько таких преобразователей к одному COM-порту контроллера, то за преобразователями не должно быть слэйвов с совпадающими адресами. Адресации на уровне преобразователей, как я понимаю, нет - она только на уровне слэйвов. Но лучше уточнить у техподдержки Advantech.

    • @user-du3gy4og8x
      @user-du3gy4og8x ปีที่แล้ว

      Понятно, спасибо

  • @pierlepesh9607
    @pierlepesh9607 ปีที่แล้ว

    Несколько вопросов.:
    1. Если плк сторонней фирмы, можно ли в нем исп биб-ку owen?
    2. Если к ПЛК уже подключено 10ть модулей овен со скоростья 19200, и тебе понадобилось подкл.приблуду по модбасу рту со своими параметрами порта и скор 9600, а на ПЛК имеется только 1 порт rs485. Что тогда делать?
    Спасибо, Евгений!

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      1. Смотря о какой именно библиотеке речь. Если про OwenVendrorProtocols и OwenCommunication - то они не будут работать на ПЛК других производителей.
      2. Можно для модулей ОВЕН настроить те же параметры обмена, что для "приблуды". Или настроить обмен через библиоотеку (например, OwemCommunication) и переоткрывать порт с новыми настройками перед опросом "приблуды" и после.

  • @mikhailglgl3138
    @mikhailglgl3138 ปีที่แล้ว

    Когда не индикатор, а весы, где данные надо получать оперативно в процессе дозирования, то таймер в 10 секунд конечно неприемлем, приходится жертвовать кодом для скорости работы с прибором

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      10 cекунд - это условное значение для примера, чтобы успеть показать, как приходят фрагменты пакетов. В реальной жизни разумное время ожидания полного пакета определяется особенностями конкретного устройства.

  • @volkovdmitriy2886
    @volkovdmitriy2886 ปีที่แล้ว

    Здравствуйте. Подскажите пожалуйста. Мне нужно подключить весы фирмы CAS RS 232 8шт по нестандартному протоколу. Возможно ли при помощи СПК опрашивать сразу 8 весов?

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Если весы работают в режиме slave - то можно. Если весы являются мастером (как весовой индикатор в данном видео) - то возникнут сложности, потому что каждые весы придется подключать по своему интерфейсу. У СПК всего 2 порта RS-232 - так что потребуется использовать конвертеры Ethernet/RS-232 и коммутатор.

    • @volkovdmitriy2886
      @volkovdmitriy2886 ปีที่แล้ว

      @@CodesysOneLove Спасибо. Если у вас примеры как это можно сделать?

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      @@volkovdmitriy2886 сделать что именно? В каком режиме работают ваши весы?

    • @volkovdmitriy2886
      @volkovdmitriy2886 ปีที่แล้ว

      @@CodesysOneLove Режим Slave. 8-битный код ASCII. Задача: 8 емкостей, 8 весов. По очереди нужно опрашивать вес емкости, выводить на контроллер и далее в скаду систему оператору

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      @@volkovdmitriy2886 понятно. Вам нужно изучить этот документ: ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_UserProtocols_v.3.0.pdf