PDA

Просмотр полной версии : ПЛК100.ТЛ. Передача данных от Modbus-устройства на сенсорную панель СП310 по Modbus



Данила Мастер
12.07.2017, 09:17
Здравствуйте!

Использую Телемеханику ЛАЙТ для программирования ПЛК100.ТЛ.
Есть некое устройство, с которого получаются данные на ПЛК по протоколу Modbus RTU. Далее эти данные (измерения) нужно передать по Modbus RTU на сенсорную панель СП310. Так же с сенсорной панели нужно передавать значения заданных на панели уставок, а так же команды управления в аналоговом виде (1 и 0) обратно в первое устройство. Подскажите, пожалуйста, какой механизм мне лучше использовать? Какие функциональные блоки? Скрипты?

Пока подсказали использовать СП310 как Modbus-slave устройство, однако я пока не понял каким образом осуществить, так сказать, миграцию данных с одного устройства на другое посредством ПЛК в enLogiс.

Сергей Сисейкин
12.07.2017, 09:35
Добрый день, Общий алгоритм выглядит примерно следующим образом:
1) Для начала нужно определиться с количеством и типом параметров, которые вы будете передавать на СП310 (аналоговые, дискретные..)
2) Для СП310 нужно написать IO файл в котором будут указаны типы данных, адреса Modbus и тд ваших переменных. (инструкции по написанию подобных файлов можно найти в справочной системе Телемеханики ЛАЙТ в разделе Контроллеры\протоколы обмена\modbus master)
3) далее в модуле Контроллеры, в вашей конфигурации добавляете протокол modbus и карту переменных для СП310, далее Вам будет необходимо записать в СП310 нужные параметры посредствам использования ФБД, например чтобы записать в СП310 аналоговую величину, например напряжение фазы, которая опрашивается так же по modbus с прибора МЭ110-3М, возьмем ФБД из готовых "Суммирование и масштаб" подадим на вход фб напряжение 220В, прибавим "0" и умножим на "1" и результат запишем в нашу аналоговую переменную, которую мы передаем в СП310 32029. Для дискретных сигналов, подойдут ФБ из группы "Логические".

Данила Мастер
13.07.2017, 16:49
Благодарю за помощь!

Добрался до одного из следующих этапов. Встал вопрос об использовании скрипта для задания нескольким переменным одинаковых значений. Данные (уставки) получаю с сенсорной панели по Модбасу (в будущем, буду их получать и по МЭК-104). Эти данные нужно переслать в три устройства так же по Модбасу. Можно, конечно, использовать ФБ, но как-то громоздко получается..

Яшина Татьяна
13.07.2017, 17:19
На выход одного блока можно подавать несколько ( сколько угодно) переменных.

Но можно оптимизировать этот процесс с использованием скриптового блока используя стандартные функции скрипта. Для этого нужно в функциональных блоках выбрать блок скрипт, добавить его на рабочую область, выделить его и перейти на вкладку "скрипт". Там добавить входы- выходы скриптового блока.в соответствии с вашими переменными32058 .

Далее нажимаете на кнопку "Редактировать скрипт" - и в появившемся окне можно реализовать свою логику. Реализация блока Move - копирующего входное значение на выход, осуществляется на выбранном языке - си или паскаль. Для этой задачи нужно просто объявить переменную, в которой будет хранится значение внутри скрипта, и использовать стандартные функции ( можно перенести функцию из вкладки справа на рабочую область). Описание функций есть в справочной системе 32059 .

В аргументах функций чтения и записи указывается вход или выход. из которого будет прочитано (записано) значение. Чтобы не ошибиться с названием - переключаемся на вкладку "Отладка" и переносим нужный вход-выход в аргумент функции ( внутрь скобок). после запятой указывается значение которое будет записано (или переменная в которую будет считано значение) 32062 .
В скрипте обязательно нажать на кнопку "запуск" чтобы скомпилировать код.


var in1 : Integer;
{---------- main program -----------}
begin
ReadInteger('Вход', in1);
WriteInteger('Выход 1', in1);
WriteInteger('Выход 2', in1);
WriteInteger('Выход 3', in1);

end.

Сиигналы привязываются так же как и к любому другому ФБ - "drag'n'drop"-ом переносим сигналы на вх/выход 32065

Данила Мастер
21.07.2017, 14:32
Здравствуйте!
Благодарю за помощь!
Следующий вопрос. Даже два:
1) Если ПЛК находиться в работе, а СП временно отключали, то при запуске СП на его экране (отображающем аналоговые величины) не отображаются правильно величины, которые не изменяются на устройствах, которые опрашиваются ПЛК. Как быть? Каким образом посоветуете давать команду на опрос всех аналоговых величин с устройств подключенных к ПЛК по Modbus при включении/перезагрузке СП?
2) Можно ли на один из экранов СП вывести аналоговые сигналы диагностики линий связи (внутренние регистры СП PSW60-63, PSW70-73)? У меня с наскока не получилось, остался вариант получать данные с этих регистров на ПЛК и передавать их обратно на СП. Может я делаю что-то не так и есть более прямой путь?

Засим прощаюсь и заранее Благодарю за скорый ответ.

Данила Мастер
21.07.2017, 14:52
Пояснения:
1) После рестарта панели данные в неё передаются, но только те, которые обновляются. А есть данные, которые обновляются редко и такие данные на панель не передаются, соответственно на панели отображаются неверные данные;
2) Представьте. Есть РПН. С него получаем данные: токи,напряжения, положение РПН. Положение РПН меняется редко. Допустим в какой-то момент это положение равно 12-ти. Если связь пропала с устройством, то при реальном изменении положения РПН на панели будет всё равно отображаться 12. Если перезапустим СП, то на СП будет отображаться значение 0, что также не верно...

И ещё. Если связь с устройствами пропадает, то на панели отображаются недостоверные данные - либо нули, либо те данные, которые были получены когда связь ещё присутствовала...

Данила Мастер
21.07.2017, 14:53
Кстати, как посоветуете быть с недостоверными данными? Связь пропала, данные не обновляются, не верные данные отображать нельзя, либо нужно дать понять, что эти данные недостоверны..

Яшина Татьяна
21.07.2017, 16:03
1) Если ПЛК находиться в работе, а СП временно отключали, то при запуске СП на его экране (отображающем аналоговые величины) не отображаются правильно величины, которые не изменяются на устройствах, которые опрашиваются ПЛК. Как быть? Каким образом посоветуете давать команду на опрос всех аналоговых величин с устройств подключенных к ПЛК по Modbus при включении/перезагрузке СП?



Пояснения:
1) После рестарта панели данные в неё передаются, но только те, которые обновляются. А есть данные, которые обновляются редко и такие данные на панель не передаются, соответственно на панели отображаются неверные данные;
2) Представьте. Есть РПН. С него получаем данные: токи,напряжения, положение РПН. Положение РПН меняется редко. Допустим в какой-то момент это положение равно 12-ти. Если связь пропала с устройством, то при реальном изменении положения РПН на панели будет всё равно отображаться 12. Если перезапустим СП, то на СП будет отображаться значение 0, что также не верно...

И ещё. Если связь с устройствами пропадает, то на панели отображаются недостоверные данные - либо нули, либо те данные, которые были получены когда связь ещё присутствовала...

Если пропала связь с устройством, параметры с которых передаются на панель,то на панель сохраняется последнее значение с устройства.
После рестарта там ничего нет, потому что если связи с устройством нет по прежнему, ПЛК нечего записать в СП,и он ничего и не пишет, а из-за переброса питания переменные с панели сбрасываются

Если панель теряется,а др.устройства на связи,то при возврате СП в нее подтянутся из ПЛК актуальные параметры.


Кстати, как посоветуете быть с недостоверными данными? Связь пропала, данные не обновляются, не верные данные отображать нельзя, либо нужно дать понять, что эти данные недостоверны..

Можно в блоке где вы копируете переменные добавить анализ связи, и по флагу -false ( по отсутствию) писать на выходы недостовреное значение, такое которое не достигается никогда (999999 например), а на панели будет видно отсутствие связи по этому коду (например 999999).

Яшина Татьяна
21.07.2017, 16:08
2) Можно ли на один из экранов СП вывести аналоговые сигналы диагностики линий связи (внутренние регистры СП PSW60-63, PSW70-73)? У меня с наскока не получилось, остался вариант получать данные с этих регистров на ПЛК и передавать их обратно на СП. Может я делаю что-то не так и есть более прямой путь?



В режиме slave СП не будет анализировать состояние линий связи,и эти регистры никакой информации не несут. Если нужно отображать на панели наличие связи с др.устройствами, то можно передавать состояние подключения,и так же использовать для анализа например ФБ блок Serial Task Info группы Специальные.

Если хотите контролировать связь с мастером, то нужно в создать какую нибудь переменную в СП, которую мастер будет устанавливать в 1, а СП - в 0. Когда не будет связи с мастером, переменная всегда будет в 0.

Данила Мастер
02.10.2017, 13:04
Здравствуйте!
Не стал поднимать новую тему, т.к., в некотором роде, тема та же, слегка видоизменились проблемы..
Итак. Существует работающий проект для связки ПЛК100.ТЛ-СП310-устройства Modbus. Загружаю данный проект в другой ПЛК100.ТЛ и... связи с остальными устройствами нет. В СП310 залит тот же проект с теми же настройками связи. Кабель между ПЛК100 и СП310 прозвонил заново. Связь с Modbus-устройствами по RS485 присутствует, соединился с ними прям от клемм RS485 ПЛК. Настройки связи, чётности, стоповые биты - всё то же, что и раньше. Адреса идентичны предыдущему проекту.
Теряюсь в догадках - как поступить!? Ощущение, что не работает связь с последовательными устройствами.

Данила Мастер
02.10.2017, 13:48
Разобрались, похоже!
Слетела регистрация EnLogic - вот никакие связи и не работали...

Сергей Сисейкин
02.10.2017, 13:49
Здравствуйте!
Не стал поднимать новую тему, т.к., в некотором роде, тема та же, слегка видоизменились проблемы..
Итак. Существует работающий проект для связки ПЛК100.ТЛ-СП310-устройства Modbus. Загружаю данный проект в другой ПЛК100.ТЛ и... связи с остальными устройствами нет. В СП310 залит тот же проект с теми же настройками связи. Кабель между ПЛК100 и СП310 прозвонил заново. Связь с Modbus-устройствами по RS485 присутствует, соединился с ними прям от клемм RS485 ПЛК. Настройки связи, чётности, стоповые биты - всё то же, что и раньше. Адреса идентичны предыдущему проекту.
Теряюсь в догадках - как поступить!? Ощущение, что не работает связь с последовательными устройствами.

Здравствуйте!
как выяснилось, контроллер перешивался заводской прошивкой, в следствие чего слетела регистрация исполнительной системы и работал только один протокол из конфигурации. Потребовалось выполнить повторную регистрацию исполнительной системы.

Сема
16.03.2018, 20:37
Добрый день, подскажите ещё момент такой А если допустим использовать вот такую связку СПК207 + ПЛК100.ТЛ + Счётчик Меркурий234.

С помощью ПЛК100.ТЛ опросить счётчик по УСПД, снять показания потреблённой электроэнергии и передать по Modbus на СПК207 ?

Можно ли так сделать? Будет вообще архивация работать на ПЛК100.ТЛ?

Popov Boris
19.03.2018, 07:31
Да так можно сделать, методика кардинально от описанной выше в этой ветке отличаться не будет, а вот архив на ПЛК100-ТЛ писать не стоит, никакого внешнего носителя у ПЛК нет, а внутренней памяти для архивирования недостаточно. "Оживить" ПЛК после такого эксперимента можно будет только через наш сервисный центр.

Сема
19.03.2018, 10:20
СПК207 должен быть в режиме мастера или слэйва, или без разницы как?

Не могу сообразить, если у меня по RS-485 будет работать УСПД, то с СПК207 по Ethrnet я соединяюсь? А есть ещё какие-нибудь способы?

Popov Boris
19.03.2018, 17:17
В принципе без разницы кто мастер, кто слейв. Я бы ПЛК мастером сделал. Для связи между 100ТЛ и СПК207 можно задействовать RS-232, можно даже на один RS-485 c Меркурием подключить в ущерб скорости.

tradtex
21.11.2019, 12:17
Добрый день.

Подскажите, пожалуйста, проблема в следующем. Имеется связка для управления технологическим процессом: контроллер ПЛК 110-30 ТЛ, панель оператора СП307, среда Телемеханика Лайт. Есть необходимость задавать с панели оператора переменные в контроллер и отображать данные с датчиков процесса на панель, числа как целые, так и с запятой. Подключаю СП307 к ПЛК по ModbusXLS, чтение и запись целых чисел в контроллере и отображение на панели работает как надо, но если меняю тип данных на float в exel файле и в настройках цифрового дисплея конфигуратора СП300, то происходит следующее: с панели оператора я могу ввести численное значение с запятой, оно читается контроллером правильно, т.е. с запятой, но при обратном процессе, т.е. при попытке с контроллера отправить число с запятой на СП307 на цифровом дисплее ничего не получаю. Вопрос: что-то неправильно делаю или это невозможно?

Яшина Татьяна
21.11.2019, 15:02
Скорее всего нарушается порядок байт, если читаете ПЛК из панели типом данных mb_FLOAT32, попробуйте на запись тип mb_F32 - тот же флоат только с другим порядком байт.

tradtex
21.11.2019, 15:25
mb_FLOAT32 не работает ни на запись ни на чтение, использую mb_F32, ещё вопрос, какая правильная функция Modbus в данном случае 10 или 6? Я так понимаю число с запятой передается двумя регистрами?

Яшина Татьяна
21.11.2019, 15:50
Для вещественных нужно использовать 10 функцию -запись в несколько регистров, т.к. флоат занимает 2 регистра.

tradtex
21.11.2019, 15:55
Спасибо, но все равно не отстану, пока не передам на панель число с запятой. Как можно сделать панель СП307 мастером в режиме подключения TCP?

tradtex
22.11.2019, 11:11
Доброго всем дня.
Прошу помощи, что тут не так?
Вот настройки Modbus 45754
Вот переменная входа 45755
Выхода 45756
Это настройки в СП307, использую цифровой ввод и цифровой дисплей 45757457584575945760
Такой файл IO генерируется 45761
Вводим с панели СП307 число 22,2, контроллер его читает, выполняем ФБ умножение введенной переменной на 2, получаем выходную переменную 44,4 45762
Пытаемся число 44,4 передать на СП307, но получаем вот такую картинку 45763
Где мог ошибиться?

Яшина Татьяна
25.11.2019, 13:03
Попробуйте в настройках Modbus Slave в панели ( она же slave у вас?) установить галочку "Переставить Word в float". 45799

tradtex
27.11.2019, 10:33
Татьяна, спасибо, большое, за ответы. Разобрался. Выдержка из руководства пользователя EnLogik: В ИС EnLogic поддержаны три функции Modbus TCP slave: 0x03 - Read Holding Registers, 0x04 - Read Input Registers, 0x06 - Write Single Register. Т.е. запись по Modbus TCP значений с запятой невозможна, т.к. поддерживается запись только одного регистра, функция 16 (0*10) не поддерживается в вашем случае, жаль. Меня смутило, то что в файле mb-example приведены расширенные функции протокола, которые по факту не поддерживаются в ИС EnLogic, ну и то, что обычные Ваши ПЛК, без приставки ТЛ, запросто справляются с этой задачей.

RollForRepair
13.02.2022, 16:27
У меня отчасти схожий вопрос: у меня есть панель СП307 и ПЛК110-ТЛ. Если теряется связь по Modbus с СП307, то при восстановлении связи я бы хотел записывать все переменные на панель заново. Сгодится для этого запись единицы в переменную 'ПринудЗапись' в группе переменных 'Служебные'? К сожалению я временно без контроллера, хотелось бы понять является ли это правильным решением.

Макарова Мария
18.03.2022, 11:16
Для принудительной записи данных по Modbus в панель после потери связи при ее восстановлении можно отслеживать передний фронт переменной "Служебные.Связь", и по нему записывать "1" в переменную "Служебные.ПринудЗапись".

RollForRepair
31.01.2023, 17:42
Ещё вопрос по теме. Сделал сеть, где контроллер одновременно мастер для СП307 и одновременно мастер в другой сети с модулями ввода/вывода.
Возникла проблема: связь с панелью оператора СП307 нестабильна и спонтанно прерывается-восстанавливается. Провод от ПЛК до панели оператора довольно короткий, так что вряд ли это наводки. С топологией тоже накосячить нельзя, т.к. в этой сети один Slave и Master :)

1). Насколько я понимаю, топология сети Modbus на другом порту (даже если она некорректно проведена) не должна влиять на работу сети ПЛК и панели оператора?
2). Не могли бы вы порекомендовать, какие значения лучше выставлять для Таймаута, Периода, Множителя таймаута в Телемеханике? Насколько я понимаю они не обязательно должны соответствовать параметрам сети на другом порту.
3). В обучающих материалах есть обучающее видео как делать связь по Modbus между ПЛК и панелью оператора, где ПЛК является мастером. А улучшилось бы качество связи, если панель оператора была бы master, а ПЛК slave? Если да, то как это корректно делать в телемеханике?