PDA

Просмотр полной версии : ПЛК160-24.А-М + 5 модулей ввода/вывода



des_na_laes@mail.ru
12.11.2020, 12:11
Коллеги, добрый день!
Прошу совета новичку по конфигурации ПЛК160-24.А-М + 5 модулей ввода/вывода : МВ110-220.АС+МВ110-16ДН+МВ110-224.А+МВ110-224.8А+МУ110-224.16Р.
Подключил по rs-485. Сконфигурировал, хоть это было не просто, как у Гайнутдинова в обучающем ролике.
Теперь сижу и смотрю на это в шоке:
- Сигналы аналоговые и дискретные, обрабатываемые контроллером сразу же прилетают в панель оператора СП315 и соответственно отображаются в Codesys, а сигналы с модулей ввода/вывода в контроллере и соответственно в панели СП315 примерно через от 5 секунд до минуты :eek::eek::eek::confused::confused::confused:

Вопрос: Как быть, может я сконфигурировал в codesys криво? Или может это норма? Или может я провода не те подключил по RS485(обычные алюминиевые, сечением 0,25-0,5мм)? Или матчасть я плохо изучал по скорости обмена информации?

Прошу помощи в указании направления, проект в codesys прилагаю.

krollcbas
12.11.2020, 12:55
Люди мастера находить проблемы.
Должна быть медь!!! Проложить хотя бы FTP/UTP
+ там еще очень много ньюансов, требующих опыта.

des_na_laes@mail.ru
12.11.2020, 15:30
Люди мастера находить проблемы.
Должна быть медь!!! Проложить хотя бы FTP/UTP
+ там еще очень много ньюансов, требующих опыта.

Проложил UTP, пока результата нет расстояние 70 см от ПЛК до крайнего модуля ввода.

des_na_laes@mail.ru
12.11.2020, 15:36
Да. Нет. Пох. Да.


Таймауты всем - 30..50. Дефолтные 150 - проблемы с логикой у автора прошивки
8AC - стрингами (1 или 2 - не копался)
8A - стрингами (2 штуки видимо), пол тайм от 2..3 сек
16Д - биты в опу. Только маска
16Р - биты туда же. Только маска. На месте t.out ? если 0, то bychange, если 3..6 - both, поллинг 1-2секунды
что 5-ое - не понял, но что-то из выше перечисленного.

И да. Всем модулям rs.dL = 0. Всегда 0.


PS
Move в таком виде - в опу. (в макросе). Прямое соединение.
Но это не про обмен.

Move в таком виде - в опу. (в макросе). Прямое соединение. - устранил, разницы нет.
И да. Всем модулям rs.dL = 0. Всегда 0. - было 2, устранил, разницы нет.
Таймауты всем - 30..50. Дефолтные 150 - проблемы с логикой у автора прошивки - всем влупил 30.

8AC - стрингами (1 или 2 - не копался) - мозгов хватило только на установку string input module. А сигнала то нет, ковычки в онлайне codesys. Как с ними дальше работать?
8A - стрингами (2 штуки видимо), пол тайм от 2..3 сек- мозгов хватило только на установку string input module. А сигнала то нет, ковычки в онлайне codesys. Как с ними дальше работать? пол тайм от 2..3 сек - поставил 2000 в pool time графе.
16Д - биты в опу. Только маска - маска это - ? не нашел ответ
16Р - биты туда же. Только маска. На месте t.out ? если 0, то bychange, если 3..6 - both, поллинг 1-2секунды - маска это - ? не нашел ответ

krollcbas
13.11.2020, 01:29
Читаю опять ваш диалог. Анекдот какой-то выходит, а суть наверное на поверхности.
1. Попробовать проверить по отдельности каждый модуль при помощи конвертера USB-RS485 и программы Modbus Pool или подобной.
2. Если все модули по отдельности отвечают, то подключать по одному в шину ПЛК, анализируя что происходит. Один модуль заработал, цепляем следующий.
Иногда приходилось разносить адреса 10,20,30,40 - чтоб работало...необъяснимо все это.
3. Попробовать шину подключить не к ПЛК, а к конвертеру. Запустить ОПС попробовать опросить все эти модули.

Рано или поздно, если таким вполне логичным способом делить проблемы пополам - можно докопаться до ошибки.

Про тип материала провода: мы все опираемся на свой опыт и в моей практике было, что заменив сталистую витую пару на медь - начало работать.

des_na_laes@mail.ru
13.11.2020, 12:15
Читаю опять ваш диалог. Анекдот какой-то выходит, а суть наверное на поверхности.
1. Попробовать проверить по отдельности каждый модуль при помощи конвертера USB-RS485 и программы Modbus Pool или подобной.
2. Если все модули по отдельности отвечают, то подключать по одному в шину ПЛК, анализируя что происходит. Один модуль заработал, цепляем следующий.
Иногда приходилось разносить адреса 10,20,30,40 - чтоб работало...необъяснимо все это.
3. Попробовать шину подключить не к ПЛК, а к конвертеру. Запустить ОПС попробовать опросить все эти модули.

Рано или поздно, если таким вполне логичным способом делить проблемы пополам - можно докопаться до ошибки.

Про тип материала провода: мы все опираемся на свой опыт и в моей практике было, что заменив сталистую витую пару на медь - начало работать.

Я как раз этим сейчас занимаюсь параллельно с тем, что изучаю методы приема-передачи информации от модулей к контроллеру.
Шаг за шагом приближаюсь к цели:

- разобрался как работать с маской. Входы и выходы теперь летают через неё. Но при этом с совершенно с дикой задержкой. От 0,1 до 9 секунд.

А вот Стринги не могу победить. Прошу помочь разобраться, как через стринги выводить показания на экран(Может есть пример проекта с настроенными стрингами?), надеюсь после этой настройки скорость передачи информации нормализуется.
Прилагаю проект, над которым тружусь+ настройки модулей.

Cs-Cs
13.11.2020, 22:53
Мне стало интересно и я глянул.
1. Я тоже не понял, почему Мастер и Слейв на одном интерфейсе и как это должно работать.
2. А что это за чтение STRING из модулей IO? Тут же модули ввода-вывода ОБЫЧНЫЕ (я сам такие вовсю использую).
Откуда в них STRING взялся-то?!!!
Вот оно и тормозит как чёрти что, потому что ПЛК читает слишком много из модулей.
3. Polling Time на модули IO стоит 2000 ms. Это ДВЕ СЕКУНДЫ. Модулей 5 штук, так? Вот получается, что один модуль будет опрашиваться раз в 2 сек ъ 5 штук = ДЕСЯТЬ СЕКУНД. В худшем случае.

Шо это за бредятина вообще?
МВ110-16ДН = надо читать ОДИН РЕГИСТР (Register input Module) с адресом 51.
МУ110-224.16Р = надо писать ОДИН регистр (Register output Module) с адресом 50.
МВ110-224.8А = или надо читать FLOAT, или читать регистры значения и десятичной точки и статуса канала измерения.

И ещё хорошо бы делать в коде комментарии и понятные имена.
Вот посмотри на мой проект. Там как раз все такие модули как у тебя. Этот проект ЛЕТАЕТ!!
Я вырезал отуда всё лишнее, и оставил только образцы того, что надо:
* Конфигурация ПЛК - посмотри, как там IO вбито
* Конфигурация Задач - посмотри, там созданы задачи и им заданы нужные времена исполнения. У тебя же задач нет, и PLC_PRG работает по умолчанию хер знает с какой скоростью.
* Списки переменных. Их можно создавать несколько, и это удобно для проекта: можно разнести настройки, константы и RETAIN по спискам, чтобы было понятно.
* Имена переменных и объектов. Мои читабельнее твоих. Потому имеют структуру "Префикс" + "Общее назначение" + "Название", типа Btn_KuhnaLED или Sys_TestOuts.
* POU TaskMain, где те самые входные переменные с модулей IO разбираются по значениям и присваиваются красивым внутренним переменным.
Вот: 51992

Cs-Cs
14.11.2020, 07:56
Валенок Да, я не совсем в курсе стрингов. 8А в проектах у меня работают вовсю так, как я написал, и сбоев не было.
Насчёт стрингов просьба детально пояснить то, сколько времени на шине тратится на обмен с ними. В смысле, что больше загрузит шину: чтение десятка мелких регистров или чтение одного длинного STRING.
То, что STRING используется как массив байтов, я догадался. Но всё равно задался вопросом о том, нафига из модулей читать ВСЁ, если это ВСЁ не нужно, а место в виде байт и времени, которое на их передачу тратится, - занимает. И вот это для меня и непонятно. Образно, нафига покупать камаз еды, если столько не съешь?
Всё это на логическом анализаторе хорошо видать. И как запросы по шине идут, и какие в каком порядке. Мощная штука.

Что касается анонизма про модули 8Ах - то слухи о нём сильно преувеличены. В инструкции написано, что опрос одного канала занимает от 0,6 до 0,9 секунды. На опрос по Modbus самого модуля это никак не влияет, и я могу читать модуль хоть каждые 20 ms.
В своих проектах я увеличиваю время опроса модуля из-за того, что у этих модулей данных передаётся больше, чем у дискретных, и мне хочется оставить планировщику CodeSys возможность отдать больше времени на опрос дискретных модулей, чем аналоговых.
То есть, это такая тупенькая перестраховочка. На работу модуля или его нагрузку она не влияет.

Касательно планировщика. Валенок, а ты не видел, какой ужасный планировщик в CodeSys v3? Может я не в ту телегу, но вот там-то как раз все 2000 ms растянутся в 2000 ms х количество устройств х количество регистров. И стринги там всё попортят.
Я вчера вон тыкал логическим анализатором в проект как раз и на это всё глядел.
В CodeSys v2 планировщик повеселее, но жестить с длинными запросами там тоже нежелательно.

des_na_laes@mail.ru
17.11.2020, 09:08
Мне стало интересно и я глянул.
1. Я тоже не понял, почему Мастер и Слейв на одном интерфейсе и как это должно работать.
2. А что это за чтение STRING из модулей IO? Тут же модули ввода-вывода ОБЫЧНЫЕ (я сам такие вовсю использую).
Откуда в них STRING взялся-то?!!!
Вот оно и тормозит как чёрти что, потому что ПЛК читает слишком много из модулей.
3. Polling Time на модули IO стоит 2000 ms. Это ДВЕ СЕКУНДЫ. Модулей 5 штук, так? Вот получается, что один модуль будет опрашиваться раз в 2 сек ъ 5 штук = ДЕСЯТЬ СЕКУНД. В худшем случае.

Шо это за бредятина вообще?
МВ110-16ДН = надо читать ОДИН РЕГИСТР (Register input Module) с адресом 51.
МУ110-224.16Р = надо писать ОДИН регистр (Register output Module) с адресом 50.
МВ110-224.8А = или надо читать FLOAT, или читать регистры значения и десятичной точки и статуса канала измерения.

И ещё хорошо бы делать в коде комментарии и понятные имена.
Вот посмотри на мой проект. Там как раз все такие модули как у тебя. Этот проект ЛЕТАЕТ!!
Я вырезал отуда всё лишнее, и оставил только образцы того, что надо:
* Конфигурация ПЛК - посмотри, как там IO вбито
* Конфигурация Задач - посмотри, там созданы задачи и им заданы нужные времена исполнения. У тебя же задач нет, и PLC_PRG работает по умолчанию хер знает с какой скоростью.
* Списки переменных. Их можно создавать несколько, и это удобно для проекта: можно разнести настройки, константы и RETAIN по спискам, чтобы было понятно.
* Имена переменных и объектов. Мои читабельнее твоих. Потому имеют структуру "Префикс" + "Общее назначение" + "Название", типа Btn_KuhnaLED или Sys_TestOuts.
* POU TaskMain, где те самые входные переменные с модулей IO разбираются по значениям и присваиваются красивым внутренним переменным.
Вот: 51992

Всем спасибо за ответы. Соль как раз здесь:
- "Как думает ТС, мастер и слейв на одном интерфейсе - норм ?"
- "1. Я тоже не понял, почему Мастер и Слейв на одном интерфейсе и как это должно работать."

На данный момент вся информация обновляется сразу, с модулей 8АС, 16Р и 16ДН. А вот с модулями 8А - картина стала от 3(для 3-х термометров сопротивления) до 8(для 8-ми термопар) секунд. С вложенным примером буду долго и упорно продолжать разбираться, думаю после понимания логики построения и модули 8А встанут на место.

Cs-Cs
17.11.2020, 11:47
Ежели речь идёт про мой пример, то там основное, в чём разбираться - это, блин, хороший стиль именования и комментирования всего и вся и всех.
А про обновление показаний... Хм! Это про что речь? Если про то, что ты датчик греешь зажигалкой (образно), а изменение его температур видишь через 8 секунд - то НЕ ЗАБУДЬ, что в инструкции на модуль .8А написано, что он внутри себя один вход обновляет за 0,6-0,9 секунды. И если у тебя задействованы все 8 входов, то обновляться они будут через 8 входов х 0,9 секунды = 7,2 секунды каждый. Это нормально для такого модуля IO.
У себя в одном из проектов на СПК107 я даже делал задержку при старте проекта на опрос этих модулей для того, чтобы дать им времени в 15-20 секунд на первый опрос всех датчиков и уже потом смотреть, что там модули навозвращали по ним.

des_na_laes@mail.ru
17.11.2020, 12:10
Ежели речь идёт про мой пример, то там основное, в чём разбираться - это, блин, хороший стиль именования и комментирования всего и вся и всех.
А про обновление показаний... Хм! Это про что речь? Если про то, что ты датчик греешь зажигалкой (образно), а изменение его температур видишь через 8 секунд - то НЕ ЗАБУДЬ, что в инструкции на модуль .8А написано, что он внутри себя один вход обновляет за 0,6-0,9 секунды. И если у тебя задействованы все 8 входов, то обновляться они будут через 8 входов х 0,9 секунды = 7,2 секунды каждый. Это нормально для такого модуля IO.
У себя в одном из проектов на СПК107 я даже делал задержку при старте проекта на опрос этих модулей для того, чтобы дать им времени в 15-20 секунд на первый опрос всех датчиков и уже потом смотреть, что там модули навозвращали по ним.

Да, речь про твой пример. А по модулям было решено их заменить в проекте на 8АС+нормирующие преобразователи. Слишком долго не пойдет на дизельный движок. Я так понимаю, что 8А пойдут на вентиляцию и не более.

Cs-Cs
17.11.2020, 12:23
Угу! Эти, обычные .8А - долгие. У меня проекты простые - прмерить уличную температуру или температуру воды в трубе стояка квартиры или температуру тёплого пола. Там на эту медленность наплевать и 10 секунд роли не сыграют, ага.

des_na_laes@mail.ru
07.12.2020, 12:06
Коллеги, добрый день!

В продолжении этой же темы возникла еще проблема, только теперь со скоростью опроса из панели СП315. С модулями в принципе пока всё - ОК.

ПЛК осуществляет опрос 50-ти "8-bit input module" кнопок на панели, а также 46-ти чисел в "real input module". Задержка от нажатия на панели СП315 до срабатывания бита в контроллере до 3-6 секунд.

Вопрос:
Как ускорить?
или
Быстрее ли будет работать, если "8-bit input module" заменить на "register input module" и может-быть "real input module" можно заменить(число нужно с плавающей точкой)? И можно ли их заменять?
или
Это норма при таком количестве опрашиваемых регистров?

Проект прилагаю. Там universal modbaus device так и назван (*Опрос регистров из СП315"*)

petera
07.12.2020, 12:46
Коллеги, добрый день!

В продолжении этой же темы возникла еще проблема, только теперь со скоростью опроса из панели СП315. С модулями в принципе пока всё - ОК.

ПЛК осуществляет опрос 50-ти "8-bit input module" кнопок на панели, а также 46-ти чисел в "real input module". Задержка от нажатия на панели СП315 до срабатывания бита в контроллере до 3-6 секунд.

Вопрос:
Как ускорить?
или
Быстрее ли будет работать, если "8-bit input module" заменить на "register input module" и может-быть "real input module" можно заменить(число нужно с плавающей точкой)? И можно ли их заменять?
или
Это норма при таком количестве опрашиваемых регистров?

Проект прилагаю. Там universal modbaus device так и назван (*Опрос регистров из СП315"*)

используем в конфигурации модули String для организации групповых запросов к панели и к модулям
https://owen.ru/forum/showthread.php?t=22915&p=244022&viewfull=1#post244022
https://owen.ru/forum/showthread.php?t=22915&p=333593&viewfull=1#post333593

des_na_laes@mail.ru
09.12.2020, 11:25
используем в конфигурации модули String для организации групповых запросов к панели и к модулям
https://owen.ru/forum/showthread.php?t=22915&p=244022&viewfull=1#post244022
https://owen.ru/forum/showthread.php?t=22915&p=333593&viewfull=1#post333593

Понимание по этим примерам пришло частичное, проверил с плк+панель, всё работает.
Но ввиду полного отсутствия опыта работы с разными языками, типа st задался вопросом:
Как строки
"(*Читаем Real из панели. ЭТО ПРИЕР !!*)

p_maslo_11_2:= BlokReal_fromPanel[5];
kor_dav_12_7:= BlokReal_fromPanel[6];" нарисовать в языке CFC

Во вложении скрин с дублированием вопроса.

capzap
09.12.2020, 11:35
нарисовать в языке CFC.

https://ftp.owen.ru/CoDeSys23/06_Documentation/Cds23_Manual_v2.8.pdf Соединение элементов

Cs-Cs
09.12.2020, 11:40
Ну вроде как взять "Вход" и "Выход" и туда переменные запихать.
Только тут последовательность будет наоборот. "Вход" - это ОТКУДА берём, а "Выход" - КУДА записываем.
52401

petera
09.12.2020, 14:10
Понимание по этим примерам пришло частичное, проверил с плк+панель, всё работает.
Но ввиду полного отсутствия опыта работы с разными языками, типа st задался вопросом:
Как строки
"(*Читаем Real из панели. ЭТО ПРИЕР !!*)

p_maslo_11_2:= BlokReal_fromPanel[5];
kor_dav_12_7:= BlokReal_fromPanel[6];" нарисовать в языке CFC

Во вложении скрин с дублированием вопроса.

ОТВЕТ уже дали


Ну вроде как взять "Вход" и "Выход" и туда переменные запихать.
Только тут последовательность будет наоборот. "Вход" - это ОТКУДА берём, а "Выход" - КУДА записываем.
52401

des_na_laes@mail.ru
09.12.2020, 15:22
ОТВЕТ уже дали

Ощущаю себя программистом уровня HI-END. Все получилось, благодаря Вашей помощи, коллеги. Пора счета для донатов приписывать в подписях!:)

Cs-Cs
10.12.2020, 08:34
Не за что! Лучшая благодарность - чтобы всё хорошо работало! ^_^

des_na_laes@mail.ru
17.12.2020, 14:26
Коллеги, добрый день!
Прошу помощи по этому же проекту.

Пытаюсь теперь прописать Стрингами передачу от аналоговых модулей, вместо ранее работающих REAL, вроде так же делаю, как и с панелью, а на выходе - нули. Адреса регистров указываю следующие для передачи 1-го канала 4, 2-го 10, 3-го 16 и т.д. Не получается:(. В чем подвох? Во вложении скрин с программой.

des_na_laes@mail.ru
17.12.2020, 16:49
des_na_laes@mail.ru, если не сложно поясните а цель какая забирать стрингами?
В этих модулях АЦП не быстрый и он по очереди опрашивает 8 каналов.
Цель какая у такого действия?

Цель : максимально ускорить работу системы в целом. На данный момент у меня задержка на модуле дискретного вывода составляет от 0,1 до секунды примерно, в тот момент, когда управление происходит с панели оператора СП315(с кнопок быстрее отработка этих же дискретов). Связываю это как раз с нагрузкой при использования real input на модулях 8АС, т.к. постами выше коллеги четко дали понять, что "стринг" нужно использовать и на модули ввода-вывода, помимо использования их для считывания с панели оператора.

Там какой то секрет с регистрами, ответ пока не нашел.:(

des_na_laes@mail.ru
21.12.2020, 11:27
А накой с 2 строки с 8AC ?
Достаточно 1й


Програмил кто-то с фриланса или на "и так сойдет" - и весь секрет ))

Всё получилось с передачей полученных значений Стрингами(string input module) от модулей ввода 8АС. Пример(достаю сигналы из 5-ти каналов) прилагаю для таких же супер-программистов как я.

Еще раз спасибо всем за помощь!

Cs-Cs
21.12.2020, 12:20
des_na_laes@mail.ru Поздравляем! И я гляжу, там в конфигурации ПЛК появилось много подписей и комментариев!
Отлично! ^_^

des_na_laes@mail.ru
22.12.2020, 09:12
Отлично ?

5-ю стрингами (теперь, выше было 2) а не 1-им ? Ну так себе.
Причем непонятно зачем теперь-то уж стринги )))

Но главное

до НГ

1-им не получается хоть ты тресни. Сколько байт указать в параметрах модуля, или как прописать регистры для чтения в строке объявления переменных не могу разобраться, на выходе белиберда всё равно. Понятно что на один регистр 4 Amonth byte, а как записать для всего модуля, может кто подскажет?:confused:

des_na_laes@mail.ru
22.12.2020, 18:06
как вариант

Вопросы задавать глупо(не понимаю в этом варианте ничего), буду разбираться, спасибо.