Просмотр полной версии : CODESYS V3.5. Вопросы и ответы
Здравствуйте! Прога на CFC. Переменные типа REAL, преобразовываю в двойные строковые WSTRING, для дальнейшей работы в другую POU, через следующий механизм : блок OSU.REAL_TO_STRING_FORMAT далее он переходит на вход OSU.CP1251_TO_UNICODE. Вопрос а как мне BOOL так же перевести в такой же формат? Я далее их буду "склеивать" в одну стпроку, в другой POU, через WCONCAT. С переменными REAL сделал, а про дискретные забыл. Какой блок или блоки для преобразования в строковые двойные использовать для BOOL?
kondor3000
04.09.2024, 13:31
Здравствуйте! Прога на CFC. Переменные типа REAL, преобразовываю в двойные строковые WSTRING, для дальнейшей работы в другую POU, через следующий механизм : блок OSU.REAL_TO_STRING_FORMAT далее он переходит на вход OSU.CP1251_TO_UNICODE. Вопрос а как мне BOOL так же перевести в такой же формат? Я далее их буду "склеивать" в одну стпроку, в другой POU, через WCONCAT. С переменными REAL сделал, а про дискретные забыл. Какой блок или блоки для преобразования в строковые двойные использовать для BOOL?
Смотря в каком виде надо.
BOOL_TO_REAL =>>REAL_TO_STRING получите "0"
BOOL_TO_STRING получите "FALSE"
Дальше уже надо проверять.
kondor3000 Может BOOL вообще проще через SEL записать? Ну, мол: SEL(bVar, "FALSE", "TRUE")?
Здравствуйте еще раз!
Тут столкнулся с блоком "склеивания" двойных строковых. Блок WCONCAT8 до 255 символов, а у меня на выходе не могу склеить все строковые, обрезает в 2, 3, 4 блоке, что не так с 255 символами (1 блок - это проверочный, тут все значения сплошные склеивает от датчиков). 2 блок - это три первых сигнала с датчиков, 3 блок - другие три сигнала с датчиков. Далее пробую 2 и 3 блок вместе склеить, чтоб одной строкой
все было "склеено" на 4 блоке. Но тут опять на выходе не все строковые, только от одной входной переменной. Что не так, где 255 символов? И как лучше. Задача далее стоит, по Латч переменной вытянуть в Таблицу тревог все сигналы, но желательно по строчно, чтоб было читабельно. И еще вопрос, каким ф. блоком после склеивания WCONCAT8 разбить на выходе сплошную строковую (на несколько строк), чтобы можно по событию заполнить строковые в таблицу?
kondor3000
04.09.2024, 17:25
Что не так, где 255 символов? И как лучше. Задача далее стоит, по Латч переменной вытянуть в Таблицу тревог все сигналы, но желательно по строчно, чтоб было читабельно. И еще вопрос, каким ф. блоком после склеивания WCONCAT8 разбить на выходе сплошную строковую (на несколько строк), чтобы можно по событию заполнить строковые в таблицу?
Можете объяснить, зачем вам это нужно?
Не проще заполнить таблицу массивом переменных, без всяких склеиваний и строк?
Хватит страдать ХЕРНЁЙ! Таблица тревог НЕ предназначена для многострочного текста!!! НЕ надо делать так, как ты делаешь!!!
И не надо писать на каких-то блоках (по ходу это CFC)! Надо переходить на ST и там нормально работать со строками.
Строки нужны ТОЛЬКО для вывода на экран. Не надо в них хранить данные!
Поэтому поставь там с kondor3000 пожалуйста задачу, а мы посоветуем решение.
МихаилГл
04.09.2024, 18:07
Здравствуйте еще раз!
Тут столкнулся с блоком "склеивания" двойных строковых. Блок WCONCAT8 до 255 символов, а у меня на выходе не могу склеить все строковые, обрезает в 2, 3, 4 блоке, что не так с 255 символами (1 блок - это проверочный, тут все значения сплошные склеивает от датчиков). 2 блок - это три первых сигнала с датчиков, 3 блок - другие три сигнала с датчиков. Далее пробую 2 и 3 блок вместе склеить, чтоб одной строкой
все было "склеено" на 4 блоке. Но тут опять на выходе не все строковые, только от одной входной переменной. Что не так, где 255 символов? И как лучше. Задача далее стоит, по Латч переменной вытянуть в Таблицу тревог все сигналы, но желательно по строчно, чтоб было читабельно. И еще вопрос, каким ф. блоком после склеивания WCONCAT8 разбить на выходе сплошную строковую (на несколько строк), чтобы можно по событию заполнить строковые в таблицу?
255 символов в строковой переменной не появится, пока вы в описании переменной не поставите ей размерность [255]. По умолчанию строки идут размерностью 80...
МихаилГл
04.09.2024, 18:22
Можете объяснить, зачем вам это нужно?
Не проще заполнить таблицу массивом переменных, без всяких склеиваний и строк?
Не знаю как для ТС, а мне для заказчика приходилось на плк210 на сокете формировать json ответ длиной в 2000 символов. Диагностика бурового станка. Вот там я помучился.
МихаилГл Предупреждение модератора. Просьба не флудить: ТС хочет записывать длинную строку в Таблицу Тревог. К JSON и станкам это не относится.
МихаилГл
04.09.2024, 20:43
Если вас повысили до модератора, то будьте вежливы к окружающим, а не вот это:
"Хватит страдать ХЕРНЁЙ! ".
255 символов в строковой переменной не появится, пока вы в описании переменной не поставите ей размерность [255]. По умолчанию строки идут размерностью 80...
Благодарю! Вот блин... !!!!
ВладОвен
05.09.2024, 10:44
МихаилГл Предупреждение модератора. Просьба не флудить: ТС хочет записывать длинную строку в Таблицу Тревог. К JSON и станкам это не относится.
Слушай, а ты не охренел тут раздавать всем замечания? Иди отсюда.
Я тебе тоже выписываю предупреждение администратора.
Я благодарен тебе за некоторые посты с полезной информацией,
но при встрече по шее тебе бы врезал.
ВладОвен
05.09.2024, 11:01
Не знаю как для ТС, а мне для заказчика приходилось на плк210 на сокете формировать json ответ длиной в 2000 символов. Диагностика бурового станка. Вот там я помучился.
Я тоже делал такое как-то. Использовал строку в 100кБ (длина 100000) для JSON. Это работает хорошо.
Может ТС стоит уломать заказчика развернуть отдельный сервер событий. Например, Gotify (https://gotify.net/). А ПЛК туда будет кидать отчеты по событиям.
Но это требует хорошего уровня знаний.
По поводу склеивания:
Можно попробовать библиотеку "String Util Intern Library" (MSU) - там есть склеивание длинных строк (и STRING, и WSTRING).
78463
По поводу переноса строк:
А для удобства переноса строк, наверное, можно использовать спецификаторы формата вывода переменных. Раздел 8.2:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Visu_v2.0.pdf
ВладОвен Нет. Всё нормально. Тех, кто не читает, кто спешит и суетится, я ненавидел и буду ненавидеть. Везде и всюду. И выражать это тоже буду.
Если вы не читаете и не умеете получать инфу - то это для меня красная тряпка.
Можете объяснить, зачем вам это нужно?
Не проще заполнить таблицу массивом переменных, без всяких склеиваний и строк?
Поясняю. Задача. 10 входных сигналов от датчиков (6 аналоговых и 4 дискретных). Если авария у оборудования (наш блок определяет, выдает дискретный общий сигнал аварии).
Все. Требуется зафиксировать все аналоговые сигналы и дискретные (положение ключей, датчиков) при этой аварии, т.е. зафиксировать. Потом узнаем кто и КАК неправильно управлял установкой ( -Усе) и правильно фунциклировала сама установка. Сбор статистики и заказчик уже не сможет рассказать сказки про гарантию. Значения могут быть разные при такой общей аварии.
kondor3000
05.09.2024, 14:30
Поясняю. Задача. 10 входных сигналов от датчиков (6 аналоговых и 4 дискретных). Если авария у оборудования (наш блок определяет, выдает дискретный общий сигнал аварии).
Все. Требуется зафиксировать все аналоговые сигналы и дискретные (положение ключей, датчиков) при этой аварии, т.е. зафиксировать. Потом узнаем кто и КАК неправильно управлял установкой ( -Усе) и правильно фунциклировала сама установка. Сбор статистики и заказчик уже не сможет рассказать сказки про гарантию. Значения могут быть разные при такой общей аварии.
И кто мешает зафиксировать? Нужно 12 регистров для 6 аналогов и 1 регистр в виде маски бит+ 6 регистров штамп времени и даты. Всего 21 регистр.
И складывайте в таблицу, на флешку или куда надо.
Строки тут при чём и зачем длинная строка тут?
Поясняю. Задача. 10 входных сигналов от датчиков (6 аналоговых и 4 дискретных). Если авария у оборудования (наш блок определяет, выдает дискретный общий сигнал аварии).
Все. Требуется зафиксировать все аналоговые сигналы и дискретные (положение ключей, датчиков) при этой аварии, т.е. зафиксировать. Потом узнаем кто и КАК неправильно управлял установкой ( -Усе) и правильно фунциклировала сама установка. Значения могут быть разные при такой общей аварии.. Теперь задачу хотим в журнале тревог вывести и если что просматривать через csv файл и далее в Экселе. Авария произошла и все 10 сигналов в журнале аварийном зафиксировались. Выводить думаем, через Латч 1 переменную в АлармГрупп. Удобно, понятно, стандартно, есть уже время, квитирование если исправили неисправность и стандартно. Мне нравится идея. Но вот вывод, одновременно в Таблице аварий 10 нужных нам сигналов, немного не ожидали от настройки. Думали как в конструкторе лего.
[QUOTE=DOMOSED;445300]. Уже не хотелось бы менять "коней на переправе". Надо разбираться. Сейчас у нас от сигнала аварии, по Латч переменной, мы можем вытянуть по правилу работы с Латч переменными, только 2 доп. переменные (две температуры). А когда мы начали все это быстро проверять, то проверили 1-2 сигнала. Заработало. Мы подумали, что наверно и все 10 увидим. Попробовали еще 3 сигнал для проверки и журнал аварий один раз зафиксировал вывод 3-х сигналов, а мы далее и не проверяли, только после нескольких дней. Все по 0 было. Мы не стали проверять и временно забросили, думали торопились и это глюк какой то.
И кто мешает зафиксировать? Нужно 12 регистров для 6 аналогов и 1 регистр в виде маски бит+ 6 регистров штамп времени и даты. Всего 21 регистр.
И складывайте в таблицу, на флешку или куда надо.
Строки тут при чём и зачем длинная строка тут?
Решили одну длинную "склеенную" строку затем разделить на несколько маленьких и заполнить таблицу аварий. Всего 10 строк. И начали эту задачу. Ну и вывод на экране СПК107 всех этих аварийных сигналов.
Что неправильно?
Здравствуйте! подскажите, как пользоваться поиском на форуме?
Допустим, ищу "connection aborted socet keep-alive expired" - поиск выдает просто список тем, в которых встречаются слова, без возможности перехода хотя бы на страницу, где это указано. В том числе ссылается на эту ветку - здесь 190 страниц и пролистывать все просто ппц)))
левую вкладку выберите, чтобы она стала синей.
Поиск по одному типу содержимого. И там настраивайте.
левую вкладку выберите, чтобы она стала синей.
Поиск по одному типу содержимого. И там настраивайте.
78477
Не смог понять, какую вкладку???
sssssaaaaabbbbb
06.09.2024, 13:35
Здравствуйте коллеги, подскажите пожауйста в ситуации: ПЛК 210 , Онлайн -> загрузочное приложение. выкл/вкл ПЛК210 и как чистый лист. При этом при обычной работе в CODESYS Проект загружается без проблем. Визуализация показывается хорошо. Заходится на Веб страницу самого ПЛК78485
Евгений Кислов
06.09.2024, 13:56
Здравствуйте коллеги, подскажите пожауйста в ситуации: ПЛК 210 , Онлайн -> загрузочное приложение. выкл/вкл ПЛК210 и как чистый лист. При этом при обычной работе в CODESYS Проект загружается без проблем. Визуализация показывается хорошо. Заходится на Веб страницу самого ПЛК78485
Добрый день.
1. В каком положении переключатель Старт/Стоп на корпусе прибора?
2. Выложите скриншот вкладки веб-конфигуратора Система - Точки монтирования.
sssssaaaaabbbbb
06.09.2024, 14:04
Добрый день.
1. В каком положении переключатель Старт/Стоп на корпусе прибора?
2. Выложите скриншот вкладки веб-конфигуратора Система - Точки монтирования.
Выкладываю 78486
Переключатель был в положении стоп, переключил его на старт , пока ничего не изменилось
Может с этим как то связано: есть ошибка, но проект загружается 78487 , может как то можно разрешить работу библиотеки?
А вот каким то чудом загрузился!!!
Sergey7786
06.09.2024, 14:51
Здравствуйте. Подскажите пожалуйста. У меня проект на 2 плк Овен 210-3 и одна ЧМИ Овен СПК 107. Между ними поднято общение по ModbusTCP. Значит один плк мастер, чми и второй плк слейвы. С этим проде разобрался, всё зелёное при подключении. Я хочу объявить глобальные переменные чтобы можно было работать с ними всеми плк и чми. Подскажите как это можно сделать? Я создал во всех устройствах список глобальных переменных, но если попытаться добавить эти глобальные переменные в программу на другом устройстве, то их не видно в предлагаемом списке переменных.
kondor3000
06.09.2024, 15:05
Здравствуйте. Подскажите пожалуйста. У меня проект на 2 плк Овен 210-3 и одна ЧМИ Овен СПК 107. Между ними поднято общение по ModbusTCP. Значит один плк мастер, чми и второй плк слейвы. С этим проде разобрался, всё зелёное при подключении. Я хочу объявить глобальные переменные чтобы можно было работать с ними всеми плк и чми. Подскажите как это можно сделать? Я создал во всех устройствах список глобальных переменных, но если попытаться добавить эти глобальные переменные в программу на другом устройстве, то их не видно в предлагаемом списке переменных.
Глобальные переменные добавляютя например в самом ПЛК, они доступны для всех программ и ФБ (функц. блоков) во всё проекте ПЛК, но не в панели. Для связи с панелью есть сетевые переменные, если в них добавить и эти глобальные, тогда они будут передаваться и в панель.
Sergey7786
06.09.2024, 15:15
Глобальные переменные добавляютя например в самом ПЛК, они доступны для всех программ и ФБ (функц. блоков) во всё проекте ПЛК, но не в панели. Для связи с панелью есть сетевые переменные, если в них добавить и эти глобальные, тогда они будут передаваться и в панель.
Я правильно понимаю, чисто на руках если показывать, вот у меня есть 2 ПЛК, Мастер и Слейв, вот если на Мастере создать список глобальных переменных (GVL) и объявить там переменную, то она станет видна при вызове её в программе Слейва? Я правильно понимаю? Потому что у меня так не получается. При поиске переменной для программы слейва не показывается GVL Мастера.
Нет. Всё не так. Нужны специальные глобальные СЕТЕВЫЕ переменные. Они называются "Список сетевых переменных".
НО! Так, чтобы можно было одну и ту же переменную изменять с панели и двух ПЛК, штатно не получится.
Sergey7786
06.09.2024, 15:31
Нет. Всё не так. Нужны специальные глобальные СЕТЕВЫЕ переменные. Они называются "Список сетевых переменных".
НО! Так, чтобы можно было одну и ту же переменную изменять с панели и двух ПЛК, штатно не получится.
Это интересно. Обнаружил нечто такое: Список сетевых переменных (Отправитель) и Список сетевых переменных (Получатель). Эти списки надо создавать в ПЛК или в ЧМИ? Ссп (Отправитель) это я так понимаю список переменный В ЧМИ, а (Получатель это ИЗ ЧМИ?
Sergey7786 Так. Сортируем мысли.
1. Эти переменные - для обмена между CodeSys. ТОЛЬКО для этого.
2. ЧМИ работает на CodeSys? Если нет - то такие переменные НЕ будут им поддержаны.
Я ищу видео от Евгения Кислова (канал YouTube CodesysOneLove) про эти переменные и пока не могу его найти.
Sergey7786
06.09.2024, 18:10
Ладно. Ещё один албанский вопрос.
Значит если я при создании проекта сначала добавляю панель ЧМИ, потом ПЛК так что панель сверху дерева проекта, а ПЛК снизу, то связь по ModbusTCP нормально поднимается. Как только я сначала выбираю ПЛК первым, а следом выбираю ЧМИ вторым, что он теперь снизу дерева проекта, то вываливается сообщение Gateway configuration invalid. Это что за фокусы?
Так. Просьба НЕ использовать слово "ЧМИ" в отношении СПК.
Потом что это у условного Siemens - это именно ЧМИ, который автоматически получает данные из всяких M, Q, I, A, W и прочих.
Тут это ОТДЕЛЬНЫЙ ПЛК. Со своим отдельным проектом.
Про Gateway сказать не могу: я с таким не сталкивался, так как делаю по файлу на проект.
Емельянов Кирилл
07.09.2024, 02:57
Sergey7786 прочитайте для начала документацию (https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_PlcCommunication_v3.0.pdf)
Хотел узнать какую настройку сделать чтобы каждый раз перед глобальной переменной не писать "Global."...? В каких-то проектах проходит без указателя с точкой в каких-то нет.
МихаилГл
07.09.2024, 10:26
Хотел узнать какую настройку сделать чтобы каждый раз перед глобальной переменной не писать "Global."...? В каких-то проектах проходит без указателя с точкой в каких-то нет.
Сотри всё прагмы...
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2529769099.html&id=
Kipiamail
08.09.2024, 07:26
Модуль МВ210-102 и ПЛК210 соединены по Ethernet в ПКЛ использую шаблон модуля, так вот при первом подключении все настройки датчиков модуля сбрасываются на заводские т.е. отключены. Не пойму что делать.
Присвоил биту на запись значение переменной FALSE не помогает.
78510
kondor3000
08.09.2024, 08:01
Модуль МВ210-102 и ПЛК210 соединены по Ethernet в ПКЛ использую шаблон модуля, так вот при первом подключении все настройки датчиков модуля сбрасываются на заводские т.е. отключены. Не пойму что делать.
Присвоил биту на запись значение переменной FALSE не помогает.
78510
При использовании шаблона, настройки в модуль записываются из ПЛК. Настройте входы модуля в самом ПЛК.
valentown
08.09.2024, 23:09
Как программно из ПЛК210 изменить настройки канала измерения датчика: сдвиг, наклон характеристики (Мх210 подключен через шаблон)? Записываю значение в (Переменые-Настройки-Запись-Вход 1), но они не применяются.78526
Емельянов Кирилл
09.09.2024, 00:46
На вкладке "конфигурация" в параметре "использовать параметры конфигурации" должно быть задано "False". А у вас что?
WSTRING меняются от условия задачи на TRUE или FALSE.
Как это преобразовать правильно в новом WSTRING "Да" или "Нет" на CFC?
Здравствуйте.
При установке CODESYS V3.5 SP17 Patch 3 ошибка запуска Codesys Gateway. До этого была установлена версия CODESYS V3.5 SP19, данную версию полностью удалил, а также удалил каталог C:\ProgramData\CODESYS. Перезагружал, пробовал несколько раз переустанавливать, ошибка запуска Codesys Gateway. Подскажите как решить данную проблему? Если возможно отправьте пожалуйста пошаговую инструкцию.
https://dropmefiles.com/aJPZe
https://dropmefiles.com/aJPZe
kondor3000
09.09.2024, 18:11
Здравствуйте.
При установке CODESYS V3.5 SP17 Patch 3 ошибка запуска Codesys Gateway. До этого была установлена версия CODESYS V3.5 SP19, данную версию полностью удалил, а также удалил каталог C:\ProgramData\CODESYS. Перезагружал, пробовал несколько раз переустанавливать, ошибка запуска Codesys Gateway. Подскажите как решить данную проблему? Если возможно отправьте пожалуйста пошаговую инструкцию.
Либо удалили не полностью, либо поставили не правильно, ставить надо как на видео https://www.youtube.com/watch?v=3KcJWZEVXCg
valentown
09.09.2024, 18:36
На вкладке "конфигурация" в параметре "использовать параметры конфигурации" должно быть задано "False". А у вас что?
Как и положено: False
Либо удалили не полностью, либо поставили не правильно, ставить надо как на видео https://www.youtube.com/watch?v=3KcJWZEVXCg
Устанавливал как на видео.
А как удалить полностью?
kondor3000
09.09.2024, 21:36
Устанавливал как на видео.
А как удалить полностью?
Лучший вариант удалять программой установки, во всех версиях есть варианты при установке - Установить, Обновить и Удалить. После перезагрузить комп.
Надо удалить 19 версию, установщиком 19 версии и удаляйте, иначе вам придётся удалять и чистить все папки и реестр.
Евгений Кислов
10.09.2024, 06:06
Как и положено: False
Добрый день.
Напишите, пожалуйста, мне в телеграм (см. в подписи).
sssssaaaaabbbbb
10.09.2024, 09:10
Здравствуйте, подскажите пожалуйста, почему библиотека на разрешена может быть? и как ее разрешить?78542
Евгений Кислов
10.09.2024, 10:19
Здравствуйте, подскажите пожалуйста, почему библиотека на разрешена может быть? и как ее разрешить?78542
Добрый день.
Например - если у вас в дереве проекта добавлен компонент Modbus TCP Slave Device той версии, которая не установлена у вас на ПК.
Пользуюсь Raspberry Pi CM4004008 с промышленной панелью CM4IND и CODESYS V3.5 SP17 Patch 3. При настройке во вкладке Raspberry Pi проблем нет, за исключением того что его ip не отображается при включённом default filter, но это не сильно мешает. Runtime устанавливается и запускается, распберри отображается при сканировании сети. Но при попытке подключиться вылезает странное окно с надписью
"В данный момент вы не обладаете достаточными правами для выполнения этой операции на устройстве. Введите имя и пароль пользователя, обладающего достаточными правами."
Когда подключаю обычный Raspberry Pi 4 оно тоже вылезает, но там я ввожу имя пользователя root и пароль от системы и он подключается. Здесь же выдаёт
"Никакое устройство не отвечает на запрос поиска."
Если вводить обычное имя пользователя выдаётся то же самое. Подскажите, чем может быть вызвана такая ошибка?
78548785497855078551
[Решено] решил тем что скачал raspberry pi os x64 и codesys x64, и установил последние версии всех пакетов
СергейНовосиб
12.09.2024, 11:40
Добрый день!
Столкнулся с такой ситуацией: На шине RS имеется 5 ПР200 с одинаковым программами и одинаковыми регистрами общения.
На одной ПР200, при настройке в Codesys изменил параметр опроса. Пол года все работало нормально. Потом из группы 17 регистров на запись в ПР200 - 14 передавались, а 3 последних в CS показывает, что значение регистра изменилось, но до ПР200 не дошло.
Есть параметр "Всегда обновлять переменные". На одной стояло "Вкл.1", на остальных "Вкл.2". В чем разница между "Вкл.1" и "Вкл.2"?
78578
...
Есть параметр "Всегда обновлять переменные". На одной стояло "Вкл.1", на остальных "Вкл.2". В чем разница между "Вкл.1" и "Вкл.2"?
Вот здесь (https://ftp.owen.ru/CoDeSys3/98_Books/CodesysTaskManagment.pdf) есть про это (стр.29)
Здравствуйте! Подскажите, если пропала связь между СПК107 и модулями ввода/вывода (RS485, шаблоны, Модбас), как организовать момент привлечения
внимания персонала ревет ревун, мигает лампа на щите) при пропадании (это ведь авария) допустим 1 сек или 5 минут или 1 час. Ведь персонал может и не заметить этого на смене. И тогда надо архивировать эти данные. или как? Есть типовое что либо при пропадании связи?
МихаилГл
12.09.2024, 18:58
Здравствуйте! Подскажите, если пропала связь между СПК107 и модулями ввода/вывода (RS485, шаблоны, Модбас), как организовать момент привлечения
внимания персонала ревет ревун, мигает лампа на щите) при пропадании (это ведь авария) допустим 1 сек или 5 минут или 1 час. Ведь персонал может и не заметить этого на смене. И тогда надо архивировать эти данные. или как? Есть типовое что либо при пропадании связи?
На спк входов/выходов нет же?! Надо смотреть в сторону конфигурирования самих модулей при потере связи, но можно ли их конфигурировать если спк использует шаблоны... Надо читать документацию, вопрос интересный...
DOMOSED 1. Почитать мою статью про обработку сбоев связи Modbus (нужен заголовок 6): https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#6__modbus___ai__io
Стащить оттуда идею фиксации длительных ошибок и пропуска кратковременных.
2. Если нужна прям ЗЛАЯ авария - то на эти ошибки поставить RS-триггер. Как любая ошибка случается - триггер взводится, и его выход включает ревун, который будет орать, пока кто-то с интерфейса СПК не сбросит аварию =)
3. Если нужна фикскация - то в СПК есть Тревоги (у меня в статье они тоже упоминаются). Собственно, я все ошибки связи через тревоги и фиксирую. Они пишутся в таблицу, и можно потом посмотреть их историю.
МихаилГл Просьба не вмешиваться, так как ответ снова не по теме.
Николай Суриков
12.09.2024, 21:59
Cs-Cs, Вы сами отвечаете не по теме. У Вас ЧСВ повысилось? Неприятно читать.
Домосед спрашивает как оповещать персонал если отвалилась связь с модулями. Как передать сигнал во внешний мир, если не работает связь, а СПК не имеет собственных выходов (о чем и написал МихаилГл), так же он написал что надо смотреть конфигурацию модулей, в чем он абсолютно прав, так как например у модулей МУ210 и МУ110 есть в настройках безопасное состояние, настроив которое, выход модуля может сработать при потере связи и сигнализировать персонал.
Николай Суриков Нет, с ЧСВ у меня всё ок.
а) Про алгоритм обработки ошибок Modbus тут полФорума спрашивало. Я написал статью.
б) Связь с "модулями". Значит, потенциально не совсеми сразу (этого в постановке задачи не было).
в) Тревоги тут тоже помогут.
Поэтому у меня попадание в ответы 2 и 3х.
А МихаилГл написал нечто абстрактное. Как его на практике применить?
Николай, благодарю Вас, все нормально! Коллеги давайте жить дружно!
valentown
14.09.2024, 17:21
Как программно из ПЛК210 изменить настройки канала измерения датчика: сдвиг, наклон характеристики (Мх210 подключен через шаблон)? Записываю значение в (Переменые-Настройки-Запись-Вход 1), но они не применяются.78526
Вопрос решен. Не учел применение параметров по переднему фронту. Спасибо Евгению за помощь.
СЕРГЕЙ1969
15.09.2024, 02:47
Здравствуйте. Извините если не в тему . Инкодер ABZ 360 полный оборот, а и ь считаю импульсы определяю сторону вращения ,z использую для подсчета импульсов при ускоренном передвижении ,так как существуют пропуски ,и использовать не скоростной вход, плк 160 м02 , есть ли у вас такой опыт , хватит ли частоты обработки плк , спасибо.
ВладОвен
16.09.2024, 07:47
МихаилГл Просьба не вмешиваться, так как ответ снова не по теме.
Я тоже так делал.
Сконфигурировал модуль вывода таким образом что-бы срабатывало аварийное отключение в случае, если длительное время нет обмена с ПЛК (8 сек, например).
Блок отключает всех своих потребителей (нагрузки) и зажигает красный семафор.
Но недостатком такого подхода будет два ПО (два объекта ПО):
1. Основная программа в ПЛК.
2. Параметры (настройки) модуля вывода. При замене блока, который вышел из строя нужно будет в новый блок загрузить эти параметры.
Я тоже так делал..
Но недостатком такого подхода будет два ПО (два объекта ПО):
1. Основная программа в ПЛК.
2. Параметры (настройки) модуля вывода. При замене блока, который вышел из строя нужно будет в новый блок загрузить эти параметры.
Нормальный и естественный подход
Насчет недостатков непонятно - сетевые параметры модулю все равно ставить, а коли есть опасения что кто-то забудет поправить t.out, никто не запрещает это сделать из "1-ого обьекта ПО"
Среда Codesys V3.5 SP17 Patch 3 + (32 bit)
Контроллер виртуальный Win V3
Постоянно возникающая ошибка "С0040 Для функции FB_Init требуется ровно 6 входов"
По команде "Компиляция" ошибка не появляется.
При попытке загрузить код в контроллер, выполняется перекомпиляция, но с уже выше описанной ошибкой.
Лечиться полной перекомпиляцией ( с очисткой ).
Как исправить ситуацию?
Евгений Кислов
17.09.2024, 06:17
Добрый день.
Как исправить ситуацию?
Выложите, пожалуйста, простейший проект, в котором повторяется данная ситуация.
ссылка на этот самый проект
https://disk.yandex.com/d/D7UhYSlZbdV2fw
Евгений Кислов
17.09.2024, 07:35
ссылка на этот самый проект
https://disk.yandex.com/d/D7UhYSlZbdV2fw
У меня с вашим проектом описанная вами проблема не наблюдается.
Но вызывает вопросы список глобальных переменных IO, в котором используются физические адресы, отсутствующие в проекте.
Если убрать его из проекта - ваша проблема будет повторяться?
У меня с вашим проектом описанная вами проблема не наблюдается.
Но вызывает вопросы список глобальных переменных IO, в котором используются физические адресы, отсутствующие в проекте.
Если убрать его из проекта - ваша проблема будет повторяться?
Удалил раздел IO и весь код где были задействованы переменные . Результат тот же , на скриншоте
https://disk.yandex.com/i/_zxF3EZLOaq8VA
Евгений Кислов
17.09.2024, 12:30
Удалил раздел IO и весь код где были задействованы переменные . Результат тот же , на скриншоте
https://disk.yandex.com/i/_zxF3EZLOaq8VA
Свяжитесь, пожалуйста, со мной через телеграм (см. в подписи) и продемонстрируйте это по AnyDesk.
pppppppo_98
17.09.2024, 20:01
Можно ли при описании устройств ти Modbus Slave Client(интересует Modbus прежде всего) использовать не числовые константы (в виде адреса регистров написанных циферьками), а щгначения определенные в списке глобальных констант.
Евгений Кислов
17.09.2024, 20:05
Можно ли при описании устройств ти Modbus Slave Client(интересует Modbus прежде всего) использовать не числовые константы (в виде адреса регистров написанных циферьками), а щгначения определенные в списке глобальных констант.
При настройке обмена через дерево проекта - нет.
При настройке обмена через библиотеку - можно.
pppppppo_98
17.09.2024, 21:01
При настройке обмена через дерево проекта - нет.
При настройке обмена через библиотеку - можно.
А есть ли у вас пример асинхронного параллельного опроса нескольких устройств (и на ввод и на вывод) по шине модбас с использованием библиотек. Хотелось бы посмотреть как устроен перезапуск устройства в случае временного зависания... Задача собственно такая - есть несколько насосов с чрп и удаленными датчиками (неприсоединенные к ЧРП) -нужно синхронирзировать расход воды у насосв соединенных последовательно (условно 1 и 2 подьемов). На ЧРП установлены ПИД регуляторы, данные проходят по модбас... По шине модбаса идет некоторая потеря пакетов 7-10% на разных ЧРП, поэтому данные обратной связи (уровень)для ЧРП передаются с избыточным семплированием.
Евгений Кислов
18.09.2024, 06:07
А есть ли у вас пример асинхронного параллельного опроса нескольких устройств (и на ввод и на вывод) по шине модбас
О каком протоколе речь - Modbus RTU или Modbus TCP?
Хотелось бы посмотреть как устроен перезапуск устройства в случае временного зависания.
Перезапуск устройства или перезапуск опроса устройства?
pppppppo_98
18.09.2024, 10:11
О каком протоколе речь - Modbus RTU или Modbus TCP?
Да собственно использую и то, и другое. Но наверное достаточно одного, второе по аналогии можно сделать (учитывая естественно что там несколько иные события)
Перезапуск устройства или перезапуск опроса устройства?
Ну наверное перезапуск опроса . Он же реализован в дереве , при нажатии соотвествующей галочки
ЗЫ
Я так понимаю что для опроса устройств нужно тогда отдельную задачу создавать?
Евгений Кислов
18.09.2024, 10:18
Я так понимаю что для опроса устройств нужно тогда отдельную задачу создавать?
Необязательно.
Ну наверное перезапуск опроса . Он же реализован в дереве , при нажатии соотвествующей галочки
Если вы реализуете обмен в коде - то, соответственно, контроль над опросом остается на вашей стороне.
Например, при отсутствии ответа от устройства, вы можете опросить другие устройства шины и затем снова попробовать опросить его - это типовой вариант.
Насчет примеров - можете начать с п. 5 из этого документа:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf
ВладОвен
18.09.2024, 13:46
Привет.
Подскажите, как использовать переменную SFCCurrentStep в языке SFC ? Я хочу получать название шага автомата.
Эту переменную нужно нужно объявлять или нет? Я ее объявляю и получаю предупреждение:
C0373: Use of SFC flag variable 'SFCCurrentStep' is disabled.
78673
Евгений Кислов
18.09.2024, 13:49
Привет.
Подскажите, как использовать переменную SFCCurrentStep в языке SFC ? Я хочу получать название шага автомата.
Эту переменную нужно нужно объявлять или нет? Я ее объявляю и получаю предупреждение:
C0373: Use of SFC flag variable 'SFCCurrentStep' is disabled.
78673
Добрый день.
Проект - Установки проекта - SFC - поставьте нужные вам галочки
78674
Здравствуйте!
1. Есть готовые решения для проверки на обрыв 4-20мА от датчика в шаблонах для СПК107 и модулями серии МВ110-224 (МВ110-224.8А например). Напомню, у нас работа по шаблонам, RS 485, Модбас, Codesys 3.5. Или нужно писать программу самим? Может можно в Таблицу тревог сразу вытянуть обрыв и пропадание связи?
2. И также есть ли решения при пропадании связи между СПК107 и модулями серии МВ110-224? Или нужно писать прогу самому?
kondor3000
18.09.2024, 17:16
Здравствуйте!
1. Есть готовые решения для проверки на обрыв 4-20мА от датчика в шаблонах для СПК107 и модулями серии МВ110-224 (МВ110-224.8А например). Напомню, у нас работа по шаблонам, RS 485, Модбас, Codesys 3.5. Или нужно писать программу самим? Может можно в Таблицу тревог сразу вытянуть обрыв и пропадание связи?
2. И также есть ли решения при пропадании связи между СПК107 и модулями серии МВ110-224? Или нужно писать прогу самому?
В шаблонах для каждого канала есть статус, читайте его и определяйте обрыв. 78678 Можно через структуру и перечисление.
Коды ошибок есть в руководстве. Например
STATUS_OK := 0, // Нет ошибок
STATUS_BREAK :=16#F00D, // Обрыв датчика
Для опроса модуля есть флаг ошибки- Признак ошибки опроса модуля, проверяйте бит и используйте где надо.
DOMOSED Вроде же я недавно прямо приводил свою статью про эти решения (штатных нет): https://cs-cs.net/technologii-testirovaniya-i-otladky-shhgitov-s-svtomatikoy-na-plk#6__modbus___ai__io (нужен заголовок 6).
Там описано то, как я отслеживаю пропадание связи по Modbus и коды ошибок датчиков.
kondor3000, благодарю! Еще такой момент, берем новую панель СПК107 из коробки и при подключении как в систему войти панели. Иногда 3 раза жмем по ней входишь, иногда жмешь один раз сильно, можно сразу войти, а можно много раз перезагружать, нажимать на экран и заново. Непонятно где написано что надо один раз по экрану или несколько. А загрузка 1.5-2 минуты. Долго очень! Кто знает?
DOMOSED Пожалуйста и мою статью почитай. Там описан нюанс: если CodeSys опрашивает несколько Modbus-каналов одного устройства, то флаг ошибки связи периодически сбрасывается и потом снова включается.
Я описал, как это отфильтровать и сделать постоянно работающий флаг ошибки "Потеря связи".
kondor3000
19.09.2024, 10:30
kondor3000, благодарю! Еще такой момент, берем новую панель СПК107 из коробки и при подключении как в систему войти панели. Иногда 3 раза жмем по ней входишь, иногда жмешь один раз сильно, можно сразу войти, а можно много раз перезагружать, нажимать на экран и заново. Непонятно где написано что надо один раз по экрану или несколько. А загрузка 1.5-2 минуты. Долго очень! Кто знает?
Видео, первая минута, вход в систему https://www.youtube.com/watch?v=AjU9jWEaH0U
Загрузка 1.5-2 мин это нормально
Добрый день, я начинающий пользователь codesys 3.5 (sp17 patch 3 + 32bit)
Не могу понять в чем проблема, при создании нового проекта доступен только ST.
Кажется мне нужен SoftMotion пакет, верно ли это?
Скачиваю и устанавливаю его без ошибок, но другие варианты выбора так и не предлагаются при создании нового проекта.
Подскажите пожалуйста, как решить вопрос?
kondor3000
19.09.2024, 11:32
Добрый день, я начинающий пользователь codesys 3.5 (sp17 patch 3 + 32bit)
Не могу понять в чем проблема, при создании нового проекта доступен только ST.
Кажется мне нужен SoftMotion пакет, верно ли это?
Скачиваю и устанавливаю его без ошибок, но другие варианты выбора так и не предлагаются при создании нового проекта.
Подскажите пожалуйста, как решить вопрос?
Вы не правильно установили codesys 3.5 (sp17 patch 3 + 32bit). Надо переустановить как на видео https://www.youtube.com/watch?v=3KcJWZEVXCg
ВладОвен
19.09.2024, 12:30
Кажется мне нужен SoftMotion пакет?
Хм. Это интересно.
А какие задачи вам предстоит решать?
Что вы хотите реализовать?
Разве SoftMotion есть в ПЛК от ОВЕНа?
На Raspberry он есть. И соответственно должен быть у "иных производителей" (но это не точно).
Спасибо большое, получилось!
Хм. Это интересно.
А какие задачи вам предстоит решать?
Что вы хотите реализовать?
Разве SoftMotion есть в ПЛК от ОВЕНа?
На Raspberry он есть. И соответственно должен быть у "иных производителей" (но это не точно).
Мне нужно научиться делать проекты для ИТП. Я только начинаю работать с codesys и owenlogic, поэтому могу задавать некорректные вопросы, извините)
SoftMotion увидел в гайде, думал из-за его отсутствия у меня нет выбора языка в новом проекте. Но когда провел установку codesys по видео выше (правильно) увидел и выбор сразу.
Свяжитесь, пожалуйста, со мной через телеграм (см. в подписи) и продемонстрируйте это по AnyDesk.
Решение проблемы подсказанное Евгением:
При выборе способа загрузки проекта в виртуальный ПЛК выбрать "Логин с загрузкой" вместо "Логин с онлайн-заменой"
Спасибо.
Добрый день! Пытаюсь вывести ошибки обмена (задача моя: пропадает связь по Модбас РТУ, беру отключаю провода или один или другой) в таблицу тревог. У меня СПК107 (шаблоны, МВ110-8А, Модбас РТУ, RS485). Посмотрел видео 29 на эту тему, но там речь идет о модулях с Модбас ТСР и показан пример с OPC. Как мне соотнести этот пример с моей задачей? Что мне надо настроить? Вместо OPC что можно использовать? Пока что “не догоняю”.
kondor3000
20.09.2024, 14:19
Добрый день! Пытаюсь вывести ошибки обмена (задача моя: пропадает связь по Модбас РТУ, беру отключаю провода или один или другой) в таблицу тревог. У меня СПК107 (шаблоны, МВ110-8А, Модбас РТУ, RS485). Посмотрел видео 29 на эту тему, но там речь идет о модулях с Модбас ТСР и показан пример с OPC. Как мне соотнести этот пример с моей задачей? Что мне надо настроить? Вместо OPC что можно использовать? Пока что “не догоняю”.
У вас что в наличии есть?
Если есть СПК и Модули, то и соединяйте (разрывайте) связь с ними и смотрите ошибки в обмене.
В примерах могут заменять живой СПК или модуль на эмуляцию в виде ОРС. Тогда связь разрывают на переходнике RS485-USB (или кабель по ТСР).
Здравствуйте, коллеги!
Подскажите ,пожалуйста, возможно ли передать в функцию (метод) указатель на WORD или DWORD и при этом внутри функции определить тип переданного указателя?
..возможно ли передать в функцию (метод) указатель на WORD или DWORD..
Да
..при этом внутри функции определить тип переданного указателя?
Нет. Только передать туда же доп.информацию.
https://www.anekdot.ru/id/165396/
Указатель это просто адрес ячейки памяти, в нем не содержится информация о том информация какого типа там хранится. В нем нет даже длины этой информации. Просто адрес первого байта и все.
Здравствуйте! У модуля аналоговых входов МВ110-8А (H/W 2.0) есть Шаблон (RS485, Modbas rtu, шаблон). И в разделе соотнесение входов/выходов есть такой параметр, как Код статуса.
Как с ним работать? Ведь тип у него Enumeration of UINT? Это ведь какой то свой придуманный Овеном тип переменной? Хотелось бы не программировать? А взял, "галку" установил и Вуаля.
Но если надо, то минимум на CFC хотя бы (так первоначально создали структура нашей проги первоначально). Что хотим от этого параметра (или другого, но удобного для нашей задачи). Две задачи:
1. Контролировать датчик - обрыв его в первую очередь и КЗ (корот. зам.). Привлекаем персонал миганием на экране например. Если идеал, то все его сообщения выводить в журнал аварий.
2. Далее записываем в Журнал Аварий (Тревог) Alarm group. Персонал, пришел на смене, посмотрел.
Да еще если см. Руководство по эксплуатации, там есть раздел Диагностика работы датчиков и исключительные ситуации и есть Таблица 8.3 Коды статусов входа. Как с ними работать? Что нужно каждый
статус нужный нам проверять программно (писать прогу)? Допустим датчик отключен - 0xF7.
В целом этот шаблон лучше вообще не использовать, но раз уж вы его используете то enum это по сути просто число и что непонятного в его использовании? Может вместо этого опуса лучше изучить что такое enum.Там реально текста меньше чем вы написали.
Здравствуйте, не понимаю, почему такая загрузка цп. проект почти пустой
ВладОвен
24.09.2024, 11:22
Что за железка? Как настроена конфигурация задач? Что значит "почти пустой"?
Michael42
24.09.2024, 12:53
78835
Добрый день.
на виртуальном контроллере упражняюсь, как только объявляю DIG_FILTR из библиотеки OPR - ругается и не хочет грузить
компилируется при этом нормально, при этом еще говорит что у меня версия устройства в проекта и реального разные, как только комментарю объявление - все ок
Евгений Кислов
24.09.2024, 13:39
78835
Добрый день.
на виртуальном контроллере упражняюсь, как только объявляю DIG_FILTR из библиотеки OPR - ругается и не хочет грузить
компилируется при этом нормально, при этом еще говорит что у меня версия устройства в проекта и реального разные, как только комментарю объявление - все ок
Добрый день.
Библиотека OPR реализована как внешняя. Проект с ней получится загрузить только в контроллер ОВЕН (ПЛК2хх или СПК).
Тоже долго бился с отображением, правда не в таблице а в окне. 78850 Работа 78853
Проблема в том , что обрыв датчика STATUS_BREAK:=16#F00D, а в окне появляется -4083, в итоге заработало
когда в Перечислении вместо STATUS_BREAK:=16#F00D, прописал STATUS_BREAK:=-4083, скрин
В визуализации, происходит неявная конвертация целочисленной, в целое со знаком. %s ничего не отображает, а %d показывает -4083.
Для перечисления по умолчанию используется тип INT (http://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_enum.html), отсюда отрицательные значения.
Вроде бы можно изменить тип перечисления, указав его тип в конце, как показано там в примере:
TYPE COLOR :
(
white := 16#FFFFFF00,
yellow := 16#FFFFFF00,
green := 16#FF00FF00,
blue := 16#FF0000FF,
black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE
INT#16#F00D ?
Кстати для 8A-v2 коррекцию надо будет делать
kondor3000
24.09.2024, 18:10
Для перечисления по умолчанию используется тип INT (http://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_enum.html), отсюда отрицательные значения.
Вроде бы можно изменить тип перечисления, указав его тип в конце, как показано там в примере:
Точно, прописал WORD и всё стало работать))) 78859 работа 78860
Кстати для 8A-v2 коррекцию надо будет делать
Для H/W 2.0, достаточно 16#F00D заменить на 16#0D
Что за железка? Как настроена конфигурация задач? Что значит "почти пустой"?
плк200, из первых моделей. взял, что было под рукой из неиспользуемого - сейчас начал писать новую прогу, без замороченности - клапанами пощелкать и на шим посмотреть)). другие проекты (адаптированивые - рабочие ) заливал - так же было. 99.9% что не в проекте дело.
Смущает, что этот процесс - синхронизация времени, причем используется dev/rtc1 . причем синхронихация времени с ntp сервером / браузером (в вебморде), не меняли родное время (то, которое отображается в выхлопе hwclock)
чтоб не вгружал - удалил задачу cron :rolleyes:
теперь при попытке синхр-ции (в вебморде) - так же появляется этот процесс съедающий остаток цп, но его хоть прибить можно
Карбофос
01.10.2024, 11:53
Добрый день!
Возможна ли реализация ведения журнала действий оператора для СПК110/210? Например в виде таблицы, где каждая строка состоит из полей "оператор", "переменная", "старое значение", "новое значение"?
Евгений Кислов
01.10.2024, 12:23
Добрый день!
Возможна ли реализация ведения журнала действий оператора для СПК110/210? Например в виде таблицы, где каждая строка состоит из полей "оператор", "переменная", "старое значение", "новое значение"?
Добрый день.
Готового функционала для реализации аудиторского следа в CODESYS нет.
Карбофос Вон Евгений Кислов говорит, что штатно нет. Да, так и есть.
Я бы дурканул и написал бы на основании Тревог. Код был бы ручной, но его же не на все переменные ПЛК надо пихать:
а) Сделать FBшку типа CSValueMonitor, на вход которой подаются имя и значение переменной, а на выходе есть Текущее, Предыдущее значения (или вообще строка из них, включая имя пользователя) и булевый флаг изменения, который формируется таймером TP на время, условно 500 ms, чтобы ПЛК успел это отловить.
б) В менеджер тревог запихать тревоги без подтверждения (REP), которая формирует текст из LATCH-переменных (их всего две) типа "Изменение значения переменной VarXX: <LATCH1>" и передать туда инфу из экземпляра FBшки.
Тогда всё будет логиться в эту таблицу тревог.
Писал мутно, так как только что идею выдумал. Она может быть кривая и не отшлифованная умственно.
Добрый день.
Периодически наблюдаю такую проблему, размещаешь переменные на расстоянии от операторов, функциональных блоков, но в какой-то момент при очередном открытии проекта переменные увеличиваются в размере и начинают наезжать на оператор или функциональный блок. В чем может быть проблема, как с этим бороться?
79027
Добрый день.
Периодически наблюдаю такую проблему, размещаешь переменные на расстоянии от операторов, функциональных блоков, но в какой-то момент при очередном открытии проекта переменные увеличиваются в размере и начинают наезжать на оператор или функциональный блок. В чем может быть проблема, как с этим бороться?
Это от масштаба просмотра зависит - сделайте расстояние побольше, да и всё
Party3AH
02.10.2024, 12:14
Вопросы по настройке Modbus TCP Slave - что такое "Unit ID"?
Судя по даташиту настройки обмена по TCP для всех модулей ОВЕН значение должно быть "1".
79038
Ранее я считал, что это какой-то условный уникальный номер для слейв-устройств, и каждому модулю присваивал свой: 2, 3, 4 и т.д.
Сейчас в проекте сеть из несколько МЭ210-701. Нет связи со всеми модулями с UnitID, отличным от "1".
Модули подключаются и отключаются с ошибкой "socket keep-alive expired".
Поставил везде "1" - все данные пошли полетели в ПЛК.
Для чего этот параметр и как его можно использовать? И можно ли?
П.с.: Посмотрел в ранее сданных проектах - у меня почти везде эти номера уникальные, и вроде всё работает :D
Может это особенность МЭ210-701?
МихаилГл
02.10.2024, 12:19
Вопросы по настройке Modbus TCP Slave - что такое "Unit ID"?
Судя по даташиту настройки обмена по TCP для всех модулей ОВЕН значение должно быть "1".
Обычно этот параметр актуален для шлюзов, к которым подключено несколько modbus rtu устройств с разными адресами.
PS https://ipc2u.ru/catalog/promyshlennye-kommunikacii/shlyuzy-protokolov/shlyuzy-modbus/
Party3AH В обычном Modbus это будет адрес устройства.
А вот в Modbus TCP адресом является IP-адрес. А этот параметр практически не используется (но если устройство его поддерживает - можно использовать).
Для ОВЕНа он должен быть равен 1. Для других может быть даже равен 0.
Ранее я считал, что это какой-то условный уникальный номер для слейв-устройств
это же стандартный протокол, а не придуманный кем то для модуля, загляните ради интереса в спецификацию
https://modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf стр.23 абзац про Unit Identifier
kondor3000
04.10.2024, 17:12
Проблема по связи у нас с модулями Мх110. Почему-то пропадает на короткое время связь на модулях (работаем с шаблонами). Примерно раз в 30-40 сек или раз в 1 мин. Вытянули переменные по связи (Флаг ошибки модуля и в шаблоне была такая же переменная). Раньше не замечали сильно. А эта ошибка “дернится” на долю секунды и обратно (из FALES в TRUE и обратно). При чем вначале была проблема на старых модулях больше и редко на новых. Сейчас установили все новые модули и проблема осталась, даже кажется что стало на 10-15% чаще. Может кажется. Длина 1-метр на столе. Скорость всех устройств 9600, четность отсутствует, кол-во стоп бит 1, длина адреса (сетевого) 8, задержка ответа 2 мс, максимальный тайм-аут 10 с. Что смотреть? И в журнале тревог сообщения видим и время. Адреса модулей идут подряд: 16-17-18-19. Может тут нельзя так делать - рядом адреса? Рядом блок питания 220/24 В и PC.
С виртуальным контроллером работаете? Если с ним, это автопереподключение работает.
kondor3000
04.10.2024, 17:13
Проблема по связи у нас с модулями Мх110. Почему-то пропадает на короткое время связь на модулях (работаем с шаблонами). Примерно раз в 30-40 сек или раз в 1 мин. Вытянули переменные по связи (Флаг ошибки модуля и в шаблоне была такая же переменная). Раньше не замечали сильно. А эта ошибка “дернится” на долю секунды и обратно (из FALES в TRUE и обратно). При чем вначале была проблема на старых модулях больше и редко на новых. Сейчас установили все новые модули и проблема осталась, даже кажется что стало на 10-15% чаще. Может кажется. Длина 1-метр на столе. Скорость всех устройств 9600, четность отсутствует, кол-во стоп бит 1, длина адреса (сетевого) 8, задержка ответа 2 мс, максимальный тайм-аут 10 с. Что смотреть? И в журнале тревог сообщения видим и время. Адреса модулей идут подряд: 16-17-18-19. Может тут нельзя так делать - рядом адреса? Рядом блок питания 220/24 В и PC.
С виртуальным контроллером работаете? Если с ним, это автопереподключение работает.
Кстати шаблоны это зло, лучше читать регистр или массив регистров.
kondor3000
04.10.2024, 21:51
Нет все настоящее. А что значит с виртуальным? Что это дает?
Виртуальный контроллер CODESYS Control Win V3 используют для проверки проектов, если нет живого контроллера. Почти всё можно проверить,
даже обмен по Модбас и по ТСР.
В вирт. контроллере как раз происходит автопереподключение и пропадание связи на долю секунды. В живом проверить не могу, нечем.
vik_kulagin
07.10.2024, 14:46
Кто поможет? При установке CODESYS ошибка 79145
МихаилГл
07.10.2024, 15:25
Кто поможет? При установке CODESYS ошибка 79145
Устанавливаете напрямую из архива. Сначала разархивируйте. Тут где то ссылка есть на видео... Надо поискать
Kоллеги, Я почему то не могу создать тему, поэтому пишу здесь. У меня вопрос: я создал проект с мод бас TCP и хотел протестировать на мастер ОПС юниверсал модбас сервере. Чисто виртуально без плк. Я могу это сделать? Режим эмуляции включать ? или нужен плк? Я не могу подключиться. сделал все как в описании + видео смотрел. через модбас тоолс ОПС работает. проблема в соединении с CodeSYS.
kondor3000
07.10.2024, 17:51
Кто поможет? При установке CODESYS ошибка 79145
Вот видео, установите всё как там https://www.youtube.com/watch?v=3KcJWZEVXCg
kondor3000
07.10.2024, 17:55
Kоллеги, Я почему то не могу создать тему, поэтому пишу здесь. У меня вопрос: я создал проект с мод бас TCP и хотел протестировать на мастер ОПС юниверсал модбас сервере. Чисто виртуально без плк. Я могу это сделать? Режим эмуляции включать ? или нужен плк? Я не могу подключиться. сделал все как в описании + видео смотрел. через модбас тоолс ОПС работает. проблема в соединении с CodeSYS.
Проект для ПЛК Мастера надо запустить на виртуальном ПЛК WIN V3, IP мастера 127.0.0.2 порт 502 ,
ОРС сервер сделать слейвом дав ему IP 127.0.0.1, порт 502, слейв адрес 1. Или наоборот.
Тоже самое можно сделать на двух виртуальных ПЛК WIN V3
kondor3000
08.10.2024, 14:03
эмуляцию не включать?
Эмуляция, это без подключения к ПЛК, только проверка кода, обмен в эмуляции не работает.
Для работы с виртуальным контроллером, надо сделать копию проекта, поменять ваш контроллер на виртуальный Codesys Control WIN V3
соответствующей версии Codesys, например 17.3, удалить Таск Овен клауд.
Запусить вирт. контроллер 17.3 и подключиться к нему, загрузить код в него, сделать Старт программы и программы ОРС сервера. Смотреть обмен.
Если есть обмен, значки в дереве проекта около Изернет, Модбас Мастера и Модбас слейва будут зелёными.
ВладОвен
08.10.2024, 16:59
Привет.
Подскажите, какая последовательно выполнения действий?
1, потом 2? (показано красным)
Что-то складывается ощущение, что наоборот...
79230
Метод, который запускается во вкладке "Выполнить СТ-код", получает нулевые значения.
Стало быть: диалог закрылся, а значения еще не записались?
П.С. Все переменные - глобальные Retain.
kondor3000
08.10.2024, 17:18
Метод, который запускается во вкладке "Выполнить СТ-код", получает нулевые значения.
Стало быть: диалог закрылся, а значения еще не записались?
По моему можно даже не спрашивать было, закроется раньше, чем выполнится код.
79248 я создал только не знаю правильно ли.?
и еще вопрос. Я извиняюсь новичок. немного сложно разобраться есть DI и DO часть этих сигналов нужно отправить в AСУ(оператору) по адресам я сделал скрины по два сигнала
7925079249
создал TCP мастера+ТCPславе, в славе сделал два канала только какие не знаю то ли coil то ли disk. input для чтения BOOL и какой создавать для записи команд в DO . нужно чтоб оператор видел состояние и управлял включить выключил или квитировал аварии как к адресам привязывать ? я.прошу помочь79251
kondor3000
09.10.2024, 10:18
79248 я создал только не знаю правильно ли.?
Ну здесь почти правильно, только не тот добавили, надо без х64, просто CODESYS Control Win V3, у Овена версия 32 битная.
Надеюсь регистры добавили в слейв ? Чего вы боитесь то ? Запускайте и проверяйте. ОРС должен быть мастером тогда.
Вот видео посмотрите, как настраивать слейв и как мастер, у вас тоже самое, только контроллер витруальный, с адресом слейва 127.0.0.1
ПЛК слейв https://www.youtube.com/watch?v=Zq1G_Njl5cw&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=12
ПЛК мастер https://www.youtube.com/watch?v=mkpY3u7K8Kg&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=11
Проект для ПЛК Мастера надо запустить на виртуальном ПЛК WIN V3, IP мастера 127.0.0.2 порт 502 ,
ОРС сервер сделать слейвом дав ему IP 127.0.0.1, порт 502, слейв адрес 1. Или наоборот.
Тоже самое можно сделать на двух виртуальных ПЛК WIN V3
7927279273 коллеги, программа сканирует вирт.плк но не входит. где нужно ставить IP?
kondor3000
09.10.2024, 16:32
7927279273 коллеги, программа сканирует вирт.плк но не входит. где нужно ставить IP?
Это не IP, а имя и пароль.
Имя забейте Admin, пароль если не вводили, то введите и запомните. Можете попробовать без пароля сначала.
вопрос с паролем решил спасибо, но все равно почему то не могу войти. После ввода пароля 79274. Где то я ошибаюсь.
kondor3000
09.10.2024, 17:18
вопрос с паролем решил спасибо, но все равно почему то не могу войти. После ввода пароля. Где то я ошибаюсь.
После сканирования надо выбрать появившийся ПЛК в окне и нажать Ок. 79277
Если ничего не нашлось, запустить вирт. ПЛК снова.
Можно удалить пользователя Вирт контроллера, сбросить логин и пароль, если не можете подключиться
После сброса, лучше запомнить логин и пароль, особенно в 17.3 версии.
https://owen.ru/forum/showthread.php?t=28167&page=14#134
ура .подключился!!!!!!! спасибо огромное79278 .Завтра будем дальше работать.
коллеги есть 10 DO выходов с адресами 2001-2010 и 10 DI входов с адресами 3110-3119 все BOOL как их привязать по TCP Slave.переменные объявлены GVL в программе. создал интернет и славе устройство.79306
какой пример использовать. много показаны примеров Real И word а BOOL?
2)надо ли отдельно создавать POU для модбас или можно в основной.
3) основная программа на языке LD/FBD а все примеры в док на СFC. если я создам новый POU и загоню оба в TASK будет работать?
kondor3000
10.10.2024, 16:08
коллеги есть 10 DO выходов с адресами 2001-2010
и 10 DI входов с адресами 3110-3119 все BOOL как их привязать по TCP Slave.переменные объявлены в программе. создал интернет и славе устройство.
Булевые переменные проще читать, записывать регистрами, если это возможно и потом распаковывать, упаковывать в маски.
Либо вы вручную привязываете все переменные в соотнесение переменных в слейве.
Либо объявляете массив равный всем переменным и один раз его втыкаете туда.
Выше со скринами все ответы есть. Станица 769.
2001 бит это 125 регистр биты с 1 по 10, записать маску из 16 бит в 125 регистр
3110 бит это 194 регистр биты с 6 по 15, читать 194 регистр 16 бит и брать нужные.
Да ещё в 17.3 версии байты переставлены, так что 6 бит попадает на 14, 7 - на 15, 8 - на 0, 9 - на 1 и т. д. Сами увидите.
Настройка 79315 Соотнесение 79316 ОРС сервер 79317Нужные биты работают.
2) Лучше создать.
3) Программу лучше писать на нормальных языках, CFC или ST. Вам по крайней мере подскажут, создать для неё Таск и вызвать её.
Язык ST, чем и хорош, скопировали текст и вставили в новую программу, чуть подправив если надо.
Булевые переменные проще читать, записывать регистрами, если это возможно и потом распаковывать, упаковывать в маски.
Либо вы вручную привязываете все переменные в соотнесение переменных в слейве.
Либо объявляете массив равный всем переменным и один раз его втыкаете туда.
Выше со скринами все ответы есть. Станица 769.
2001 бит это 125 регистр биты с 1 по 10, записать маску из 16 бит в 125 регистр
3110 бит это 194 регистр биты с 6 по 15, читать 194 регистр 16 бит и брать нужные.
Да ещё в 17.3 версии байты переставлены, так что 6 бит попадает на 14, 7 - на 15, 8 - на 0, 9 - на 1 и т. д. Сами увидите.
Настройка 79315 Соотнесение 79316 ОРС сервер 79317Нужные биты работают.
2) Лучше создать.
3) Программу лучше писать на нормальных языках, CFC или ST. Вам по крайней мере подскажут, создать для неё Таск и вызвать её.
Язык ST, чем и хорош, скопировали текст и вставили в новую программу, чуть подправив если надо.
79321 я правильно понял если записывать в 125 или 194 регистр то у меня их всего 70. как их считать нумерация регистров с 2000 тогда дискр входы 3100? и галочка нужна?
kondor3000
11.10.2024, 10:02
79321 я правильно понял если записывать в 125 или 194 регистр то у меня их всего 70. как их считать нумерация регистров с 2000 тогда дискр входы 3100? и галочка нужна?
Зачем я вам скрины то выложил ? Делайте как на скрине, всё будет работать. Читаются и 125 регистр и 194.
Все галки убрать.
Вы читаете массив, начиная со 125 [0] регистра по 194 [69] , всего 70 штук,
биты в [0] регистре c 2000 по 2015,
в [69] регистре с 3104 по 3119
Где синяя буква М, у вас адреса повторяются читайте тут
https://owen.ru/forum/showthread.php?t=28167&page=6#52
Добрый день.
Не работает примитив «Управление вращением» из стандартной группы элементов.
В свойствах прописал переменную, числовой формат, диапазон. Что еще требуется?
Зачем я вам скрины то выложил ? Делайте как на скрине, всё будет работать. Читаются и 125 регистр и 194.
Все галки убрать.
Вы читаете массив, начиная со 125 [0] регистра по 194 [69] , всего 70 штук,
биты в [0] регистре c 2000 по 2015,
в [69] регистре с 3104 по 3119
Где синяя буква М, у вас адреса повторяются читайте тут
https://owen.ru/forum/showthread.php?t=28167&page=6#52
793257932679327
все сделал , а в самой программе что писать?
Зачем я вам скрины то выложил ? Делайте как на скрине, всё будет работать. Читаются и 125 регистр и 194.
Все галки убрать.
Вы читаете массив, начиная со 125 [0] регистра по 194 [69] , всего 70 штук,
биты в [0] регистре c 2000 по 2015,
в [69] регистре с 3104 по 3119
Где синяя буква М, у вас адреса повторяются читайте тут
https://owen.ru/forum/showthread.php?t=28167&page=6#52
793257932679327
все сделал , а в самой программе что писать?
sssssaaaaabbbbb
11.10.2024, 13:21
Здравствуйте коллеги, подскажите пожалуйста, почему такие ошибки могут быть? 79328 79330 посмотрел на форуме, они решены. но не описаны, как решены. Все решено надо сделать так: Нажать на эти кнопки 79331
Зачем я вам скрины то выложил ? Делайте как на скрине, всё будет работать. Читаются и 125 регистр и 194.
Все галки убрать.
Вы читаете массив, начиная со 125 [0] регистра по 194 [69] , всего 70 штук,
биты в [0] регистре c 2000 по 2015,
в [69] регистре с 3104 по 3119
Где синяя буква М, у вас адреса повторяются читайте тут
https://owen.ru/forum/showthread.php?t=28167&page=6#52
793257932679327
все сделал , а в самой программе что писать?
kondor3000
11.10.2024, 13:42
793257932679327
все сделал , а в самой программе что писать?
Надо сделать очистить всё, компилировать всё и проверить нет ли ошибок.
Можете пока ничего не писать, для того чтобы проверить связь, достаточно в регистр записать число, в ОРС сервере его смотреть и наоборот.
Вы ОРС сервер настроили?
Если вы совсем ничего не знаете, то посмотрите хотя бы обучающие видео по ПЛК210. Хотя бы первые 11 штук.
https://www.youtube.com/watch?v=tm7a98Ojp7g&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=3
9 и 11 видео прямо для вас
https://www.youtube.com/watch?v=M0W7-4Y5oM4&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=10
https://www.youtube.com/watch?v=Zq1G_Njl5cw&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=12
Надо сделать очистить всё, компилировать всё и проверить нет ли ошибок.
Можете пока ничего не писать, для того чтобы проверить связь, достаточно в регистр записать число, в ОРС сервере его смотреть и наоборот.
Вы ОРС сервер настроили?
Если вы совсем ничего не знаете, то посмотрите хотя бы обучающие видео по ПЛК210. Хотя бы первые 11 штук.
https://www.youtube.com/watch?v=tm7a98Ojp7g&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=3
9 и 11 видео прямо для вас
https://www.youtube.com/watch?v=M0W7-4Y5oM4&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=107933579336
https://www.youtube.com/watch?v=Zq1G_Njl5cw&list=PL2EcVEe6E9SCzVhL_BCDnaUJROikKheVx&index=12
у меня мастер ОРС юниверсал модбас сервер. по одному сигналу без номеров я настроил и видел и получал а вот по вашему методу настроить не смог 793327933379334 видео смотрел. ВЫ здорово помогаете7933579336
kondor3000
11.10.2024, 14:44
у меня мастер ОРС юниверсал модбас сервер. по одному сигналу без номеров я настроил и видел и получал а вот по вашему методу настроить не смог
У вас связи нет, слейв ПЛК должен быть зелёным. Вы ОРС сервер случайно слейвом не сделали? Он мастером должен быть. 79338
Я же вам написал, что биты не совпадают, вы для начала прочитайте и запишите 125 регистр и 194 регистр. Инпут регистры чтение с ПЛК,
Ходлинг регистры записть в ПЛК.
Биты позже, там 1 бит попадает в 9, а 9 в первый.
У вас связи нет, слейв ПЛК должен быть зелёным. Вы ОРС сервер случайно слейвом не сделали? Он мастером должен быть. 79338
Я же вам написал, что биты не совпадают, вы для начала прочитайте и запишите 125 регистр и 194 регистр. Инпут регистры чтение с ПЛК,
Ходлинг регистры записть в ПЛК.
Биты позже, там 1 бит попадает в 9, а 9 в первый.
нет он мастер79341
вот связь прошла спасибо.что дальше79342
kondor3000
11.10.2024, 16:28
вот связь прошла спасибо.что дальше
Дальше в программе так 79343 в ОРС сервере добавляете биты 79344 Работа 79347
Биты упаковываются и распаковываются через точку,
например Wrate[69].15 - это запись 69 регистр 15 бит, после 15 бита пойдёт 0 бит ( Wrate[69].0) и т. д.
Как заработает, регистры в ОРС можете удалить, оставить только биты.
Если вы в программе указали абсолютный адрес, типа AT%IW0, то в соотнесении добавлять не надо 79349Удалите имена массивов
read AT%IW0 : ARRAY [0..69] OF WORD;// массив для чтения WORD
Wrate AT%QW0 : ARRAY [0..69] OF WORD; // массив для записи WORD
Дальше в программе так 79343 в ОРС сервере добавляете биты 79344 Работа 79347
Биты упаковываются и распаковываются через точку,
например Wrate[69].15 - это запись 69 регистр 15 бит, после 15 бита пойдёт 0 бит ( Wrate[69].0) и т. д.
Как заработает, регистры в ОРС можете удалить, оставить только биты.
Если вы в программе указали абсолютный адрес, типа AT%IW0, то в соотнесении добавлять не надо 79349Удалите имена массивов
read AT%IW0 : ARRAY [0..69] OF WORD;// массив для чтения WORD
Wrate AT%QW0 : ARRAY [0..69] OF WORD; // массив для записи WORD
доброе утро! я добавил вроде заработало. можно вопрос на счет битов вы написали 6 бит -14,7бит-15,8 бит-0, 9-бит на 1, 10 бит -2,11 бит-3 , 12 бит 4, 13 бит 5, почему так? это где то написано?
и еще вопрос получается , что в диапазоне с 2000 до 3120 будут только БООЛ значения , а если нужно будет в промежутке добавить ворд или реал?
kondor3000
14.10.2024, 08:49
доброе утро! я добавил вроде заработало. можно вопрос на счет битов вы написали 6 бит -14,7бит-15,8 бит-0, 9-бит на 1, 10 бит -2,11 бит-3 , 12 бит 4, 13 бит 5, почему так?
Переставлены байты в 16 и 17 версиях Codesys. 0 бит попадает в 8 бит, а 8 бит в 0 бит. 79377
Можно в регистре переставить байты наоборот, тогда биты будут соответствовать номерам.
Например написать функцию и вставить её между принятым регистром и новой переменной типа Маск и биты извлекать уже из маски. Биты будут уже на своих местах.
FUNCTION SW_BYTE : WORD // Перестановка байт
VAR_INPUT
In:WORD;
END_VAR
_____________________________
SW_BYTE := ROL(In, 8);
Только имейте ввиду, 194 регистр начинается с 3104 бита (194*16=3104 - 0 бит в 194 рег.), 3110 бит - в 194 регистре 6 по счёту,
переставите байты, будет он не 14 а 6, вам легче от этого?
Со 125 регистром проще, (125*16=2000 - 0 бит в 125 регистре), 2001 бит должен быть 1 битом в 125 регистре,
после перестановки байт, вместо 9 он станет 1.
Переставлены байты в 16 и 17 версиях Codesys. 0 бит попадает в 8 бит, а 8 бит в 0 бит. 79377
Можно в регистре переставить байты наоборот, тогда биты будут соответствовать номерам.
Например написать функцию и вставить её между принятым регистром и новой переменной типа Маск и биты извлекать уже из маски. Биты будут уже на своих местах.
FUNCTION SW_BYTE : WORD // Перестановка байт
VAR_INPUT
In:WORD;
END_VAR
_____________________________
SW_BYTE := ROL(In, 8);
Только имейте ввиду, 194 регистр начинается с 3104 бита (194*16=3104 - 0 бит в 194 рег.), 3110 бит - в 194 регистре 6 по счёту,
переставите байты, будет он не 14 а 6, вам легче от этого?
Со 125 регистром проще, (125*16=2000 - 0 бит в 125 регистре), 2001 бит должен быть 1 битом в 125 регистре,
после перестановки байт, вместо 9 он станет 1.
скажите а как разделить области ну чтоб не все 70 регистров были Bool и можно было в промежутках добавлять ворд или реал
kondor3000
14.10.2024, 13:55
Поясните момент про чтение входов из конфигуратора. Это как?
И еще синтаксис или алгоритм про замер раз в 2-5 секунд.
Подключите модуль с датчиками к конфигуратору и включите чтение входов онлайн. Поэкспериментируйте с фильтрами.
Модуль и так читается раз в 0.6 сек на 1 канал , сделайте вывод раз в 2 сек. в программе или попробуйте фильтр 2-5 сек.
kondor3000
14.10.2024, 13:57
скажите а как разделить области ну чтоб не все 70 регистров были Bool и можно было в промежутках добавлять ворд или реал
Вы похоже так и не поняли смысл, у вас передаётся по факту только 125 и 194 регистр, остальные со 126 по 193 пустые.
Что вы в них положите, то и будет передано. WORD это целое число, можно передать число, а можно биты, если упакуете их.
Real просто занимает 2 WORD и их надо правильно расставить, если получили не корректное число, просто меняете регистры местами.79389
Вы похоже так и не поняли смысл, у вас передаётся по факту только 125 и 194 регистр, остальные со 126 по 193 пустые.
Что вы в них положите, то и будет передано. WORD это целое число, можно передать число, а можно биты, если упакуете их.
Real просто занимает 2 WORD и их надо правильно расставить, если получили не корректное число, просто меняете регистры местами.
теперь понял. спасибо.
теперь понял. спасибо.
Добрый вечер .Хочу сказать огромное спасибо. я немного с вашей помощью разобрался .Правда есть еще вопросы:
1) нужны сигналы неисправность плк и пропадание питания ? где их взять?
3) программа работает циклично. ничего не нужно прописывать для этого( и по работе самой программы и по передаче по модбасс?)
kondor3000
14.10.2024, 17:55
Добрый вечер .Хочу сказать огромное спасибо. я немного с вашей помощью разобрался .Правда есть еще вопросы:
1) нужны сигналы неисправность плк и пропадание питания ? где их взять?
3) программа работает циклично. ничего не нужно прописывать для этого( и по работе самой программы и по передаче по модбасс?)
1) Это ещё зачем? Если ПЛК сдохнет или пропадёт питание, то кто по вашему об этом сообщит?
Если например Скада перестанет читать из слейва ПЛК, вы можете только отследить изменения переменных и если они не меняются, вывести окно.
Для этого можно использовать любой свободный, постоянно переключаемый ПЛК бит.
3) Программа в ПЛК всегда работает по циклу, прописывать больше ничего не надо, кроме того, что уже есть.
DOMOSED Надо. Статью я ещё не написал ;)
И линию связи вести специальным экранированным кабелем, а не просто свитыми проводами.
Экран не разрывать, а заземлять с одного конца. Про кабель статья есть: https://cs-cs.net/cables-interface-rs-485-dmx, там показан пример монтажа экрана кабеля.
Кабель КОПСЭС - со слюдой подошел бы?
Евгений Кислов
15.10.2024, 09:57
Кабель КОПСЭС - со слюдой подошел бы?
Добрый день. Поскольку у вас регулярно появляются новые вопросы (в т.ч. не связанные с CODESYS V3.5) - перенес их в отдельную тему:
https://owen.ru/forum/showthread.php?t=40348
Пожалуйста, продолжите их обсуждение исключительно там.
1) Это ещё зачем? Если ПЛК сдохнет или пропадёт питание, то кто по вашему об этом сообщит?
Если например Скада перестанет читать из слейва ПЛК, вы можете только отследить изменения переменных и если они не меняются, вывести окно.
Для этого можно использовать любой свободный, постоянно переключаемый ПЛК бит.
3) Программа в ПЛК всегда работает по циклу, прописывать больше ничего не надо, кроме того, что уже есть.
добрый день. у меня опять проблема. помогите пожалуйста . вы сделали я повторил пакетом передачу воол переменных. мои DI передаются все нормально. а от Сервера они не могут отправлять сигналы на DO пакетом у них есть функции 05 но нет 15. как мне сделать чтоб прием DO(сигналы управления ) были отправлены по одному по 5 функции.но с адресами 2000-2010.у меня не работает .ОПС сервер функцию сам подставляет.а в modbus pool видно хорошо .там работает если я ставлю адреса 2000 ф 15 .а вот ф 5 не идет79428вот тут побитовый доступ .как это реализовать?
Доброго дня!
А где можно скачать CODESYS V3.5 SP10 Patch 2?
Дело в том что проект сохранили, но в новой версии пишет ошибку:
79430
Или есть способ это решить как то по другому?
Для чего это нужно:
Был СПК207, сломался. Отремонтировали заменой мат.платы. Нужно залить проект через Flash USB. Где-то заказчик откопал старые файлы проекта в формате *.project.
Я так понял нужно этот проект скомпилировать под новую версию прошивки(СПК207) сохранить и экспортировать на Flash USB.
Евгений Кислов
16.10.2024, 08:00
Доброго дня!
А где можно скачать CODESYS V3.5 SP10 Patch 2?
Дело в том что проект сохранили, но в новой версии пишет ошибку:
79430
Или есть способ это решить как то по другому?
Для чего это нужно:
Был СПК207, сломался. Отремонтировали заменой мат.платы. Нужно залить проект через Flash USB. Где-то заказчик откопал старые файлы проекта в формате *.project.
Я так понял нужно этот проект скомпилировать под новую версию прошивки(СПК207) сохранить и экспортировать на Flash USB.
Добрый день.
Вот здесь можно скачать версию V3.5 SP10 Patch 5.
Она подойдет для открытия вашего проекта.
http://files.kb-agava.ru/s/Tgts7MYJzeC9wYD?path=%2F%D0%A1%D1%80%D0%B5%D0%B4%D 0%B0%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC% D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1 %8F%20CODESYS%2F3.5.10.x
kondor3000
16.10.2024, 08:04
добрый день. у меня опять проблема. помогите пожалуйста . вы сделали я повторил пакетом передачу воол переменных. мои DI передаются все нормально. а от Сервера они не могут отправлять сигналы на DO пакетом у них есть функции 05 но нет 15. как мне сделать чтоб прием DO(сигналы управления ) были отправлены по одному по 5 функции.но с адресами 2000-2010.у меня не работает .ОПС сервер функцию сам подставляет.а в modbus pool видно хорошо .там работает если я ставлю адреса 2000 ф 15 .а вот ф 5 не идет79428вот тут побитовый доступ .как это реализовать?
Проверил другим, Овен ОРС сервером, запись бит из ОПС в ПЛК работает 15 функцией и с 5 функцией, запись всех 2000-2010 и 3110 бит.
Всё нормально.
ВладОвен
17.10.2024, 10:03
Привет.
Подскажите, есть ли способ преобразовать REAL_TO_STRING, но с нужным количеством символов после запятой?
Вот мне нужно получить в строке 4,56, а я получаю 4,5678902.
Спасибо.
Евгений Кислов
17.10.2024, 10:06
Привет.
Подскажите, есть ли способ преобразовать REAL_TO_STRING, но с нужным количеством символов после запятой?
Вот мне нужно получить в строке 4,56, а я получаю 4,5678902.
Спасибо.
Добрый день.
См. функцию REAL_TO_STRING_FORMAT в библиотеке OwenStringUtils.
Привет.
Подскажите, есть ли способ преобразовать REAL_TO_STRING, но с нужным количеством символов после запятой?
Вот мне нужно получить в строке 4,56, а я получаю 4,5678902.
Спасибо.
можно реал округлить до двух знаков, можно строку обрезать, способов много
ЭдМахалыч
17.10.2024, 16:20
Все доброго дня!
Может кто знает, есть ли настройка, чтоб при загрузке CDS v3 дерево проекта не разворачивалось.
Просто проект разросся и каждый раз закрывать мульон веток (папок) утомило, а они при загрузке развернуты ВСЕ (!), от корня к самым нижним веткам.
Уже который день ищу - не смог ;(
Все доброго дня!
Может кто знает, есть ли настройка, чтоб при загрузке CDS v3 дерево проекта не разворачивалось.
Просто проект разросся и каждый раз закрывать мульон веток (папок) утомило, а они при загрузке развернуты ВСЕ (!), от корня к самым нижним веткам.
Уже который день ищу - не смог ;(
вот ответ бездушной машины
Answer | Phind Instant Model
Настройка для сворачивания веток дерева проекта при запуске среды
Для того чтобы автоматически свернуть все ветки дерева проекта при запуске среды CoDeSys 3, вам нужно использовать команду "Collapse All Folds" (Свернуть все разделы).
Ключевые моменты:
Эта команда позволяет одновременно свернуть все раскрытые кодовые сегменты (минус-символ у корневого узла) в текстовом редакторе или результатах поиска в списке ссылок.
В результате отображается только самый высокий уровень кода или только корневые узлы поисковых мест.
Как использовать команду:
Убедитесь, что активен текстовый редактор и отключена отступка в диалоговом окне "Опции", категория "Текстовый редактор".
Выберите один из способов вызова команды:
В текстовых редакторах: Edit → Advanced (Редактировать → Продвинутый)
В контекстном меню
В списке ссылок поиска: выберите контекстное меню
Дополнительная информация:
Эта функция особенно полезна при работе с большими проектами, когда вы хотите быстро получить общее представление о структуре кода без необходимости просматривать каждый детальный элемент сразу же после открытия проекта 2.
Помните, что эта настройка относится к поведению среды при запуске, а не к сохранению состояния проекта. Если вы хотите сохранить это состояние для последующих сеансов работы, вам может потребоваться настроить соответствующие параметры в объекте Project Settings (Настройки проекта)
ЭдМахалыч
17.10.2024, 16:28
Привет.
Подскажите, есть ли способ преобразовать REAL_TO_STRING, но с нужным количеством символов после запятой?
Вот мне нужно получить в строке 4,56, а я получаю 4,5678902.
Спасибо.
При отображении (в текстовом поле -> Текст) задать формат %.2f
Пример:
val : REAL := 42.8623
Текстовое поле -> Текст записать формат Температура %.2f C°
Вывод: Температура 42.86 C°
ЭдМахалыч
17.10.2024, 16:58
вот ответ бездушной машины
Не получилось...
Это вариант для сворачивания областей видимости в текстовом редакторе (коде ST).
А для дерева проекта (вкладка Устройства) не работает
Евгений Кислов
17.10.2024, 17:16
Не получилось...
Это вариант для сворачивания областей видимость в текстовом редакторе (коде ST).
А для дерева проекта (вкладка Устройства) не работает
Выделите в дереве проекта нужный узел (например, Device или Application), а потом используйте на Numpad-блоке клавиатуры клавишу "-" (чтобы свернуть все вложенные узлы) или "плюс" (чтобы развернуть).
вот ответ бездушной машины
Следующий "ответ бездушной машины" (без учета контекста вопроса) будет награжден отправлением в бан на пару-тройку дней.
ЭдМахалыч
17.10.2024, 17:27
Выделите в дереве проекта нужный узел (например, Device или Application), а потом используйте на Numpad-блоке клавиатуры клавишу "-" (чтобы свернуть все вложенные узлы) или "плюс" (чтобы развернуть).
Спасибо.
Так действительно удобней!
Если бы была бы возможность настройки (загрузка с свернутым деревом проекта, например)...
Евгений Кислов
17.10.2024, 17:31
Спасибо.
Так действительно удобней!
Если бы была бы возможность настройки (загрузка с свернутым деревом проекта, например)...
К сожалению, такой настройки нет.
sssssaaaaabbbbb
18.10.2024, 10:50
Здравствуйте, подскажите пожвлуйста, почему такое сообщение выскакивает 79489 ? какое то исключение в элементе визуализации наверное, но найти его не могу79490
Евгений Кислов
18.10.2024, 10:51
Здравствуйте, подскажите пожвлуйста, почему такое сообщение выскакивает 79489 ? какое то исключение в элементе визуализации наверное, но найти его не могу
Добрый день.
Причины могут быть совершенно разными.
Это сообщение позникает при каждой загрузке проекта?
Если закомментировать в проекте весь ваш код - оно появится?
sssssaaaaabbbbb
18.10.2024, 11:12
Добрый день.
Причины могут быть совершенно разными.
Это сообщение позникает при каждой загрузке проекта?
Если закомментировать в проекте весь ваш код - оно появится?
Просто откатился, переделал, все заработало! Спасибо! Но ошибку так и не нашел.
теперь понял. спасибо.
794917949279493
коллеги один вопрос я проверяя связь фиксирую точки. потом когда снимаю они не снимаются это нормально? не будет зависать при работе плк?
794917949279493
коллеги один вопрос я проверяя связь фиксирую точки. потом когда снимаю они не снимаются это нормально? не будет зависать при работе плк?
Если сам ПЛК не пишет в эти переменные, то почему они должны поменять своё состояние после снятия фиксации?
ВладОвен
18.10.2024, 13:49
Привет.
Я пытаюсь сформировать структуру и передать ее на удаленный сервер.
Сервер принимает в структуре заранее подготовленные названия полей.
Среди этих названий есть "log" и "type".
Но codesys не позволяет мне их декларировать, потому что у него эти названия тоже являются занятыми.
79494
Есть ли способ освободить их в среде codesys ?
Я не могу что-либо изменить в коде удаленного сервера.
Евгений Кислов
18.10.2024, 13:52
Привет.
Я пытаюсь сформировать структуру и передать ее на удаленный сервер.
Сервер принимает в структуре заранее подготовленные названия полей.
Среди этих названий есть "log" и "type".
Но codesys не позволяет мне их декларировать, потому что у него эти названия тоже являются занятыми.
79494
Есть ли способ освободить их в среде codesys ?
Я не могу что-либо изменить в коде удаленного сервера.
Добрый день.
Какое отношение имя экземпляра структуры в CODESYS имеет к коду сервера?
ВладОвен
18.10.2024, 13:53
При отображении (в текстовом поле -> Текст) задать формат %.2f
Пример:
val : REAL := 42.8623
Текстовое поле -> Текст записать формат Температура %.2f C°
Вывод: Температура 42.86 C°
Да. Спасибо. Это работает для визуализации.
Но когда речь идет о сохранении дробных величин в файл или при отправке их по сети, то такой метод не подходит.
То решение, которое предлагал Евгений сработало нормально. Оно самое простое и достаточное.
Привет.
Я пытаюсь сформировать структуру и передать ее на удаленный сервер.
Сервер принимает в структуре заранее подготовленные названия полей.
Среди этих названий есть "log" и "type"..
нижнее подчеркивание добавте и не запутаетесь и проблема исчезнет
Коллеги столкнулся с непонятным для меня поведением. Почему на LD вторая цепь сбрасывает выход Q?. Проверил на ST - поведение правильное
79502
79503
kondor3000
19.10.2024, 18:17
Коллеги столкнулся с непонятным для меня поведением. Почему а LD вторая цепь сбрасывает выход Q?. Проверил на ST - поведение правильное
А что не понятно? На LD переменную перезаписывает последняя строка, условия никакого нет. Таймер просто выключен, а на выходе FALSE.
Надо не входом управлять, а поставить MOVE с EN/ ENO и то не факт, что правильно отработает.
На ST не перезаписывает, так как не выполняется 2 условие, то есть схемы не равнозначные.
как нет условия? флаг xAlwaysOFF равен 0. Цепь не проходная
перед таймером стоит условие. и оно не тру. так что никакой логики нет.
kondor3000
19.10.2024, 19:10
перед таймером стоит условие. и оно не тру. так что никакой логики нет.
Условие это MOVE с EN/ ENO, а у вас на выходе таймера, всё равно FALSE.
Пофиг, что он выключен.
не убедили. так же условием является флаг равный 0. где можно прочитать информацию на которую вы опираетесь?
МихаилГл
19.10.2024, 19:31
не убедили. так же условием является флаг равный 0. где можно прочитать информацию на которую вы опираетесь?
Вынесите q:=... за условие if и получите тоже что и в LD. Хотя и такой текст не будет равноценен вроде.
МихаилГл
19.10.2024, 19:40
Во вторых первой строчке ld будет соответствовать код на st: q0:=alwaON, а не то что вы написали.
Вот так должен выглядеть ваш код на st... Пишу с телефона, поэтому буду по памяти:
Q0:= allON
TP(in:= allOFF, et:=t#1000)
Q0:=TP.Q
А иф...зен это уже триггеры... Коих в лд у вас не наблюдается.
пока я не проникся. СТ я для проверки был. как будет правильно в ЛД?
а xAlwaysOFF разве не условие для активации таймера?
79504
МихаилГл
19.10.2024, 20:14
пока я не проникся. СТ я для проверки был. как будет правильно в ЛД?
Если у вас правильно получается в СТ, то пишите на нем. Это будет удобнее и компактнее. На ЛД стоит переходить в крайних случаях. В нем тяжело организовывать циклы и прочее, но удобно релейную схему перенести.
Не смогу с телефона показать правильный код, но если вы хотите то, что написали на СТ сами в вопросе, то это как минимум ещё РС триггеры надо рисовать и прочие элементы.
МихаилГл
19.10.2024, 20:17
а xAlwaysOFF разве не условие для активации таймера?
79504
Условие, но вы присваиваете выходу Q0 сразу выход таймера, без всяких if...then...else, а сразу.
да, присваиваю. но ведь контакт xAlwaysOFF закрыт. и значит присвоение не должно произойти
МихаилГл
19.10.2024, 20:28
да, присваиваю. но ведь контакт xAlwaysOFF закрыт. и значит присвоение не должно произойти
Нет, вы не правы, присвоение от этого не зависит. Это аналог релейной схемы, т.е. это катушка реле, и питание на неё или едет, или не идёт. Нет сигнала, реле не запитано. Вот на нем и 0. Не сравнивайте эти языки таким способом, это немного не так работает.
PS на языке LD очень нежелательно рисовать несколько выходов типа вашего Q0, он в схеме должен быть один. Вот поэтому вы и запутались. Используя несколько выходов для на самом деле одного выхода вы не найдете концов и ошибок программы. Допустимо ещё несколько set и reset для выхода втыкать, но просто выход должен быть один. И он всегда примет самое последнее значение в коде на LD если их там несколько.
МихаилГл
19.10.2024, 21:02
Коллеги столкнулся с непонятным для меня поведением. Почему на LD вторая цепь сбрасывает выход Q?. Проверил на ST - поведение правильное
79502
79503
Я тут поразмышлял... Замените Q0 с простого выхода на выход типа S для 2х ветвей в LD. Т.е. set... Только где нибудь ниже не забудьте придумать как сделать reset, по какому условию его обнулить. Вроде должно заработать так как вам надо.
Это аналог релейной схемы, т.е. это катушка реле, и питание на неё или едет, или не идёт. Нет сигнала, реле не запитано. Вот на нем и 0. Не сравнивайте эти языки таким способом, это немного не так работает.
вот теперь понятно. спасибо
kondor3000
19.10.2024, 21:24
Ерунды наговорили, вот скрин с MOVE и всё работает правильно, вообще без подачи питания в обоих шагах 79510
И сбросится Q0, только после отработки таймера.
Обмотка Q0 это такая же переменная, как и другие.
не рабочий вариант. так как если ОФФ взвести, то Q0 не взведеться
Здравствуйте.
У меня в кодесис 3.5 при двойном нажатии лкм на девайс появляется окно device такого вида
79514
вместо такого окна
79515
Соответственно мне не доступна вкладка Устройство, а мне надо изменить политику соединения.
Что я делаю не так?
МихаилГл
20.10.2024, 07:44
Ерунды наговорили, вот скрин с MOVE...
Обмотка Q0 это такая же переменная, как и другие.
У ТС таймер также взводит Q0 а вы false послали, надо true.
Почему ерунды? Ваш алгоритм как раз более приближен к тому ST, что требовалось. Как я и говорил, нужны были триггеры, что вы и ввели. А также бит выхода set. Но только сброс ТС не описал на ST. Ну а вы на off сброс самовольно без тз прописали.
не рабочий вариант. так как если ОФФ взвести, то Q0 не взведеться
Там надо вместо false true прописать. Ну и нужен сброс будет.
как то так
79511
AND можете убрать и первую линию к нему подходящую, зачем лишний элемент для "и" с линией, на которой всегда есть сигнал.
Но это код на ST будет примерно такой:
TP(in:x1, pt:t#1000ms)
Q0:=x0 or TP.Q
Да, действительно "AND" лишний. Кодесис "AND" автоматом вставил когда выходы соединял.
Евгений Кислов
21.10.2024, 06:15
Здравствуйте.
У меня в кодесис 3.5 при двойном нажатии лкм на девайс появляется окно device такого вида
79514
вместо такого окна
79515
Соответственно мне не доступна вкладка Устройство, а мне надо изменить политику соединения.
Что я делаю не так?
Добрый день.
Сделайте так: Инструменты - Опции - Редакор устройств - Страница соединения - Упрощенный режим
79525
ВладОвен
21.10.2024, 14:03
Привет.
1. Создал экземпляр функционального блока IPv4Address из библиотеки Net Base Services Library (NBS):
myIPAddress : NBS.IPv4Address; // ФБ формирования IP-адреса
2. Использую метод SetInitialValue этого функционального блока:
79536
3. На вход метода подаю строковую константу sServerAdress:
VAR CONSTANT
sServerAdress : STRING(15) := 'аа.103.183.98';
END_VAR
4. Вход этого метода - это реально вход :)
79537
5. Но получаю предупреждение:
C0389: Для параметра VAR_IN_OUT 'ipAddress' из 'SetInitialValue' в качестве входа требуется переменная с доступом записи. В последующих версиях это будет ошибкой компиляции!
ЧЯДНТ ?
Привет.
1. Создал экземпляр функционального блока IPv4Address из библиотеки Net Base Services Library (NBS):
myIPAddress : NBS.IPv4Address; // ФБ формирования IP-адреса
2. Использую метод SetInitialValue этого функционального блока:
79536
3. На вход метода подаю строковую константу sServerAdress:
VAR CONSTANT
sServerAdress : STRING(15) := 'аа.103.183.98';
END_VAR
4. Вход этого метода - это реально вход :)
79537
5. Но получаю предупреждение:
C0389: Для параметра VAR_IN_OUT 'ipAddress' из 'SetInitialValue' в качестве входа требуется переменная с доступом записи. В последующих версиях это будет ошибкой компиляции!
ЧЯДНТ ?
Довольно понятно написано в ошибке - для этого входа (который не просто VAR_INPUT, а VAR_IN_OUT) требуется переменная с возможностью записи
ВладОвен
21.10.2024, 20:02
Довольно понятно написано в ошибке - для этого входа (который не просто VAR_INPUT, а VAR_IN_OUT) требуется переменная с возможностью записи
Но ведь это вход. Как узнать, что он VAR_IN_OUT ?
Николай Суриков
21.10.2024, 21:33
Но ведь это вход. Как узнать, что он VAR_IN_OUT ?
Написано же REFERENCE TO STRING
https://www.youtube.com/watch?v=TWj0o5JgI-A
Но ведь это вход. Как узнать, что он VAR_IN_OUT ? К сожалению, только или из документации или, если вытащить этот блок на CFC.
На CFC VAR_IN_OUT показывается со стороны входов, но с двунаправленной стрелочкой "<->".
Ну или по ошибке компилятора.
Переставлены байты в 16 и 17 версиях Codesys. 0 бит попадает в 8 бит, а 8 бит в 0 бит. 79377
Можно в регистре переставить байты наоборот, тогда биты будут соответствовать номерам.
Например написать функцию и вставить её между принятым регистром и новой переменной типа Маск и биты извлекать уже из маски. Биты будут уже на своих местах.
FUNCTION SW_BYTE : WORD // Перестановка байт
VAR_INPUT
In:WORD;
END_VAR
_____________________________
SW_BYTE := ROL(In, 8);
Только имейте ввиду, 194 регистр начинается с 3104 бита (194*16=3104 - 0 бит в 194 рег.), 3110 бит - в 194 регистре 6 по счёту,
переставите байты, будет он не 14 а 6, вам легче от этого?
Со 125 регистром проще, (125*16=2000 - 0 бит в 125 регистре), 2001 бит должен быть 1 битом в 125 регистре,
после перестановки байт, вместо 9 он станет 1.
коллеги ,здравствуйте. у меня вопрос мне нужно на выходе с номероми1331-1334 соотнести real сигнал. в модбас слайве там тип ворд. я сделал объединение (я могу в объединение загнать все 4 переменные? я сделал 2для примера) объявил название объединения на 3ем скрине добавил точку в программу.на странице конф. задал начальный адрес 1331 83 регистр правильно сделал? а что дальше? сомнения в соотношении каналов7955179552795537955479555
kondor3000
22.10.2024, 14:23
коллеги ,здравствуйте. у меня вопрос мне нужно на выходе с номероми1331-1334 соотнести real сигнал. в модбас слайве там тип ворд. я сделал объединение (я могу в объединение загнать все 4 переменные? я сделал 2для примера) объявил название объединения на 3ем скрине добавил точку в программу.на странице конф. задал начальный адрес 1331 83 регистр правильно сделал? а что дальше? сомнения в соотношении каналов
Вам что 68 пустых регистров не хватило? Зачем 100 сделали?
Посчитали не правильно 83*16=1328 бит - начальный
Функция 2WORD_TO_REAL используется сама по себе, без объединения UNION. Если делаете объединение, то функция не нужна.
Соотнесение тоже не правильно.
REAL можно передать вообще без ничего, так же как вы передаёте 70 WORD, вот скрин 79558
Часть массива WORD, использует массив REAL и передаёт несколько штук, с указанного адреса в середине.
CripKitty
22.10.2024, 16:40
Как обратится к байту переменной WORD? По аналогии с записью у Сименса.79556
Николай Суриков
22.10.2024, 16:57
Как обратится к байту переменной WORD? По аналогии с записью у Сименса.79556
VarWord.0
VarWord.1
VarWord.2
.
.
VarWord.15
Евгений Кислов
22.10.2024, 16:58
Как обратится к байту переменной WORD? По аналогии с записью у Сименса.79556
Добрый день.
Подобный синтаксис (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_partial_access.html) появился только в V3.5 SP19.
В более ранних версиях (в частности, в используемой для наших ПЛК V3.5 SP17 Patch 3) можно использовать функции библиотеки CAA Memory: HighByte, LowByte и т. д.
Вам что 68 пустых регистров не хватило? Зачем 100 сделали?
Посчитали не правильно 83*16=1328 бит - начальный
Функция 2WORD_TO_REAL используется сама по себе, без объединения UNION. Если делаете объединение, то функция не нужна.
Соотнесение тоже не правильно.
REAL можно передать вообще без ничего, так же как вы передаёте 70 WORD, вот скрин 79558
Часть массива WORD, использует массив REAL и передаёт несколько штук, с указанного адреса в середине.
100 сделал потому что там у меня ещё и другие сигналы на адресах 32....сейчас точно не помню.попробую напишу спасибо.
Добрый день. В очередной раз зависает установка Codesys На этапе "install all packages added to the setup". Ранее устанавливал и была такая же проблема, но сносил и чистил реестр и в итоге был успех на раз 4-5. Сейчас никакой способ не помогает) Папку темп чистил, антивирус отключал. Как это победить?) Виндоус 11, Codesys 3.5.17.30.
Александр Казаков
23.10.2024, 13:53
Здравствуйте. У меня вопрос, -как на CFC сделать суммирование отвесов. Встречался с сумматором на регистре, но не знаю есть что то подобное в CodeSYS.
Вам что 68 пустых регистров не хватило? Зачем 100 сделали?
Посчитали не правильно 83*16=1328 бит - начальный
Функция 2WORD_TO_REAL используется сама по себе, без объединения UNION. Если делаете объединение, то функция не нужна.
Соотнесение тоже не правильно.
REAL можно передать вообще без ничего, так же как вы передаёте 70 WORD, вот скрин 79558
Часть массива WORD, использует массив REAL и передаёт несколько штук, с указанного адреса в середине.
доброе утро,коллеги.такой вопрос у меня адресное поле начинается с %IW59. получается что для модбаса у меня 0регистр на IW59.если нужен 1331 адрес. я должен с какого считать с нулевой адрес ? можно не указывать на странице конфиг. модбас начальные адреса , а просто сделать подсчет.с 0 адреса умножая на 16 и уже его объявлять или все таки с IW5979569у меня начальная нумерация 1331-1334для real переменных показания приборов LT TT PT и продолжение 3197- 3239 для bool переменных показания состояния (есть нет).
kondor3000
24.10.2024, 07:55
доброе утро,коллеги.такой вопрос у меня адресное поле начинается с %IW59. получается что для модбаса у меня 0регистр на IW59.если нужен 1331 адрес. я должен с какого считать с нулевой адрес ? можно не указывать на странице конфиг. модбас начальные адреса , а просто сделать подсчет.с 0 адреса умножая на 16 и уже его объявлять или все таки с IW5979569у меня начальная нумерация 1331-1334для real переменных показания приборов LT TT PT и продолжение 3197- 3239 для bool переменных показания состояния (есть нет).
%IW59 это вообще не адреса модбас, а внутренние в ПЛК, забудьте про них.
Вы сейчас про чтение мастером или про слейв пишите?
Вы адреса булевых переменных не путаете с адресами регистров? Откуда вы взяли адреса 1331-1334 и 3197- 3239 ?
CripKitty
24.10.2024, 08:24
VarWord.0
VarWord.1
VarWord.2
.
.
VarWord.15
Добрый день, таким образом мы обращаемся к битам, а хотелось бы непосредственно к байтам переменной WORD
Возьмите Word и /256 или %256 не помню, ST такое позволяет? вы получите старший и младший байты. По другому вроде никак.
kondor3000
24.10.2024, 09:13
Добрый день, таким образом мы обращаемся к битам, а хотелось бы непосредственно к байтам переменной WORD
Запишите нужные числа в байты, соберите из них WORD и присвойте куда вам надо. Вот и будет управление байтами.
у меня адресное поле начинается с %IW59. получается что для модбаса у меня 0регистр на IW59 ХОСПОДИ!!! Да что ж вам дались эти дурацкие прямые адреса!!
Там же вон просто можно привязать МАССИВ переменных. СРАЗУ. И работать с ним. Можно привязать массив WORD'ов и работать с ним. БЕЗ Прямой адресации!
(Статью начну готовить на следующей неделе)
%IW59 это вообще не адреса модбас, а внутренние в ПЛК, забудьте про них.
Вы сейчас про чтение мастером или про слейв пишите?
Вы адреса булевых переменных не путаете с адресами регистров? Откуда вы взяли адреса 1331-1334 и 3197- 3239 ?
мне нужно передать с плк на ОПС аналоговые сигналы по модбас тсп по адресам1331-1334 и дискретные сигналы по адресам 3197- 3239
МихаилГл
24.10.2024, 11:03
мне нужно передать с плк на ОПС аналоговые сигналы по модбас тсп по адресам1331-1334 и дискретные сигналы по адресам 3197- 3239
А изменить в ОРС номера опрашиваемых регистров не судьба?
kondor3000
24.10.2024, 13:04
мне нужно передать с плк на ОПС аналоговые сигналы по модбас тсп по адресам1331-1334 и дискретные сигналы по адресам 3197- 3239
Вы хоть понимаете что вы пишите ?
Если у вас адрес регистра 83 (REAL будет 83 и 84 регистр), то вы пишите адрес бита 1331, выдавая его за адрес регистра.
В таком случае вместо чтения 120 регистров, вам придётся читать 2 тысячи регистров. Может голову включите уже?
1331 бит попадает в 83 регистр
3239 бит попадает в 202 регистр - разница в 120 регистров
Если REAL по адресу 1331-1334, то читать придётся 1334 регистра.
МихаилГл
24.10.2024, 14:56
Вы хоть понимаете что вы пишите ?...
Я как бы тоже за использование в слэйве минимального количества регистров. Но похоже ТС с ОРС сервером тоже не сильно хочет разбираться...
Если REAL по адресу 1331-1334, то читать придётся 1334 регистра. Так а может OPC там запрашивает регистры не с нуля, с как раз запросом типа "Начиная с 1331 + 4 регистра"?
Я так понял, что ему надо просто начальные адреса подкрутить.
kondor3000
24.10.2024, 15:10
Так а может OPC там запрашивает регистры не с нуля, с как раз запросом типа "Начиная с 1331 + 4 регистра"?
Я так понял, что ему надо просто начальные адреса подкрутить.
Эта эпопея уже 3 неделю длится, сначала были адреса со 125 по 194 (70 регистров), потом ТС сделал с 83 по 182 (100 регистров) и собирался передавать REAL с 83 адреса.
2 недели ему разжёвывал как биты соотнести с регистрами, только по ходу ТС так ничего и не понял.https://owen.ru/forum/showthread.php?t=20069&page=766
А теперь биты из 199-202 регистра, а REAL из 1331-1334 регистров
kondor3000 Я сам ни фига не понял. Там даже же начальный адрес можно не с нуля задавать. Чего он хочет-то?
[QUOTE=kondor3000;449103]Эта эпопея уже 3 неделю длится, сначала были адреса со 125 по 194 (70 регистров), потом ТС сделал с 83 по 182 (100 регистров) и собирался передавать REAL с 83 адреса.
2 недели ему разжёвывал как биты соотнести с регистрами, только по ходу ТС так ничего и не понял.https://owen.ru/forum/showthread.php?t=20069&page=766
А теперь биты из 199-202 регистра, а REAL из 1331-1334 регистров[/QUOTEдоброе утро. хоть я и мучал вас глупыми вопросами .но никак не мог понять .спасибо большое за терпения .я за три недели многому научился с нуля. будут у меня еще вопросы. я буду если позволите писать. еще раз спасибо.
kondor3000
25.10.2024, 09:17
доброе утро. хоть я и мучал вас глупыми вопросами .но никак не мог понять .спасибо большое за терпения .я за три недели многому научился с нуля. будут у меня еще вопросы. я буду если позволите писать. еще раз спасибо.
Так всё таки вы биты перепутали или решили REAL записывать в 1331-1334 регистры ?
Добрый день.
Исходные:
- требуется поддерживать параметр (сила натяжения нити) в заданном значении, через ПИД-регулятор. Значение параметра считывается с модуля МВ110-224.8А;
- поддержание заданного значения обеспечивает сервопривод (на базе Delta ASDA-B2), работая в режиме управления моментом;
- проект на СПК110 в CODESYS 3.5.17.3.
Подскажите, пожалуйста, какой ФБ из библиотеки CmpOwenPidRegs подойдет для этой цели, или из другой.
Евгений Кислов
25.10.2024, 11:01
Добрый день.
Исходные:
- требуется поддерживать параметр (сила натяжения нити) в заданном значении, через ПИД-регулятор. Значение параметра считывается с модуля МВ110-224.8А;
- поддержание заданного значения обеспечивает сервопривод (на базе Delta ASDA-B2), работая в режиме управления моментом;
- проект на СПК110 в CODESYS 3.5.17.3.
Подскажите, пожалуйста, какой ФБ из библиотеки CmpOwenPidRegs подойдет для этой цели, или из другой.
Добрый день.
Если вы раньше не работали с CmpOwenPidRegs - то лучше используйте ПИД-регулятор из библиотеки Util.
shvitaliy
25.10.2024, 14:47
Здравствуйте. Подскажите пожалуйста, какой использовать блок из библиотеки для отключения аналогового сигнала? Допустим: приходить аналоговый сигнал на вход блока, на выходе тот же сигнал. По переменной bool выключается выходной аналоговый сигнал.
kondor3000
25.10.2024, 14:55
Здравствуйте. Подскажите пожалуйста, какой использовать блок из библиотеки для отключения аналогового сигнала? Допустим: приходить аналоговый сигнал на вход блока, на выходе тот же сигнал. По переменной bool выключается выходной аналоговый сигнал.
Это делается в несколько строк на ST, можете создать свой ФБ или функцию и вставить туда код.
На CFC то же самое можно сделать на элементе SEL
IF NOT b1 THEN // b1: BOOL ; - переменная управления
Out:= IN; // Out, IN :REAL; выход и вход блока
ELSE Out:=0;
END_IF
shvitaliy
25.10.2024, 15:31
Это делается в несколько строк на ST, можете создать свой ФБ или функцию и вставить туда код.
На CFC то же самое можно сделать на элементе SEL
IF NOT b1 THEN // b1: BOOL ; - переменная управления
Out:= IN; // Out, IN :REAL; выход и вход блока
ELSE Out:=0;
END_IF
Спасибо большое, как все просто ) надо изучать мне ST
Спасибо большое, как все просто ) надо изучать мне ST
проще это когда Out:= IN * BOOL_TO_REAL(NOT b1);
На CFC то же самое можно сделать на элементе SEL
дык и на ST
OUT := SEL(Enable, DEFAULT_OUT, IN)
shvitaliy
28.10.2024, 07:30
Здравствуйте. Подскажите пожалуйста, как перевести Float32 в Real на ST?
Евгений Кислов
28.10.2024, 07:39
Здравствуйте. Подскажите пожалуйста, как перевести Float32 в Real на ST?
Добрый день.
В большинстве случаев Float32 и REAL являются синонимичными понятиями.
Так что опишите вашу задачу более подробно.
shvitaliy
28.10.2024, 08:36
Добрый день.
В большинстве случаев Float32 и REAL являются синонимичными понятиями.
Так что опишите вашу задачу более подробно.
Из ТРМ10 нужно прочитать входной сигнал Float32 в Codesys 3.5. У Овена есть готовая библиотека Word2 to Real на FB. Как тоже самое сделать на ST?
Евгений Кислов
28.10.2024, 08:42
Из ТРМ10 нужно прочитать входной сигнал Float32 в Codesys 3.5. У Овена есть готовая библиотека Word2 to Real на FB. Как тоже самое сделать на ST?
См. пример.
shvitaliy
28.10.2024, 09:02
См. пример.
79693
Спасибо большое!
Андрей_ТМЗ
29.10.2024, 08:05
См. пример.
79693
Здравствуйте, Евгений. Поправьте меня, если я не прав, но разве в коде программы не нужно использовать переменную "awRawDataFromTRM10" вместо "fbWord2ToReal" при присваивании входам "wInput1" и "wInput2"?
Евгений Кислов
29.10.2024, 08:51
Здравствуйте, Евгений. Поправьте меня, если я не прав, но разве в коде программы не нужно использовать переменную "awRawDataFromTRM10" вместо "fbWord2ToReal" при присваивании входам "wInput1" и "wInput2"?
Добрый день.
Да, конечно же, вы правы.
Спасибо за замечание. Скриншот в посте выше я поправил.
Jeleshka
30.10.2024, 09:08
Добрый день! Потребовалось управлять элементом визуализации Трассировка из кода программы, а именно сбрасывать трассировку и начинать запись званого. То есть элемент визуализации должен начинать работать как будто его только что запустили.
Для этого использую CmpTraceMgr Library.
1) Получил нужные hPacket, hRecord и их конфигурации.
2) Использование TraceMgrPacketRestart() выполняет только сброс времени трассировки.
3) Костыль в виде сохранения пустой трассировки в файл, а потом ее перезаписывание - не решает задачу, потому что трассировка рисует ерунду.
Прошу помощи, идеи заканчиваются)
Булевые переменные проще читать, записывать регистрами, если это возможно и потом распаковывать, упаковывать в маски.
Либо вы вручную привязываете все переменные в соотнесение переменных в слейве.
Либо объявляете массив равный всем переменным и один раз его втыкаете туда.
Выше со скринами все ответы есть. Станица 769.
2001 бит это 125 регистр биты с 1 по 10, записать маску из 16 бит в 125 регистр
3110 бит это 194 регистр биты с 6 по 15, читать 194 регистр 16 бит и брать нужные.
Да ещё в 17.3 версии байты переставлены, так что 6 бит попадает на 14, 7 - на 15, 8 - на 0, 9 - на 1 и т. д. Сами увидите.
Настройка 79315 Соотнесение 79316 ОРС сервер 79317Нужные биты работают.
2) Лучше создать.
3) Программу лучше писать на нормальных языках, CFC или ST. Вам по крайней мере подскажут, создать для неё Таск и вызвать её.
Язык ST, чем и хорош, скопировали текст и вставили в новую программу, чуть подправив если надо.
Коллеги ,доброе утро. в библиотеке овен коммуникации есть переменная xWrite :BOOL; // команда записи данных из программы в регистры Modbus Slave.
я для проверки сам подаю TRUE и все работает .а в реальном плк при работе как взводиться эта команда на запись?
kondor3000
30.10.2024, 10:04
Коллеги ,доброе утро. в библиотеке овен коммуникации есть переменная xWrite :BOOL; // команда записи данных из программы в регистры Modbus Slave.
я для проверки сам подаю TRUE и все работает .а в реальном плк при работе как взводиться эта команда на запись?
Вы должны запрограммировать, когда её включать, например, при изменении любого бита в 125 или 194 регистре.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot