Связь по Modbus на Raspberry PI

Помечено: , ,

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Записи
  • #2201
    djbond07
    Участник

    Добрый день! Установил скаду на Raspberry Pi 2B, всё примеры в веб-приложении открывает, всё работает. Теперь хочу перенести свою скаду на малину.

    В статьях в интернете вычитал, что на пинах малины есть встроенный UART протокол, т.е. 2 пина, как последовательный интерфейс работают. Использовали ли Вы пины GPIO в таком для Вашей скады? или же лучше всё-таки работать по схеме USB порт -> конвертер интерфейса -> устройство ?

    И более конкретный вопрос. настроил WebIOPi на Raspi, сделал так, что у меня в этой программе отображается порт «serial0». Это как раз и есть тот виртуальный COM порт, который нужен для работы коммуникатора? И если да, то как правильно настроить коммуникатор, чтобы при переносе скады он соединялся с ним?

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

    #2207
    Mikhail
    Модератор

    Добрый день!

    Использовали ли Вы пины GPIO в таком для Вашей скады? или же лучше всё-таки работать по схеме USB порт -> конвертер интерфейса -> устройство ?

    Я не использовал. Но если Вы попробуете и опишите свой опыт, будет весьма полезно.

    как правильно настроить коммуникатор, чтобы при переносе скады он соединялся с ним?

    При использовании USB порта я получал список портов командой ls /dev/tty* и прописывал порт в Коммуникаторе.
    /dev/tty* — это фильтр. Возможно, Вам нужен другой фильтр
    Т.е. главное — узнать полное имя порта и указать его в настройках.

    #2208
    Mikhail
    Модератор

    Напишите, пожалуйста, что у Вас получится

    #2210
    djbond07
    Участник

    Хорошо, обязательно отпишусь в этой теме по результатам

    #2215
    djbond07
    Участник

    Добрый день! Не получается настроить коммуникатор. Вот что сделал:
    1. по команде dmesg посомтрел подключилось ли устройство (конвертер). Получил такие данные «cp210x converter now attached to ttyUSB0». То есть конвертер определился как ttyUSB0, и всё хорошо.
    2. Проверил по команде ls /dev/tty* список устройств, там есть самая последняя строчка «/dev/ttyUSB0″, тут тоже вроде всё нормально.
    3. Заменил в файле настроек коммуникатора ScadaCommSvcConfig.xml параметры порта для своей линии связи: <Param name=»PortName» value=»ttyUSB0″ />

    В итоге коммуникатор выдаёт такую информацию:
    Type: Serial
    Serial port: ttyUSB0 (closed)
    А в самом логе
    2016-06-02 12:44:35 Error executing actions of Device 61 «Raspi» on communication line abort: Thread was being aborted
    2016-06-02 12:44:35 Serial port ‘ttyUSB0’ is closed
    2016-06-02 12:44:35 Stop communication line 16 «МППО Данные»
    И после перезапуска
    2016-06-02 12:45:22 Error starting communication channel: No such file or directory
    2016-06-02 12:45:22 Delay before trying again

    Понимаю, что порт закрыт, и что-то с файлом вроде, но не знаю как его открыть.
    PS: Устанавливал Webiopi ранее, но насколько я понял, этого было делать необязательно. Поэтому я в файле конфигурации закомментировал все строки DEVICES. Если Webiopi действительно не нужен для огранизации работы скады, может его просто удалить? Что думаете?

    #2219
    Mikhail
    Модератор

    Нужно прописывать порт в Коммуникаторе полностью /dev/ttyUSB0
    Для работы с USB Webiopi не нужен, скорее всего. А что со встроенным портом?

    #2224
    djbond07
    Участник

    А ларчик просто открывался! заработало! Насчёт встроенного порта, у меня пока не так много времени для экспериментов, поэтому я решил пойти по проторенной дорожке — через коммуникатор. Может на следующем проекте попробую задействовать пины GPIO.

    #2228
    Mikhail
    Модератор

    Для считывания GPIO в интернете попадались библиотеки на C#, но в этом случае нужно драйвер для Rapid SCADA делать.
    Вообще, я предпочитаю использовать Ethernet, чем Serial Port.

    #2233
    djbond07
    Участник

    А почему именно Ethernet? В чём ключевое преимущество?

    #2234
    Mikhail
    Модератор

    Удобно. Можно подключиться с RPi для работы, с ПК для настройки устройства.
    Не нужно думать о драйверах.

    #2236
    djbond07
    Участник

    То есть просто нужен конвертер Ethernet-Rs-485?

    #2244
    Mikhail
    Модератор

    Лучше всего устройства со встроенным Ethernet. Конвертер тоже подойдёт, но это дополнительное удорожание системы.

    #2419
    Vyacheslav
    Участник

    Подскажите каким образом назначить произвольные номера каналов при использовании драйвера Modbus? По умолчанию номера каналов не назначаются. Судя по коду этого КП единственное чего можно добиться это последовательное автоматическое назначение каналов при настройке адресов регистров. Так ли это? Нужно ли вносить изменения в код самостоятельно для настройки произвольных номеров каналов или этого возможно указать опционально в пределах темплейта?
    Пример лога опроса КП

    КП 57 «Arduino»
    —————
    DLL : KpModbus
    Состояние : норма
    Сеанс связи : 26.06.2016 22:27:07
    Команда ТУ : время неопределено

    Сеансы связи (всего / ошибок) : 40 / 0
    Команды ТУ (всего / ошибок) : 0 / 0
    Запросы (всего / ошибок) : 80 / 0

    Текущие данные тегов КП
    +———+—————+———-+——-+
    | Сигнал | Наименование | Значение | Канал |
    +———+—————+———-+——-+
    | ******** gr1 *************************** |
    +———+—————+———-+——-+
    | 1 | t1 | 333 | |
    +———+—————+———-+——-+
    | 2 | t2 | 19 | |
    +———+—————+———-+——-+
    | 3 | t3 | 146 | |
    +———+—————+———-+——-+
    | 4 | t4 | 1198 | |
    +———+—————+———-+——-+
    | 5 | t5 | 86 | |
    +———+—————+———-+——-+
    | ******** gr2 *************************** |
    +———+—————+———-+——-+
    | 6 | t10 | 0 | |
    +———+—————+———-+——-+
    | 7 | t11 | 0 | |
    +———+—————+———-+——-+
    | 8 | t12 | 0 | |
    +———+—————+———-+——-+
    | 9 | t13 | 0 | |
    +———+—————+———-+——-+
    | 10 | t14 | 0 | |
    +———+—————+———-+——-+
    | 11 | t15 | 0 | |
    +———+—————+———-+——-+
    | 12 | t16 | 0 | |
    +———+—————+———-+——-+
    | 13 | t17 | 0 | |
    +———+—————+———-+——-+

    Архивные данные отсутствуют

    События отсутствуют

    Пример темплейта

    <?xml version=»1.0″ encoding=»utf-8″?>
    <DevTemplate>
    <ElemGroups>
    <ElemGroup name=»gr1″ tableType=»InputRegisters» address=»8″>
    <Elem name=»t1″ type=»ushort» byteOrder=»» />
    <Elem name=»t2″ type=»ushort» byteOrder=»» />
    <Elem name=»t3″ type=»ushort» byteOrder=»» />
    <Elem name=»t4″ type=»ushort» byteOrder=»» />
    <Elem name=»t5″ type=»ushort» byteOrder=»» />
    </ElemGroup>
    <ElemGroup name=»gr2″ tableType=»DiscreteInputs» address=»0″>
    <Elem name=»t10″ />
    <Elem name=»t11″ />
    <Elem name=»t12″ />
    <Elem name=»t13″ />
    <Elem name=»t14″ />
    <Elem name=»t15″ />
    <Elem name=»t16″ />
    <Elem name=»t17″ />
    </ElemGroup>
    </ElemGroups>
    <Cmds />
    </DevTemplate>

    #2420
    Mikhail
    Модератор

    Vyacheslav, заведите, пожалуйста, отдельную тему, т.к. этот подфорум для вопросов по Raspberry.

    #2433
    Vyacheslav
    Участник

    Ну я для raspberry pi и тестирую. Собираю все из ваших исходных кодов. Сервер старой версии и коммуникатор крутился на распбери больше месяца. Использовался только текущий срез. Все архивные срезы были отключены. В коммуникаторе использовал тестовый видоизмененный от вашего по умолчанию КП без опроса ком порта. Сгенерировал 500 тегов наполняемых рандом значениями. У меня распбери версии Б 512 мб. Нагрузка с включенными сервером и коммуникатором составляла от 65 до 80 процентов.
    О сборке сервера и коммуникатора могу выложить информацию в отдельную тему, если нужно, консолидирую в ней некоторые нюансы. Поскольку по умолчанию собранный проект сервера работать не будет.

    На текущий момент я собрал последнюю версию сервера и коммуникатора, запустил все на распбери. В качестве внешнего контроллера использую Ардуину. Схема включения у меня RaspberryPI—USB->RS-485=========Модуль на базе MAX485—Arduino.
    Для тестирования MODBUS использую следующую библиотеку https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino
    Реализацию таблиц там оставили на усмотрение пользователя и представлена в виде единого массива, диапазоны адресов которого можно выбирать произвольно.

    В своем эксперименте я пока дошел до получения данных коммуникатором (аналоги и дискреты). В качестве дискрета прицепил кнопку емкостную.

    Дошел до нюанса описанного в моем предыдущем сообщении. В код КПМодбас пока досконально не лазил, но если вы точно скажите что опционально номер канала задать нельзя, то буду смотреть код на предмет его адаптации.

    Данную ветку выбрал исходя из соответствия появившегося вопроса. Могу в этой ветке создать еще одну тему по Modbus. Или все таки перенести вопрос в глобальную ветку?

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Для ответа в этой теме необходимо авторизоваться.