PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [35] 36 37 38 39 40 41 42

vsa
25.01.2022, 18:45
Проект, Экспорт, выберите ваш POU (функциональный блок), сохранить как, дайте название по имени блока.


Выделил фильтрацию в отдельный POU.
Но в этом POU нет описание переменных типа BOOL. Т.к. они глобальные и требуется их анализ в других POU программы.
Пришлось и глобальные переменные экспортировать.
58920

kondor3000
25.01.2022, 19:44
Выделил фильтрацию в отдельный POU.
Но в этом POU нет описание переменных типа BOOL. Т.к. они глобальные и требуется их анализ в других POU программы.
Пришлось и глобальные переменные экспортировать.
58920

Не хватило этих переменных:
DV_1: BOOL;
DN_1: BOOL;
DV_2: BOOL;
DN_2: BOOL;
MODUL_IN: WORD; (* Маска входов *)
58921

У вас на скрине Маске входов MODUL_IN присвоена цифра 4, поэтому и горит бит Kn_Up_1 который равен MODUL_IN.2 биту маски.
Kn_Up_1:= MODUL_IN.2;
На скрине повторил, что у вас

А так всё работает.
Правильно наверно так, из битов надо было собрать маску:
MODUL_IN.2:=Kn_Up_1;

vsa
25.01.2022, 20:06
У меня до выделения в отдельный POU фильтрацию сигналов было ложное срабатывание (см. скрин)
58922
После того, как я выделил фильтрацию в отдельный POU. Стал проверять, а все и работает! Странно. Меня это радует. Еще раз, спасибо!

kondor3000
25.01.2022, 20:37
У меня до выделения в отдельный POU фильтрацию сигналов было ложное срабатывание (см. скрин)

После того, как я выделил фильтрацию в отдельный POU. Стал проверять, а все и работает! Странно. Меня это радует. Еще раз, спасибо!

Только зря вы в POU вынесли, лучше мне кажется делать ФБ для каждого отдельного блока. Написали ФБ, отладили и вставили в программу.

vsa
25.01.2022, 20:52
Только зря вы в POU вынесли, лучше мне кажется делать ФБ для каждого отдельного блока. Написали ФБ, отладили и вставили в программу.

Я пока не знаю, как организовать самостоятельно ФБ в языке ST .
Мне бы примерчик или ссылку на док. , я пойму.

kondor3000
25.01.2022, 21:39
Я пока не знаю, как организовать самостоятельно ФБ в языке ST .
Мне бы примерчик или ссылку на док. , я пойму.
Таймеры, это тоже ФБ, только стандартные, вы же создаёте пользовательские ФБ.
Вы же POU создали, с ФБ всё тоже самое, например создали FUNCTION_BLOCK Swap_W или для вас FILTER 58928
В программе надо объявить экземпляр
Swap_W1: Swap_W;
а в теле программы вызвать
Swap_W1();
Все тоже самое, что с вызовом экземпляров таймеров.
Вызвать как таймер по F2, только в пользовательских ФБ. Обратиться к переменным входа-выхода как к глобальным или так
и к локальным.
Swap_W2 (rIn:= , rOut=> );
По справке F1 можно прочитать про "FUNCTION_BLOCK" выделив название без кавычек.
Сделал пример из вашей же программы, только в виде ФБ. В эмуляции, чтобы посмотреть работу, щёлкните мышью по ФБ слева и выберите Экземпляр и нажмите ОК.

Cs-Cs
25.01.2022, 21:50
Я пока не знаю, как организовать самостоятельно ФБ в языке ST .
Мне бы примерчик или ссылку на док. , я пойму.
Во! Можно ещё так - при помощи окна вставки переменных, которое вызывается по F2 (если открыт код на ST и это окно можно показать).
Для примера показал на том, как вставить вызов своего FB регулятора тепла.
58924 58925

vsa
26.01.2022, 08:29
Таймеры, это тоже ФБ, только стандартные, вы же создаёте пользовательские ФБ.
Вы же POU создали, с ФБ всё тоже самое, например создали FUNCTION_BLOCK Swap_W или для вас FILTER 58928
В программе надо объявить экземпляр
Swap_W1: Swap_W;
а в теле программы вызвать
Swap_W1();
Все тоже самое, что с вызовом экземпляров таймеров.
Вызвать как таймер по F2, только в пользовательских ФБ. Обратиться к переменным входа-выхода как к глобальным или так
и к локальным.
Swap_W2 (rIn:= , rOut=> );
По справке F1 можно прочитать про "FUNCTION_BLOCK" выделив название без кавычек.
Сделал пример из вашей же программы, только в виде ФБ. В эмуляции, чтобы посмотреть работу, щёлкните мышью по ФБ слева и выберите Экземпляр и нажмите ОК.

Спасибо, только утром зашел на форум. Чуть дела разгребу и начну вникать.

vsa
26.01.2022, 08:31
Cs-Cs, и Вам спасибо. Буду изучать. И еще на скрине мне понравилось оформление кода. Хочу перенять такой стиль. Хорошо читается.

Cs-Cs
26.01.2022, 10:11
Cs-Cs, и Вам спасибо. Буду изучать. И еще на скрине мне понравилось оформление кода. Хочу перенять такой стиль. Хорошо читается.
Не за что! Код оформлять я учился с других языков (я программирую с 96-97 годов, с бэйсика начинал в школе), и все привычки перенёс на CodeSys сюда. Если кратко, то тезисы будут такие:
0. Группировать всё по логическим группам (POU по папочкам раскладывать, переменные по группам - Входы Важные, Входы Кнопок, Входы Ламп, Датчики Температуры, Датчики Давления и так далее).
1. Обзывать переменные так, чтобы по ним было удобно понимать что и для чего, и учитывать сортировку их по алфавиту в окнах выбора (типа такого, которое по F2 вызывается). Скажем, если я хочу чтобы все объявления FBшек регуляторов тёплых полов в окне выбора шли подряд - то я буду называть их fbRegTPolnnn - где nnn - помещение этого пола.
Причём способ того, как части названия сочетаются между собой может быть тоже разным. Выдумал такой пример (на примере каких-нить двигателей мешалок, которых есть три штуки под разные техпроцессы - Замес, Прогрев, Слив):
а) Если нам приоритетна группировка по типу мешалки - то его ставим первым:
* ZamesWorkTime
* ZamesTemperature
* ProgrevWorkTime
* ProgrevTemperature
* SlivWorkTime
* SlivTemperature
б) Если нам приоритетна характеристика, то наоборот:
* WorkTimeZames
* WorkTimeProgrev
* WorkTimeSliv
* TemperatureZames
* TemperatureProgrev
* TemperatureSliv
2. В названиях переменных использовать префикс типа. В CodeSys используют другие префиксы, но я свои притащил из других языков - b = BOOL, i = INT, w = WORD, dw = DWORD, s = STRING, ws = WSTRING, fb = какой-нибудь FB (таймер, свой FB), tm = TIME. По ним всё вполне читается, типа "dwWaterPulseCount" или "fbDelayTimer" и "tmDelayTime".
3. Ну и всё комментировать. Если комментировать переменные, то среда эти комментарии видит и даже выводит их иногда, если на переменную навести мышку, или в окне выбора по F2.
Я местами соображаю медленно в плане алгоритмов - вот и расписываю себе всё подряд.
Если это удобно (публично я не хочу проект выкладывать), то можно написать мне своё мыло в личку - и я какой-нибудь проект скину как образец. Но НЕ для распространения.

vsa
26.01.2022, 11:48
Сделал пример из вашей же программы, только в виде ФБ. В эмуляции, чтобы посмотреть работу, щёлкните мышью по ФБ слева и выберите Экземпляр и нажмите ОК.
Только сразу не ругайтесь. Стал открывать Ваш пример и столкнулся с такой проблемой (скрины в той последовательности, как появлялись):
58935
58936
58937
Интуитивно понимаю, что требуется. Но как это реализовать не знаю. Я же не знаю конфигурацию ПЛК для которого делался проект.
Подскажите, как мне правильно настроить проект для сторонних программ?

kondor3000
26.01.2022, 12:48
У вас просто таргеты разных ПЛК не стоят, поставьте все сразу и проблем не будет. Скачайте на сайте.
В пример вставил таргет какой вы написали у вас будет ПЛК, ПЛК 110.60-М v.2, у вас и на него таргет не стоит?
При создании проекта сразу указываете какой ПЛК и программа уже под него. 58943 Либо потом вставляете в настройках целевой платформы.
Вы похоже ни одного обучающего видео от Овен ( на ю-туб) даже не посмотрели, поэтому и вопросов столько. Они там короткие по минуте. Потратьте 10 минут, большинство вопросов отпадёт. https://www.youtube.com/results?search_query=Программирование+ОВЕН+ПЛК110. +Часть

Основные библиотеки и Таргеты https://owen.ru/product/codesys_v2/service_po

vsa
26.01.2022, 13:26
Я установил таргет под свой контроллер сразу и давно
Я понял, что нужно наполнить CodeSYS таргетами всех контроллеров ОВЕН.
А фильмы все эти и другие смотрел
Я думал, что можно подгружать таргет под ситуацию

kondor3000
26.01.2022, 13:58
Так у вас стоит другой таргет? Не ПЛК 110.60-М v.2 ?
Вы вроде писали, что такой будет контроллер.

vsa
26.01.2022, 15:52
Так у вас стоит другой таргет? Не ПЛК 110.60-М v.2 ?
Вы вроде писали, что такой будет контроллер.

Странно все это. Переустановил CodeSYS. Установил все таргеты, какие нашел на сайте ОВЕН.
58947
И все равно ругается CodeSYS при загрузке Вашего проекта. Текс я вижу, но конфигурация отсутствует. Может у нас разные места хранения таргетов?

kondor3000
26.01.2022, 16:05
Странно все это. Переустановил CodeSYS. Установил все таргеты, какие нашел на сайте ОВЕН.
58947
И все равно ругается CodeSYS при загрузке Вашего проекта. Текс я вижу, но конфигурация отсутствует. Может у нас разные места хранения таргетов?

Так у вас старый таргет 110.60-М , а у меня новый 110.60-М v.2. Новые ПЛК обозначаются или [ M02 ] или V2
v.2 это новые ПЛК, старые уже не выпускаются и таргет вам менять всё равно надо, скачивайте по ссылке таргеты версии 3.3 и ставьте все V2.
Сохраните проект, просто так вы перенести теперь не сможете.
Конфигурацию можно перенести, но со старого на новый будут ошибки, их придётся исправлять вручную.
Либо переписывать конфигурацию заново.
Тут прога для переноса и в конце я писал как переносить на новый https://owen.ru/forum/showthread.php?t=18269

Cs-Cs
26.01.2022, 16:11
И все равно ругается CodeSYS при загрузке Вашего проекта. Текс я вижу, но конфигурация отсутствует.
На тот, который я прислал свой на показать - тоже будет ругаться. Нужна именно версия v2
58948 58949

kondor3000 Я ему прямо на картинках показал, чтобы точно было ясно шо и где.

vsa
26.01.2022, 16:47
Что-то муторно переносить в новую конфигурацию ПЛК через сервисные программы. В моем случае, проще руками перебить все входы и выходы.
После изменения профиля компилятор поругался на RS-485 (2), обслуживающий модули расширения. Заменил на RS-485 (1) и все. Вроде, все работает. идентификаторы не исчезли в конфигурации.

vsa
26.01.2022, 17:18
Готовлю программу ПЛК (Slave) для взаимодействием с внешним компьютером (Master).
Для примера описал 5 регистров (Reg0-Reg4). Регистры 16 битные. Правильно понимаю, что Адрес Reg0 - 0, Reg1 - 1, Reg2 - 2, Reg3 - 3 и Reg4 - 4? Всего у меня будет 49 таких регистров.
58951

kondor3000
26.01.2022, 17:33
Что-то муторно переносить в новую конфигурацию ПЛК через сервисные программы. В моем случае, проще руками перебить все входы и выходы.
После изменения профиля компилятор поругался на RS-485 (2), обслуживающий модули расширения. Заменил на RS-485 (1) и все. Вроде, все работает. идентификаторы не исчезли в конфигурации.

Не все так просто, при подключении может не заработать. Вы программу сохранили?
После изменения целевой платформы, надо открыть конфигурацию, потом Дополнения/Стандартная конфигурация и ОК, потом ещё Дополнения/Вычислять адреса. Применится пустая конфигурация новой целевой платформы. В ней уже набивать по новой все входы, выходы и регистры.

А ещё лучше создать новый проект с правильной целевой платформой и набить конфигурацию руками.
Блоки и программы можно перенести хоть копипастом, хоть экспортом, импортом.

С адресами регистров всё правильно.

vsa
26.01.2022, 18:00
Не все так просто, при подключении может не заработать. Вы программу сохранили?
После изменения целевой платформы, надо открыть конфигурацию, потом Дополнения/Стандартная конфигурация и ОК, потом ещё Дополнения/Вычислять адреса. Применится пустая конфигурация новой целевой платформы. В ней уже набивать по новой все входы, выходы и регистры.

А ещё лучше создать новый проект с правильной целевой платформой и набить конфигурацию руками.
Блоки и программы можно перенести хоть копипастом, хоть экспортом, импортом.

С адресами регистров всё правильно.

Вы оказались, как всегда, правы! После предложенных манипуляций все слетело в конфигурации ПЛК.
Придется все с нуля и вставлять мою программу руками через копирование POU

Mr Helper
26.01.2022, 18:24
Что бы не вводить все вручную, можно сделать экспорт старой конфигурации и через блокнот/notepad/д.р утилиту можно перенести конфигурацию в новую, но там нужно тоже быть осторожным.

vsa
27.01.2022, 12:29
Еще раз хочу уточнить адресацию регистров ПЛК (Slave) для внешнего компьютера (Master).
Если адрес слова (16 бит) %QW7.6.0 , то для ПК это 7 адрес?
Если адрес слова (16 бит) %QW7.7.0 , то для ПК это 8 адрес?
58960

Зачем имеется команда "Вычислять адреса"? Что это мне дает? Из документации CodeSYS не понял ее назначение.

kondor3000
27.01.2022, 12:41
Еще раз хочу уточнить адресацию регистров ПЛК (Slave) для внешнего компьютера (Master).
Если адрес слова (16 бит) %QW7.6.0 , то для ПК это 7 адрес?
Если адрес слова (16 бит) %QW7.7.0 , то для ПК это 8 адрес?


Зачем имеется команда "Вычислять адреса"? Что это мне дает? Из документации CodeSYS не понял ее назначение.

Я ведь писал уже раза 4 вам, считается с 0 адреса, по стрелке на вашем скрине адрес 5, распределение внутренней памяти начинается с 1 поэтому там 6,
если путаетесь всё время, сделайте комментарий для каждого 2 байт, Адрес 0, адрес 1 и т.д. 58961

Вычислять адреса надо для ПЛК, вы забейте на это, как и на %QW......

vsa
27.01.2022, 12:46
Я ведь писал уже раза 4 вам, считается с 0 адреса, по стрелке на скрине адрес 5, распределение внутренней памяти начинается с 1 поэтому там 6

Блин, я же ошибся. Конечно 5. Я знал об об этом, но невнимательно сформулировал вопрос. Просто, не понятно, зачем так сделали, что адрес для ПК всегда меньше обозначенного на 1?

Вопрос: Зачем имеется команда "Вычислять адреса"? Что это мне дает? Из документации CodeSYS не понял ее назначение.

kondor3000
27.01.2022, 13:14
Вопрос: Зачем имеется команда "Вычислять адреса"? Что это мне дает? Из документации CodeSYS не понял ее назначение.

Вычислять адреса надо для ПЛК, вы забейте на это, как и на %QW......
Если бы вы посмотрели внимательно, галки там по умолчанию стоят 58963

Kickit
27.01.2022, 18:44
Здравствуйте! ПЛК опрашивает модули по Modbus-RTU. Модули моргают, опрос идет. Но в программе вместо значений опрошенных переменных вопросительные знаки «???». Подскажите, пожалуйста, в каком направлении копать?

kondor3000
27.01.2022, 19:18
Здравствуйте! ПЛК опрашивает модули по Modbus-RTU. Модули моргают, опрос идет. Но в программе вместо значений опрошенных переменных вопросительные знаки «???». Подскажите, пожалуйста, в каком направлении копать?

Вероятно вы пытаетесь смотреть работу программы в ФБ ( функциональном блоке), надо дважды щёлкнуть мышью по названию блока в левой колонке, выйдет окно,
в нём выбрать Экземпляры (иногда их может быть несколько во 2 столбце) и нажать ОК. 58968

Kickit
27.01.2022, 23:22
Спасибо. Не так. Все в стандартной программе PLC_PRG. Ещё почему-то в переменные нельзя ввести и зафиксировать значения.

kondor3000
27.01.2022, 23:30
Спасибо. Не так. Все в стандартной программе PLC_PRG. Ещё почему-то в переменные нельзя ввести и зафиксировать значения.

Вы бы хоть скрин выложили.
В PLC_PRG такое может быть только, если довольно большая программа и вся на 1 странице. Так делать нежелательно. Программу надо разбивать на блоки (ФБ)
А в конфигурации смотрели переменные?
В онлайн режиме нельзя ввести некоторые переменные, например входы ПЛК, прописанные в конфигурации. Ну и которые с вопросами, тоже нельзя.
В промежуточные и выходы можно.

Евгений Кислов
28.01.2022, 07:46
Добрый день, начал писать программу в CoDeSys 2.3, появилась ошибка 3740: (3): Неизвестный тип 'pointer to param_node'. При нажатии F4 перескакивает на библиотеку Standard.lib и выделяет R_TRIG. В программе у меня есть R_TRIG, но он не подсвечивается как ошибка. Удаление этого блока из программы тоже не снимает ошибку. Выделяется как ошибка вообще библиотечный экземпляр. Что не так?

Добрый день.
Выложите ваш проект - посмотрим, в чем дело.

Dyushes
28.01.2022, 11:50
Прошу помочь с установкой программы CoDeSys V2.3 на компьютер. Ставил раз пять. Раньше ставилась.
Комп Виндос 7 професиональный. Подскажите куда копать.

Sulfur
28.01.2022, 11:53
Dyushes
Исключите все кириллические символы из пути установки программы и библиотек.

capzap
28.01.2022, 11:55
Прошу помочь с установкой программы CoDeSys V2.3 на компьютер. Ставил раз пять. Раньше ставилась.
Комп Виндос 7 професиональный. Подскажите куда копать.

может Вы путаете, не со средой разработки у Вас проблемы, а с испорченным проектом?

Dyushes
28.01.2022, 12:05
Нет там никаких символов. Открываю скаченную (с сайта ОВЕН) программу и выполняю все требования. Как раньше далее открываю таргет файл ПЛК 160

kondor3000
28.01.2022, 15:37
Возможно тартет не тот, 2-3 страницы назад смотрите, тоже самое было. Либо библиотеки не туда ставите.

Cs-Cs
28.01.2022, 16:44
Прошу помочь с установкой программы CoDeSys V2.3 на компьютер. Ставил раз пять. Раньше ставилась.
Комп Виндос 7 професиональный. Подскажите куда копать.
Судя по показанному скриншоту там дело не в среде и не в виндовс.
На скриншоте она чётко ругается о том, что повреждены таргеты и файл проекта.
Нужно попробовать отдельно скачать таргеты и их установить.
И потом попробовать перескачать проект и ещё раз его открыть.

kondor3000
28.01.2022, 17:25
Даже проще можно, просто создать новый проект и посмотреть пути установки таргетов и биб-тек. Должно быть так 58982

vsa
28.01.2022, 18:48
Можно ли на языке ST обращаться к регистрам, предназначенных для внешнего компьютера, по индексам (как в массиве)?
У меня в проекте 22 регистра, распределенные в Modbus(slave) осуществляют сохранность в RETAIN памяти 22 значения от внешнего ПК.
И когда я списываю значения этих регистров в RETAIN массив, как-то некрасиво получается.
Loading_Position[1]:=Loading_Position_1;
Loading_Position[2]:=Loading_Position_2;
Loading_Position[3]:=Loading_Position_3;
Loading_Position[4]:=Loading_Position_4;
Loading_Position[5]:=Loading_Position_5;
Loading_Position[6]:=Loading_Position_6;
Loading_Position[7]:=Loading_Position_7;
Loading_Position[8]:=Loading_Position_8;
Loading_Position[9]:=Loading_Position_9;
Loading_Position[10]:=Loading_Position_10;
Loading_Position[11]:=Loading_Position_11;
Loading_Position[12]:=Loading_Position_12;
Loading_Position[13]:=Loading_Position_13;
Loading_Position[14]:=Loading_Position_14;
Loading_Position[15]:=Loading_Position_15;
Loading_Position[16]:=Loading_Position_16;
Loading_Position[17]:=Loading_Position_17;
Loading_Position[18]:=Loading_Position_18;
Loading_Position[19]:=Loading_Position_19;
Loading_Position[20]:=Loading_Position_20;
Loading_Position[21]:=Loading_Position_21;
Loading_Position[22]:=Loading_Position_22;
Имеются другие подходы? Или нормально?

kondor3000
28.01.2022, 19:56
Всё, что в слейве и так ретайн по умолчанию. Не надо их второй раз в ретайн пихать)

Для внешнего компа переменные в слейве будут Тег0 адрес [0], Тег1 адрес [1], Тег2 адрес [2] и т. д.
В программе вы обращаетесь к переменным слейва по имени.
Зачем вы их ещё в массив хотите запихать?

keysansa
28.01.2022, 20:07
Можно ли на языке ST обращаться к регистрам, предназначенных для внешнего компьютера, по индексам (как в массиве)?
У меня в проекте 22 регистра, распределенные в Modbus(slave) осуществляют сохранность в RETAIN памяти 22 значения от внешнего ПК.

Можно при конфигурации обмена расположить регистры мастера последовательно, и при опросе их, организовать цикл.

vsa
28.01.2022, 20:34
Всё, что в слейве и так ретайн по умолчанию. Не надо их второй раз в ретайн пихать)

Для внешнего компа переменные в слейве будут Тег0 адрес [0], Тег1 адрес [1], Тег2 адрес [2] и т. д.
В программе вы обращаетесь к переменным слейва по имени.
Зачем вы их ещё в массив хотите запихать?

А как мне объявить 22 слова VAR RETAIN? По отдельности - выходит много. В программе никак я их не использую. Только для сохранения регистров в память.

kondor3000
28.01.2022, 20:39
А как мне объявить 22 слова VAR RETAIN? По отдельности - выходит много. В программе никак я их не использую. Только для сохранения регистров в память.

Ваши переменные или по отдельности вписать в VAR RETAIN, либо добавить в слейве в конце.

vsa
28.01.2022, 20:41
Всё, что в слейве и так ретайн по умолчанию. Не надо их второй раз в ретайн пихать)

Для внешнего компа переменные в слейве будут Тег0 адрес [0], Тег1 адрес [1], Тег2 адрес [2] и т. д.
В программе вы обращаетесь к переменным слейва по имени.
Зачем вы их ещё в массив хотите запихать?

Забыл спросить, а что значит в моем случае тег? Например, Loading_Position_1[2] не прокатывает. Компилятор ругается.

kondor3000
28.01.2022, 20:44
Забыл спросить, а что значит в моем случае тег? Например, Loading_Position_1[2] не прокатывает. Компилятор ругается.
Как вы читаете? Я написал Для внешнего компа , на котором стоит программа чтения со слейва

vsa
28.01.2022, 20:49
Ваши переменные или по отдельности вписать в VAR RETAIN, либо добавить в слейве в конце.

Ну вот и ответ: отдельно объявлять в VAR RETAIN это 22 записи. А если массив, то одна запись. В слейв записывать в конец это , значит, что Вы не поняли моей задачи. В слейве уже объявлены 22 регистра. А слова в RETAIN , это слова для долгострочного хранения значений регистров. Или можно регистры в слайве, как-то объявить RETAIN/

vsa
28.01.2022, 20:51
Как вы читаете? Я написал Для внешнего компа , на котором стоит программа чтения со слейва

Извините, не внимательно прочитал. Я думал про сою проблему - индексное обращение к регистрам в программе ПЛК

kondor3000
28.01.2022, 20:58
Ну вот и ответ: отдельно объявлять в VAR RETAIN это 22 записи. А если массив, то одна запись. В слейв записывать в конец это , значит, что Вы не поняли моей задачи. В слейве уже объявлены 22 регистра. А слова в RETAIN , это слова для долгострочного хранения значений регистров. Или можно регистры в слайве, как-то объявить RETAIN/

Как одна запись? Вам надо сначала присвоить все переменные в массив, это 44 раза записать имена переменных, и ещё одна запись в RETAIN. Где вы одну нашли ?
А в RETAIN вам надо вписать 22 переменных. Что быстрее?

vsa
28.01.2022, 21:01
Т.е. Вы хотите сказать, что после обесточивания ПЛК и нового включения в регистрах Slave будут оставаться значения , которые были до выключения ПЛК? Если, да, то все меняется на 180 градусов! Спасибо! Меняю эту часть программы. Все упрощается радикально.

kondor3000
28.01.2022, 21:05
Т.е. Вы хотите сказать, что после обесточивания ПЛК и нового включения в регистрах Slave будут оставаться значения , которые были до выключения ПЛК? Если, да, то все меняется на 180 градусов! Спасибо! Меняю эту часть программы. Все упрощается радикально.

Значения будут оставаться, уже 4 раза написал. Главное, чтобы при включении они не перезаписались. Это вы уже смотрите по программе.

vsa
29.01.2022, 14:40
Сижу и "причесываю" код программы для увеличения быстродействия кода. На днях жду ПЛК. И обратил внимание, как я использую таймеры TON.
Пример:
...
TM_DV_2(PT:=T#150ms);
IF NOT DV_2 THEN
Flag_DV_2:=FALSE;
END_IF
TM_DV_2.IN:=DV_2;
IF TM_DV_2.Q THEN
Flag_DV_2:=TRUE;
END_IF
...
У меня на каждом цикле ПЛК отрабатывается это кусок . А почему бы "TM_DV_2(PT:=T#150ms);" не делать единожды в программе, например, на первом цикле работа ПЛК? Тем более, что параметр таймера не изменяется никогда. Что скажут специалисты? Я прав?

Cs-Cs
29.01.2022, 14:59
vsa Специалисты (ну или не очень) скажут вот что. Что приёмы программирования в ПЛК отличаются от других (некоторых) языков в том, что в ПЛК все блоки (в том числе и таймеры) обсчитываются там же, где и вызываются.
Ээээ... образно говоря, если перейти просто на схемы. Вот у нас есть это самое реле времени с задержкой на включение в настоящем мире - на DIN-рейку в щите например. И у него есть напряжение питания, которое надо на него подать, чтобы оно включилось через заданное время.
По твоей идее ты хочешь чуток кратковременно подать электропитание на это реле и рассчитывать на то, что оно каким-то хитрым образом потом останется влкюченным и само по себе сработает.

В ключе ПЛК получается так, что отсчёт времени (или другую обработку) любой блок (FB - функциональный блок) ведёт только тогда, когда его вызывают. Я этого много раз не понимал, и для меня это было откровением.
Ща я пущусь в дебри... давай подумаем, как нам самим написать свой TON и как он мог бы работать?
Сделаем так:
а) Если его IN перешёл с FALSE в TRUE - то запомним текущее время в ПЛК и заданное время PT.
б) При каждом следующем обращении к TON (вот для чего всегда нужен его циклический вызов) будем сравнивать разницу текущего времени и запомненную. Если она больше заданного PT - то включаем выход, иначе - нет.
Сделано это как раз для того, чтобы можно было прервать работу таймеров, записав в PT ноль.

Какие моменты тут можно выделить:
а) Разница прошедшего времени и заданного PT сравнивается всегда. Если PT окажется равным нулю или меньше насчитанного - то TON сразу сработает (то же справедливо и для TOF).
б) Особенность вызова FB в CodeSys такая, что если явно не заданы их параметры - то они НЕ меняются.
Да! Можно один раз написать:
TM_DV_2(PT:=T#150ms);
...но потом, чтобы он правильно считал, нужны его вызовы в коде. Циклические. В них PT меняться не будет, но для работы TON ты его должен всё равно вызывать. Хоть без аргументов, но должен:
TM_DV_2();

Поэтому, что ты напишешь с PT, то без - пофиг. Но вызывать надо все FB циклически.

vsa
29.01.2022, 15:13
Cs-Cs, тема закрыта. Убедительно ответили. И я проверил на практике - не работает, если только на первом цикле обратится к таймеру для начала работы (TM_DV_2(PT:=T#150ms); ). Спасибо!

kondor3000
29.01.2022, 15:23
Напишу попроще, можно написать TM_DV_2(); Тогда РТ надо задать в предыдущей строке TM_DV_2.PT:=T#150ms;

Можно написать TM_DV_2(PT:=T1); Т1 задать в объявлении переменных T1 : TIME:=T#150ms;

Но если у вас 10 таймеров, то надо задать 10 штук T1 : TIME:=T#150ms; T2 : TIME:=T#150ms; T3: TIME:=T#150ms; и т.д.

keysansa
30.01.2022, 13:41
За причесывание кода... Быстродействие кода с таймерами - далеко под сомнением.
Там где нужно быстродействие, там каждый цикл на счету, какие там таймеры?

Cs-Cs
30.01.2022, 13:52
Валенок Спасибо за фишку инициализации FB сразу с параметрами ^_^. Я такое мимио глаз пропустил. Я про это - очень круто!

VAR
TM_DV_2 : TON := (PT := T#150ms); //"параметр таймера не изменяется никогда" (С)
END_VAR

keysansa
30.01.2022, 14:04
ну конкретно здесь некое событие раз в 150мс. Ловят же не 150.000мс.
1, 5, 200 таймеров - не влияет при том что минц 1мс.
Но есть и другой код, потихошку может накопится и превышение 1мс

Тогда таймеры выносятся в обслуживающий код.
"Причесывание" кричного ко времени кода совсем не так выглядит. Там за 150мс может все кардинально измениться.

А конкретно тут - оптимизировать нечего. Программа 100% будет выполняться раз в 5 быстрее таймера, по фактическому времени.

keysansa
30.01.2022, 14:21
Ну, вот у вас таймер, 150 мс.
Время цикла какое? 100? 200 мс? Или 10?
Тут разные оптимизации...

vsa
30.01.2022, 18:29
Приведенный код своеобразный если он именно так и задуман...
[/CODE]
Большое спасибо за отклик на мой вопрос.

В приведенном фрагменте используется TON таймер. Задача такая: имеется подъемное устройство, которое должно при подъеме груза останавливаться на верхнем датчике. Но опыт эксплуатации подобных подъемников показал, что останавливается подъемник не в середине датчика, а в самом его начале. И при больших грузах (300-500 кг) при снятии напряжения с электродвигателя, пока срабатывают механические тормоза, груз немного опускается и сходит с верхнего датчика. И сигнал от датчика теряется. Конечно я управляю движением частотным преобразователем. И все скажут, что нужно было отстраивать определенные параметры частотного преобразователя в режиме торможения. Тем более, что я их и настраиваю. Но иногда это не помогает. И я исправляю аварийную ситуацию простым таймером, который немного задерживает сигнал от верхнего датчика на 150ms (значение настраивается при наладке оборудования) и передает в программу состояние DV_2 в виде Flag_DV_2.
И Вы хотите сказать, что пример моего таймера не выполнит поставленную задачу? Тут главное, что Flag_DV_2 должен быть в TRUE всегда пока имеется сигнал от DV_2. И в программе я контролирую не сам сигнал от датчика, а его флаг Flag_DV_2.
И еще, я таким образом убираю кратковременное появления сигнала DV_2 от помех на линии. Подобными алгоритмами обрабатываю и кнопочные станции. Уж очень помеховосприимчивы линии связи от кнопок. Тем более, когда работают частотные преобразователи на маленьких частотах.

vsa
30.01.2022, 18:42
VAR
TM_DV_2 : TON := (PT := T#150ms);
...
TM_DV_2(IN := DV_2, Q => Flag_DV_2);

Спасибо за красивый код! Попробовал - работает! Не знал, что так можно обходится ФБ.

Cs-Cs
30.01.2022, 19:35
vsa
И при больших грузах (300-500 кг) при снятии напряжения с электродвигателя, пока срабатывают механические тормоза, груз немного опускается и сходит с верхнего датчика
Мне это напомнило это видео (канал дядьки про электронные лифты и их системы управления, я там много чего интересного для себя узнал): https://www.youtube.com/watch?v=7L5ynNNhJZk - тут грузовой лифт (правда с гидравлическим приводом) выранивает кабину в точной остановке у пола при изменении веса груза.

задерживает сигнал от верхнего датчика на 150ms (значение настраивается при наладке оборудования)
Вот это значение потом вынести в константы, чтобы все такие штучки были в одном месте и наглядно подстраивались (как у меня в проекте, который я для примера слал).

Подобными алгоритмами обрабатываю и кнопочные станции. Уж очень помеховосприимчивы линии связи от кнопок
Если это типовое решение, в котором отличается только время выдержки - то может его стоит оформить в FB? Это ж защита от дребезга получается, которая на основе TON и делается как раз.
Можно сделать какой-нить FB с названием вида ProcessInputLine, который на вход принимает время выдержки, а на выход выдаёт готовое TRUE/FALSE после собработки данных.

Валенок
30.01.2022, 19:49
типовое решение
для фильтра


FUNCTION_BLOCK TON_TOF
VAR_INPUT
IN : BOOL;
PT_TON,
PT_TOF : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
TON : TON;
TOF : TOF;
END_VAR
......
TON(IN := IN, PT := PT_TON);
TOF(IN := TON.Q, PT := PT_TOF, Q => Q);

Cs-Cs
30.01.2022, 19:58
Валенок...и ни одного комментария, а код в стиле FORTRAN на перфокартах - короткие имена и всё большими буквами. Эх!

Валенок
30.01.2022, 20:02
.и ни одного комментария,
Накой с 2 строками ?


короткие имена и всё большими буквами
Стилизация под TON/TOF. Зачем плодить непонятные сущности ?

vsa
30.01.2022, 20:51
VAR
T : TON_TOF := (TON := (PT := ...), TOF := (PT := ...));

FUNCTION_BLOCK TON_TOF
VAR_INPUT
IN : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
TON : TON;
TOF : TOF;
END_VAR
......
TON(IN := IN);
TOF(IN := TON.Q, Q => Q);



Мудрено! С первого раза не въедешь! Попробую отработать на практике.

vsa
31.01.2022, 08:47
Вопрос немного не по программированию. Наверняка консультанты этого форума имеют громадный опыт в эксплуатации своих разработок в промышленности. И представьте такую простую электрическую схему аварийной цепи в промышленном объекте: от блока питания идет провод (+24В) на цифровой вход ПЛК. Но провод очень длинный (150-200 м). Он проходит через все аварийные концевики и кнопки объекта управления. Стоит аварийной цепи разорваться (механически), то возникает в ПЛК сигнал "Авария". На самом объекте постоянно, включаются и выключаются модули, потребляемые большие мощности (10 - 60 квт). Да и частотные преобразователи для электроприводов постоянно "фонят" помехами. Электромагнитных помех очень много. И вот мы подошли к самому вопросу. Возможная ли навести такую помеху на этот аварийный провод постоянно находящийся по напряжением +24В, чтобы кратковременно исчез +24В (появление противофазного сигнала)? По логике - нет. Мощность БП не даст просесть напряжению. А что бывает на практике?

vsa
31.01.2022, 09:29
Ничего не понятно, но лично я на 150-200м не тянул бы 24= ни как питание, ни как Di, ни тем более как "аварийной цепи".

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

vsa
31.01.2022, 10:17
Ведите. К чему вопросы про Ваши проблемы ?

Возможно не правильно сформулировал вопрос ранее.

Возможно ли навести такую помеху на аварийный провод, постоянно находящийся под напряжением +24В, чтобы кратковременно исчез +24В на входе ПЛК?

Сергей0308
31.01.2022, 10:58
Сигналы аварийного останова обычно на входы свободно программируемых устройств не заводятся(могут зависнуть), что мешает поставить обычное реле на =24В и снимать питание с катушек пускателей и др.

vsa
31.01.2022, 11:25
Сигналы аварийного останова обычно на входы свободно программируемых устройств не заводятся(могут зависнуть), что мешает поставить обычное реле на =24В и снимать питание с катушек пускателей и др.

И то верно. Да и сама реле фильтром является для коротких импульсов. И статика не пройдет на вход ПЛК. Спасибо.

vsa
31.01.2022, 11:28
Сам сигнал от аварийной цепи нужен в контроллере. Там многое, что изменяется от наличия или отсутствия этого сигнала. А катушки пускателей у меня развязаны через реле 24=. Ими я и включаю и отключаю пускатели.

kondor3000
31.01.2022, 11:33
Сам сигнал от аварийной цепи нужен в контроллере. Там многое, что изменяется от наличия или отсутствия этого сигнала. А катушки пускателей у меня развязаны через реле 24=. Ими я и включаю и отключаю пускатели.

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

vsa
31.01.2022, 11:35
Сергей имел ввиду, что лучше поставить реле на которое заведён сигнал аварии, а уже с его контактов брать сигнал на ПЛК. Так вы исключите все наводки на входы ПЛК. Это правильное решение.

Я понял. Уже схему изменил под реле! Спасибо.

vsa
31.01.2022, 19:12
И вопрос по аппаратному фильтру ПЛК 110. В состав ПЛК110 входят 4 Fast discrete inputs (SLOT). Проясните, что за параметр времени фильтра [us]? И сколько 10000 us по отношению к секунде? Может us - это миллионная часть секунды?
59042
И можно ли эти быстрые входа использовать для обычных бесконтактных p-n-p датчиков?

kondor3000
31.01.2022, 22:02
И вопрос по аппаратному фильтру ПЛК 110. В состав ПЛК110 входят 4 Fast discrete inputs (SLOT). Проясните, что за параметр времени фильтра [us]? И сколько 10000 us по отношению к секунде? Может us - это миллионная часть секунды?
59042
И можно ли эти быстрые входа использовать для обычных бесконтактных p-n-p датчиков?

Это 10000 микро секунд или 10 мили секунд. Максимум можно 65535 микро секунд. 59043
Входа можно использовать как угодно, в том числе как обычные. Давал уже ссылку, там даже схемы подключения p-n-p и n-p-n датчиков приведены.
https://owen.ru/product/plk110_m02/connection
На обычных входах фильтр в мили секундах

vsa
01.02.2022, 08:38
Это 10000 микро секунд или 10 мили секунд. Максимум можно 65535 микро секунд. 59043
Входа можно использовать как угодно, в том числе как обычные. Давал уже ссылку, там даже схемы подключения p-n-p и n-p-n датчиков приведены.
https://owen.ru/product/plk110_m02/connection
На обычных входах фильтр в мили секундах
Спасибо, что прояснили с этим мудреным параметром. Обязательно эти входы буду использовать, но ни как быстрые, а обычные.

vsa
01.02.2022, 08:58
А для модулей расширения входов по RS-485 интерфейсу, я смотрю, нет параметров фильтрования входных сигналов? Что-то не нашел. Или это делается в конфигураторе модуля?

kondor3000
01.02.2022, 09:49
А для модулей расширения входов по RS-485 интерфейсу, я смотрю, нет параметров фильтрования входных сигналов? Что-то не нашел. Или это делается в конфигураторе модуля?

Конечно в конфигураторе.

kondor3000
01.02.2022, 10:37
Инсталлировал на ПК конфигуратор M110_v11060.exe для конфигурирования модулей МВ110-224.16ДН и МУ110-224.16P в режиме offline. И в списке модулей не обнаружил свои модули. Возможно это старая версия конфигуратора. На сайте ОВЕН нашел Setup_OwenConfigurer_v1.24.118.0.exe. Меня напрягает его объем. Может это не для этого?

Вообщето почти все модули программируются одним конфигуратором, версия 1.1.0.60 ( у меня в нём 23 разных модуля). Если вы не нашли свой, открываете сайт, выбираете в Каталоге Модули МВВ, находите свой модуль и в Программах и ПО скачиваете кофигуратор для вашего модуля https://owen.ru/product/moduli_diskretnogo_vvoda_s_interfejsom_rs_485/documentation_and_software
Конфигуратор Мх110
ZIP
1 MB

ЗЫ нашёл такой ещё, это более старя версия setup_owenconfigurer_v1.21.110.21596 Установить его не даёт. Пишет у вас версия более новая.

vsa
01.02.2022, 11:07
У меня в проекте 8 кнопок и провода от них будут заходить на модуль МВ110-224.16ДН. Помехи буду обязательно идти по линиям связи (не дребезг контактов). Заглянул в настройки конфигуратора по данному модулю, а там нет настройки фильтра, как в ПЛК. Только, какой-то "Tin.C" - "Фильтр дребезга контактов". Может где-то спрятан сам фильтр с настройками? Или придется все-таки программный фильтр на эти входы отряжать (как было у меня в проекте)?

kondor3000
01.02.2022, 11:26
У меня в проекте 8 кнопок и провода от них будут заходить на модуль МВ110-224.16ДН. Помехи буду обязательно идти по линиям связи (не дребезг контактов). Заглянул в настройки конфигуратора по данному модулю, а там нет настройки фильтра, как в ПЛК. Только, какой-то "Tin.C" - "Фильтр дребезга контактов". Может где-то спрятан сам фильтр с настройками? Или придется все-таки программный фильтр на эти входы отряжать (как было у меня в проекте)?

"Tin.C" - "Фильтр дребезга контактов просто включается, время не задаётся. Лучше было подумать, как провести кабель с минимальными наводками. Мы используем только экранированные провода, металлическую гофру, всё заземляется перед входом в МВВ или ПЛК.

Sulfur
02.02.2022, 08:07
vsa
Есть еще один способ. Кнопки подключаются к приборам не напрямую, а через промежуточное реле, которые расположены в непосредственной близости от прибора. От степени жирности реле зависит уровень помехоустойчивости.
Так же можно последовательно с кнопкой включать диод или даже цепочку диодов в нужном направлении.
То есть основная задача - увеличить ток в цепи управления.

IVM
02.02.2022, 10:13
vsaТак же можно последовательно с кнопкой включать диод или даже цепочку диодов в нужном направлении.
То есть основная задача - увеличить ток в цепи управления.

Как последовательное включение с кнопкой диода или даже цепочки диодов может увеличить ток в цепи управления ?

petera
02.02.2022, 10:21
Как последовательное включение с кнопкой диода или даже цепочки диодов может увеличить ток в цепи управления ?

Ни как....
Только уменьшить, хоть и не значительно.

Sulfur
02.02.2022, 13:28
IVM
Вероятно я не совсем точно выразился. Ток вырастет при использовании реле. При применении диодов повысится помехоустойчивость из за того, что для открытия p-n-перехода диода требуется некое напряжение, обычно 0.6в для обычных кремниевых диодов. У меня на станке ЧПУ так включены индуктивные датчики начала\предела осей с выходом ОК. Причем повода к датчикам идут в одном гибком и весьма тесном канале в одном пучке с проводами ШД и шпинделя (от ПЧ). Проблем не наблюдаю.
Возможно стоит уточнить у автора вопроса характер источника помех. И если источник высокочастотный (например неэкранированный кабель от мощного ПЧ к двигателю), то вероятно придется использовать индуктивно-конденсаторный фильтр. Самое простое решение - вырезать лобзиком входной сетевой фильтр от мертвого драйвера ЛЕД или ЛДС.

vsa
03.02.2022, 09:33
IVM
Вероятно я не совсем точно выразился. Ток вырастет при использовании реле. При применении диодов повысится помехоустойчивость из за того, что для открытия p-n-перехода диода требуется некое напряжение, обычно 0.6в для обычных кремниевых диодов. У меня на станке ЧПУ так включены индуктивные датчики начала\предела осей с выходом ОК. Причем повода к датчикам идут в одном гибком и весьма тесном канале в одном пучке с проводами ШД и шпинделя (от ПЧ). Проблем не наблюдаю.
Возможно стоит уточнить у автора вопроса характер источника помех. И если источник высокочастотный (например неэкранированный кабель от мощного ПЧ к двигателю), то вероятно придется использовать индуктивно-конденсаторный фильтр. Самое простое решение - вырезать лобзиком входной сетевой фильтр от мертвого драйвера ЛЕД или ЛДС.

А можно прояснить, что это за драйвер ЛЕД или ЛДС? Покажите на фото.

kondor3000
03.02.2022, 09:47
А можно прояснить, что это за драйвер ЛЕД или ЛДС? Покажите на фото.

Да обычный дроссель, стоит на входе любого устройствы по сети, в лампах тоже дроссель стоит. Фото из сети, дроссель в середине59080
Речь идёт про L-C фильтр из дросселя вырезанный лобзиком из платы))) Это надо додуматься было, проще выпаять )

Cs-Cs
03.02.2022, 10:03
Я краем глаза читал про наводки. Могу влезть невпопад.
Про наводки мне попалось видео Алекса Жука (дядька классный и хорошо рассказывает про энергетику и силовые подстанции).
Там он говорит о том, что из-за ёмкости кабелей на переменном токе в цепях управления могут быть большие токи, которые даже релюшку развязки заставят сработать:

https://www.youtube.com/watch?v=HBxq4RTG9GE

Возможно, это то, о чём щас идёт речь.

Sulfur
03.02.2022, 11:31
Это надо додуматься было, проще выпаять
Драйверы бывают разные.
Например такие:
59084

vsa
03.02.2022, 15:26
Нужен совет форума. Опять оптимизирую код программы. У меня в программе в двух POU встречаются однотипные куски программного кода, работающие с одним и тем же таймером. Пример куска привожу.
PROGRAM DOWN_AO2
VAR
Flag_Pult_3: BOOL;
Flag_Pult_4: BOOL;
Flag_Pult_5: BOOL;
Flag_Pult_6: BOOL;
Flag_Pult_7: BOOL;

Pausa_Pult_3:TON;
Pausa_Pult_4:TON;
Pausa_Pult_5:TON;
Pausa_Pult_6:TON;
Pausa_Pult_7:TON;

END_VAR
.......

(* Пауза 2 сек пред включением Пульта 3 *)
Pausa_Pult_3(IN:=Flag_Pult_3,PT:= T#2s);

IF Pausa_Pult_3.Q THEN
Flag_Pult_3 := FALSE;
Pult.3 := TRUE; (* Вкл Пульт 3 *)
END_IF
....
Таких блоков в это POU 5 шт.
Подскажите, как можно эти куски воплотить в ФБ и работать с ними. В предложенном примере я включаю пульты выпрямителей Flex Kraft. Но не сразу, а через две секунды. Так необходимо по технологии.

vsa
03.02.2022, 18:52
Вроде, сам все и сделал. Но если, кто покажет свое видение, то буду благодарен.
...
Поспешил с результатами своих достижений. Клапаны включаются, но не выключаются. Не могу сбросить в ФБ значение входного флага. Не понимаю, как это можно сделать.
Привожу пример моего описания ФБ:
59099

kondor3000
03.02.2022, 20:48
Вроде, сам все и сделал. Но если, кто покажет свое видение, то буду благодарен.
...
Поспешил с результатами своих достижений. Клапаны включаются, но не выключаются. Не могу сбросить в ФБ значение входного флага. Не понимаю, как это можно сделать.
Привожу пример моего описания ФБ:

Вы в блоке объявили локальную входную и выходную переменную
VAR_INPUT
Flag_Pult: BOOL;
END_VAR
Из программы вы должны ее переключать, уже переменной In1 =====> On_Pult(Flag_Pult:=In1 , On=>Out1 ); (*ФБ в программе PLC_PRG *)
а вам надо было её в глобальных поместить, как и выход.

В данном случае делать ФБ даже не надо было, мне кажется. Сами же запутались во входах и выходах.

vsa
07.02.2022, 12:01
Все! ПЛК на столе! Есть задумка подключить его через Ethernet для работы с CodeSYS. Но мой компьютер подключен к роутеру. Как в этом случае лучше подключать и настраивать соединение? Наверно, роутер отключать на время сеансов работы с ПЛК?

Sulfur
07.02.2022, 12:21
vsa
У меня ноутбук, и проблем с подключением нет, поскольку изначально имеются два сетевых интерфейса.
В вашем случае можно:
1. Поставить дополнительную сетевую карту в комп, которая будет использоваться только для ПЛК.
2. Поставить вай-фай-свисток, и через него настроить интернет, а сетевой интерфейс использовать для ПЛК.

Cs-Cs
07.02.2022, 13:37
Все! ПЛК на столе! Есть задумка подключить его через Ethernet для работы с CodeSYS. Но мой компьютер подключен к роутеру. Как в этом случае лучше подключать и настраивать соединение? Наверно, роутер отключать на время сеансов работы с ПЛК?
Нет, не так. Надо задать для ПЛК статический IP-адрес, который будет находиться в той же сети, котрую раздаёт роутер. Sulfur написал решение по типу "Костыли".
Чтобы сделать всё нормально для настольного варианта, надо знать про обычные компьютерные сети на уровне IP-адреса, роутера, DHCP, маски сети.
Мои вещи расписаны на случай, если в компе есть Ethernet-порт, куда временно ПЛК можно воткнуть напрямую без роутера.
1. Смотрим, из какого диапазона роутер раздаёт IP-адреса (какой-то IP-адрес у компьютера в сети). Например, это может быть 192.168.x.x или 10.0.x.x. Предположим, сеть будет иметь адреса 192.168.1.x.
2. Выбираем для ПЛК какой-нибудь не занятый адрес из этого диапазона сети (10-250). Можно взять адрес побольше, так как адрес должен быть уникальный, а обычно роутеры раздают новым устройствам адреса по возрастанию. Например, можно взять 192.168.1.250.
3. Отключаем патч-корд с сетью роутера от компа (или WiFi-инет) и подключаем ПЛК патч-кордорм напрямую: "ПЛК <> Ethernet-порт компа".
4. В свойствах сетевой карты меняем настройки на ручные из диапазона адреса ПЛК по умолчанию (10.0.6.10). Например, задаём компьютеру адрес 10.0.6.1. Маску ставим везде 255.255.255.0, а шлюз - никакой.
5. После этого в Codesys в разделе "Онлайн-Параметры связи" проверяем, что там настроено подключение по IP-адресу и стоит адрес ПЛк поумолчанию - 10.0.6.10.
6. Подключаемся (ПЛК при этом уже должен быть включен - достатоно на него питание подать). Нам сразу скажут, что в ПЛК нет программы и предложат её загрузить. Пофиг что - загружаем.
7. Идём в CodeSys в дерево "Ресурсы - ПЛК-браузер (третий снизу)" и отдаём команды:
SetGate ...IP-адрес роутера (!!), например 192.168.1.1
SetIP ...Новый IP-адрес плк, который мы выдумали - 192.168.1.250
после этого связь с ПЛК сразу же пропадёт и всё отвалится. Так и надо.
8. Отключаемся от ПЛК.
9. Втыкаем ПЛК в роутер как обычно (как и другое устройство в сети).
10. Сетку от роутера подключаем к компу как обычно.
11. В Codesys в разделе "Онлайн-Параметры связи" меняем IPшник на тот, который мы задили ПЛК - и проверяем связь.

После этого ПЛК уже будет находиться в общей сети, которой рулит роутер, и его можно программировать как угодно.
А когда ПЛК привезётся на объект - то тогда надо (если там есть своя сетка) таким же образом по месту поменять IP в нём на местный.

kondor3000
07.02.2022, 13:40
Все! ПЛК на столе! Есть задумка подключить его через Ethernet для работы с CodeSYS. Но мой компьютер подключен к роутеру. Как в этом случае лучше подключать и настраивать соединение? Наверно, роутер отключать на время сеансов работы с ПЛК?

До недавнего времени сидел на работе напрямую Комп-ПЛК через кабель изернет. Надоело всё, дома так не удобно, плюнул, для изменения IP
подключился дома через Debag-232, записал через браузер новый IP и теперь дома сижу подключённый через свичт и роутер, работает и ПЛК и интернет.

Всегда нужен резервный канал (Debag-232 или USB) , на случай если IP неправильно запишется. И пароль на первое время не ставьте.

vsa
07.02.2022, 18:19
Задача упрощается. Короче, нет связи. Прямое соединение ПК-ПЛК. Адреса ПЛК (10.0.6.10). Адрес 10.6.0.33. Маска 255.255.0.0, а шлюз - 10.0.6.10. Все сделал, как в фильме от ОВЕН.
На что CodeSYS ответила сообщением - "Ошибка связи (#0): произошло отключение"
5917159172
На ноутбуке стоит WIN-XP!
Если не найду причину, то придется на стационарный ПК переходить.

Cs-Cs
07.02.2022, 18:25
Маску сделай 255.255.255.0 и проверь.
У меня WinXP, на ней всё ок.

kondor3000
07.02.2022, 18:36
Задача упрощается. Короче, нет связи. Прямое соединение ПК-ПЛК. Адреса ПЛК (10.0.6.10). Адрес 10.6.0.33. Маска 255.255.0.0, а шлюз - 10.0.6.10. Все сделал, как в фильме от ОВЕН.
На что CodeSYS ответила сообщением - "Ошибка связи (#0): произошло отключение"

На ноутбуке стоит WIN-XP!
Если не найду причину, то придется на стационарный ПК переходить.
На компе в IP адресе 6 и 0 переставлены)))
Должно быть 10.0.6.33
А шлюз 10.0.6.1 Шлюз не должен быть как ПЛК, должна быть 1 на конце.

Вот так люди и остаются без ПЛК, сказал, сначала USB или DEBAG 232.

VaBo
07.02.2022, 18:45
У меня последние ПЛК пришли с IP 10.2.11.119

vsa
07.02.2022, 20:09
На компе в IP адресе 6 и 0 переставлены)))
Должно быть 10.0.6.33
А шлюз 10.0.6.1 Шлюз не должен быть как ПЛК, должна быть 1 на конце.

Вот так люди и остаются без ПЛК, сказал, сначала USB или DEBAG 232.

Вы думаете, я испортил порт настройками? На стационарном (WIN10) все работает по Ethernet! Мне в итоге так и так на изернет выходить. Внешняя программа работает по Ethernet.
А в доке на ПЛК адрес 10.0.6.10 Маска 255.255.255.0 и DNS 10.0.6.1

kondor3000
07.02.2022, 20:25
Вы думаете, я испортил порт настройками? На стационарном (WIN10) все работает по Ethernet! Мне в итоге так и так на изернет выходить. Внешняя программа работает по Ethernet.
А в доке на ПЛК адрес 10.0.6.10 Маска 255.255.255.0 и DNS 10.0.6.1

Я не думаю, что вы порт испортили, просто с 2 ошибками, при смене IP в самом ПЛК, могут проблемы начаться. Поэтому и написал про другое подключение.
У меня поначалу, даже со сменой времени в ПЛК не сразу получалось.

vsa
08.02.2022, 11:53
Подключил ПЛК к ПК по Ethernet. Загрузил проект. Вижу, что все работает. Отключился. Перезапускаю ПЛК, а индикатор Работа не горит. Как сделать, чтобы после перезагрузки контроллер стартовал сам?

petera
08.02.2022, 12:03
Подключил ПЛК к ПК по Ethernet. Загрузил проект. Вижу, что все работает. Отключился. Перезапускаю ПЛК, а индикатор Работа не горит. Как сделать, чтобы после перезагрузки контроллер стартовал сам?

Загрузил проект и Меню Онлайн-->Создание загрузочного проекта

Cs-Cs
08.02.2022, 12:19
Загрузил проект и Меню Онлайн-->Создание загрузочного проекта
...и ещё переключатель на ПЛК в режим "Работа" перевести не забыть.

Это всё сделано для того (и было в инструкциях!), чтобы:
а) Без команды загрузочного проекта в ПЛК будет запускаться предыдущий проект (или, если его нет - ничего). Это сделано для того, чтобы можно было на лету что-то поменять, загрузить правленный проект и, если с ним что-то не то случилось, просто передёрнуть питание ПЛК и вернуть всё как было.
б) Без положения переключателя в "Работа" проект в ПЛК тоже не загружается. Принцип тот же: если проект настолько адски глючит что завешивает ПЛК (или завставляет его тормозить или постоянно перезагружаться), то его можно не запускать и залить в ПЛК новый проект.

vsa
08.02.2022, 12:34
Cs-Cs, спасибо! Я после опубликования этого вопроса, интуитивно понял, что нужно искать ответ в моей настольной "Библии" по работе с ПЛК ОВЕН (твои интернет ресурсы - "ПЛК ОВЕН 110: Программируем на СodeSYS v2.3" ) . А там с хорошими иллюстрациями и находился ответ! А про переключатель я не знал. Буду постоянно держать его в рабочем положении.

kondor3000
08.02.2022, 13:53
Подключил ПЛК к ПК по Ethernet. Загрузил проект. Вижу, что все работает.

Ну, поздравляю с почином)))

Cs-Cs
08.02.2022, 14:18
vsa Не за что!! Чёрт, при случае надо будет туда дописать про переключатель этот!

vsa
08.02.2022, 16:59
Вам большое спасибо! Без Вашей помощи я бы вообще не осилил бы проект. Представляете, более 15 лет работал с совершенно другими контроллерами и средами программирования. А тут возникла проблема с комплектующими и поступило предложение перейти на ОВЕН. Думал, не смогу все перевести в новую среду. Правда, только завтра появится АС4 для конфигурирования модулей расширения. Интересно, а можно без программы конфигурирования настроить модули?

kondor3000
08.02.2022, 17:35
Интересно, а можно без программы конфигурирования настроить модули?

А смысл? Они программируются по протоколу ОВЕН, у всех МВВ свои параметры, для каждого придётся писать программу с его регистрами.
Многие поддерживают автоматически протоколы, а в некоторых протокол выбирается. Если в модулях меняете адреса, протокол или скорость, изменения вступают в силу только после перезагрузки по питанию.

Емельянов Кирилл
09.02.2022, 00:38
в моей настольной "Библии" по работе с ПЛК ОВЕН (твои интернет ресурсы - "ПЛК ОВЕН 110: Программируем на СodeSYS v2.3" )
Вашей библией должна быть кнопка "F1" и документация производителя

Cs-Cs
09.02.2022, 07:03
Вашей библией должна быть кнопка "F1" и документация производителя
Не согласен. Он вообще мой пост нашёл поиском. А пост от 2016 года от меня - новичка для новичков. Где сказана всё последовательность действий для ситуации "Вы только что достали ПЛК из коробки и первый раз его видите".

vsa
09.02.2022, 13:31
Вопрос по Конфигуратору. Настраиваю модули МВ110-224.16ДН и МУ110-224.16Р. Базовый контроллер 110-60[M02].
Подскажите, какие должны быть параметры у модулей, если первый модуль будет под Adr=1, а второй Adr=2. Модули будут стоять вплотную к контроллеру.
Скорость обмена, протокол, максимальный сетевой тайм-аут. Задержка ответа ....

vsa
09.02.2022, 14:03
Час от часу не легче. После записи конфигурации в модуль VD110-224.16ДН - загорелся индикатор АВАРИЯ!!! Это что, - модулю хана? А с чего могло быть такое?

saii
09.02.2022, 14:17
Вопрос по Конфигуратору. Настраиваю модули МВ110-224.16ДН и МУ110-224.16Р. Базовый контроллер 110-60[M02].
Подскажите, какие должны быть параметры у модулей, если первый модуль будет под Adr=1, а второй Adr=2. Модули будут стоять вплотную к контроллеру.
Скорость обмена, протокол, максимальный сетевой тайм-аут. Задержка ответа ....

Учитывая, что эти модули настраиваются по протоколу ОВЕН, я бы рекомендовал адреса задавать с интервалом, т.е. адрес первого модуля = 1, адрес второго = адрес первого + кол-во вх/вых первого модуля, адрес третьего модуля = адрес второго + кол-во вх/вых второго модуля и т.д.

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

vsa
09.02.2022, 14:21
Лампочку погасил

vsa
09.02.2022, 14:22
Учитывая, что эти модули настраиваются по протоколу ОВЕН, я бы рекомендовал адреса задавать с интервалом, т.е. адрес первого модуля = 1, адрес второго = адрес первого + кол-во вх/вых первого модуля, адрес третьего модуля = адрес второго + кол-во вх/вых второго модуля и т.д.

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

Т.е первый модуль адрес- 1, а второй 17? А скорость какую поставить?

saii
09.02.2022, 15:22
Т.е первый модуль адрес- 1, а второй 17? А скорость какую поставить?

По адресации - да, а скорость зависит от возможностей и потребностей, единственное они все должны работать на одной скорости.

vsa
09.02.2022, 16:22
Выручайте! Входной модуль работает отлично по RTU Modbus. А с выходным модулем (МУ110-224.16Р) засада. Не пойму , как правильно настроить сетевые параметры.
Привожу скрины конфигуратора и CodeSYS.592185921959220
Адрес модуля в сети 17. Адрес регистра указал, как 0. Возможно не правильно.
В данный модуль выставляю в первых 7 разрядах True или False. Я этим модулем вкл. и выкл. обычные реле на 24В. В документации на выходной модуль Громадная таблица с адресами регистров.
Не понимаю зачем? Ведь у меня один 16-разрядный регистр. У него должен быть адрес, к которому и обращается ПЛК. И почему-то в конфигураторе не было пункта по выбору протокола обмена. Я понял, что протокол выбирается автоматически при запросе данных.
Посмотрите пожалуйста на мои настройки. Почему не работает?

YuriBel
09.02.2022, 16:56
Почему не работает?
Потому что надо ВНИМАТЕЛЬНО читать РЭ, например страницу 23. Особенно обратить внимание на номер команды записи. И если не нужен ШИМ, то удобнее работать с выходами через регистр маски (там же, на стр. 23).

Cs-Cs
09.02.2022, 16:57
Ведь у меня один 16-разрядный регистр.
Верно. Маска всех выходов (16ти штук).
Только ты его номер не указал. У тебя щас ПЛК пытается писать в регистр 0 (третий скриншот), а тебе в Register Output Module надо поставить номер регистра маски выходов (ща... лезу в документацию) 50 в десятичной системе.

vsa
09.02.2022, 17:08
Потому что надо ВНИМАТЕЛЬНО читать РЭ, например страницу 23. Особенно обратить внимание на номер команды записи. И если не нужен ШИМ, то удобнее работать с выходами через регистр маски (там же, на стр. 23).

А что такое РЭ? Хочу взглянуть.

vsa
09.02.2022, 17:09
Верно. Маска всех выходов (16ти штук).
Только ты его номер не указал. У тебя щас ПЛК пытается писать в регистр 0 (третий скриншот), а тебе в Register Output Module надо поставить номер регистра маски выходов (ща... лезу в документацию) 50 в десятичной системе.

И это я заметил недавно. Изменил. Пока не работает выход. Я в лоб записал Pult.1:=True; Не вижу на модуле реакции.

vsa
09.02.2022, 17:12
И это я заметил недавно. Изменил. Пока не работает выход. Я в лоб записал Pult.1:=True; Не вижу на модуле реакции.

И еще, указал функцию Modbus 0x10

YuriBel
09.02.2022, 17:27
А что такое РЭ? Хочу взглянуть.

Взглядывай...
https://owen.ru/uploads/291/re_mu110-224.16k_r__1-ru-32751-1.14.pdf

In_Da_Cher_A
09.02.2022, 17:30
глядя как всем форумом делают этот проект, спустя 10 страниц вопросов по каждому клику мышкой, рискну задать вопрос

Адрес регистра указал, как 0.а на основании каких фактов, вы указали этот регистр как НОЛЬ????? поделитесь пожалуйста своей цепочкой логических умозаключений, на основании которых вы сделали вывод, что вам нужно поставить НОЛЬ?

А что такое РЭ? Хочу взглянуть.Руководство по эксплуатации модуля, которые вы не читали, точнее открыли, увидели "Громадная таблица с адресами регистров". и закрыли?

Pult.1:=True Не вижу на модуле реакции.а это выражение какое имеет отношение имеет к выходному модулю?

vsa
09.02.2022, 17:33
Вопросы снимаю! Все заработало! Всем спасибо!
Ошибка была в том, что я в конфигураторе адрес выставил не 17 (!) , а 2, как раньше хотел! В CodeSYS изменил на 2 и все заработало! Всем СПАСИБО!!!

In_Da_Cher_A
09.02.2022, 17:42
Ошибка была в том, что я в конфигураторе адрес выставил не 17 (!) , а 2, как раньше хотел! В CodeSYS изменил на 2 и все заработало! Всем СПАСИБО!!!сказал человек, запостивший скрин с конфигуратора с адресом 17
59222
https://c.tenor.com/Oi40chdp3HsAAAAC/oh-no-face-palm.gif

vsa
09.02.2022, 18:12
сказал человек, запостивший скрин с конфигуратора с адресом 17
59222
https://c.tenor.com/Oi40chdp3HsAAAAC/oh-no-face-palm.gif

Именно! сделал скрин, а позже исправил на 2!
Видео про меня! Класс!

vsa
09.02.2022, 21:26
Не успокоился. Обратил внимание, что в ПЛК110-24.60.Р-М у третьего выходного регистра используются всего 4 выхода? Или я, опять, что-то попутал? Стал прогонять программу на контрольных примерах и обратил внимание, что при активизации выходов индикаторы показывают активность со сдвигом на 4. О как! На лицевой панели ПЛК имеются индикаторы FDO (4 шт) и DO (20 шт.) А можно ли использовать Fast discret outputs, как обычные релейные выходы? Или имеются нюансы при их использовании?
59228

kondor3000
09.02.2022, 22:13
Откройте сайт или руководство и читайте отличия ПЛК с релейными выходами (24) от ПЛК с транзисторными выходами ( 4 быстрых +24 )

Newcomer
11.02.2022, 11:32
Добрый день.

Работаю с ПЛК160. Не пойму как создать Modbus TCP Slave.

ASo
11.02.2022, 11:42
MODBUS (slave)
В нем MODBUS [FIX]
В нем TCP с номерами портов (502)
И в MODBUS (slave) элементы.

Newcomer
11.02.2022, 13:34
Спасибо. Создал. Еще вопрос. Какой у первого регистра будет адрес.

Mr Helper
11.02.2022, 13:42
Спасибо. Создал. Еще вопрос. Какой у первого регистра будет адрес.

создали word, значит заняли 0 регистр

kondor3000
11.02.2022, 13:42
Спасибо. Создал. Еще вопрос. Какой у первого регистра будет адрес.

Нулевой адрес будет, неужели так трудно несколько страниц назад прочитать, троим недавно объясняли)))

petera
11.02.2022, 13:46
Спасибо. Создал. Еще вопрос. Какой у первого регистра будет адрес.

Адреса начинаются с 0, а дальше, каждый следующий элемент в зависимости от типа элемента
2 byte +1 к текущему адресу
4 byte +2 и только четные, если перед ним нечетное кол., то автоматом смещается к большему четному значению
8 bit - 1/2 регистра, но адрес следующeго будет + 1 для 2 byte или 4 byte
8 bit+8 bit - один регистр или + 1,

https://owen.ru/forum/attachment.php?attachmentid=12345&d=1395648726

Причем адресное пространство для регистров и бит общее

Newcomer
11.02.2022, 13:58
Спасибо всем. Как все просто.

vsa
11.02.2022, 14:55
petera, а как Вы получили такую красивую картинку распределения регистровой памяти?

Mr Helper
11.02.2022, 14:59
petera, а как Вы получили такую красивую картинку распределения регистровой памяти?

Она в руководстве есть

Mr Helper
11.02.2022, 15:01
petera, а как Вы получили такую красивую картинку распределения регистровой памяти?

https://ftp.owen.ru/CoDeSys23/06_Documentation/Plc1xx_PlcConfiguration_v2.0.pdf
52 страница

vsa
11.02.2022, 20:20
https://ftp.owen.ru/CoDeSys23/06_Documentation/Plc1xx_PlcConfiguration_v2.0.pdf
52 страница

Спасибо. В документации я это раньше видел, но я-то думал, что такие распределения памяти сама среда CodeSYS строить может.

In_Da_Cher_A
13.02.2022, 10:04
такие распределения памяти сама среда CodeSYS строить может.http://risovach.ru/upload/2018/03/mem/dvoe-iz-larca_172127487_orig_.jpg

Sulfur
17.02.2022, 14:29
Доброго здравия всем.
Делаю один вялотекущий проект на базе ПЛК110-30М2 и модулей стороннего производителя.
Заплюхался с битовой адресацией по модбас.
Требуется обратиться через UMB 2byte по адресу 0x303. Не могу сообразить какой адрес регистра выставить в конфиге ПЛК.
С регистрами 4хNNNN проблем нет. Например при чтении из регистров 280 и 281 получаю данные с внешнего модуля.
59384
Это модуль опроса тензодатчиков, требуется передать бит для установки нуля.

capzap
17.02.2022, 14:48
Требуется обратиться через UMB 2byte по адресу 0x303.
не получится читать регистром, это чисто битовые адреса

kondor3000
17.02.2022, 15:55
Доброго здравия всем.
Делаю один вялотекущий проект на базе ПЛК110-30М2 и модулей стороннего производителя.
Заплюхался с битовой адресацией по модбас.
Требуется обратиться через UMB 2byte по адресу 0x303. Не могу сообразить какой адрес регистра выставить в конфиге ПЛК.
С регистрами 4хNNNN проблем нет. Например при чтении из регистров 280 и 281 получаю данные с внешнего модуля.

Это модуль опроса тензодатчиков, требуется передать бит для установки нуля.
В ПЛК надо добавить по 2шт 8 бит адреса 19 и 20
0х303 - 19 адрес бит 15,
0х304 - 20 адрес бит 0 и т.д.
По крайней мере попробовать так.

capzap
17.02.2022, 15:58
В ПЛК надо добавить по 2шт 8 бит адреса 18 и 19
0х303 - 18 адрес бит 15,
0х304 - 19 адрес бит 0 и т.д.

а Вы с чего решили что модули стороннего производителя объединяют область памяти регистров и коилсов?
лучше так пробовать 59388

Sulfur
17.02.2022, 19:50
модули стороннего производителя объединяют область памяти регистров и коилсов?
Есть предположение. У меня имеется HMI этого же производителя. Битовые элементы (кнопки, индикаторы, etc) общаются именно через 0xNNNN, без возможности объединения в слова. Подключена к тому же ПЛК на другой физический порт. Панель мастер. Например на порту(слейв) делаю три регистра WORD, первые два для обмена туда-сюда, третий для передачи на HMI данных. В HMI к первым двум регистрам обращаюсь как 0х0001...0х00032 (адресация с 1), к третьему регистру обращаюсь как 3х0003.
Оно?
Информации по девайсам крайне скудно, изучаю практически методом научного тыка.

kondor3000
17.02.2022, 20:13
Есть предположение. У меня имеется HMI этого же производителя. Битовые элементы (кнопки, индикаторы, etc) общаются именно через 0xNNNN, без возможности объединения в слова. Подключена к тому же ПЛК на другой физический порт. Панель мастер. Например на порту(слейв) делаю три регистра WORD, первые два для обмена туда-сюда, третий для передачи на HMI данных. В HMI к первым двум регистрам обращаюсь как 0х0001...0х00032 (адресация с 1), к третьему регистру обращаюсь как 3х0003.
Оно?
Информации по девайсам крайне скудно, изучаю практически методом научного тыка.

Если в устройстве биты считаются с 1, то и регистры должны считаться с 1.
Тогда В ПЛК надо добавить по 2шт 8 Bit Output адреса 288 и 296
0х303 - 18 регистр бит 14,
0х304 - 18 регистр бит 15 и т.д.
Кстати на панели можно и проверить.

ЗЫ У меня панель К...о на столе, панель мастер. Адреса битов и регистров +1 от адресов ПЛК . Проверил, биты не накладываются на регистры.
В ПЛК154 слейв, добавлены 2 шт. 8бит, бит 0 адрес 0 попадают в панели в 0х1 ,
регистр 2 BYTE с адресом 1 из ПЛК попадает в панели в 4х2
регистр 2 BYTE с адресом 2 из ПЛК попадает в панели в 4х3 и т. д.

kondor3000
19.02.2022, 15:08
Доброго здравия всем.
Делаю один вялотекущий проект на базе ПЛК110-30М2 и модулей стороннего производителя.
Заплюхался с битовой адресацией по модбас.
Требуется обратиться через UMB 2byte по адресу 0x303. Не могу сообразить какой адрес регистра выставить в конфиге ПЛК.
С регистрами 4хNNNN проблем нет. Например при чтении из регистров 280 и 281 получаю данные с внешнего модуля.

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

Вот, сделал тест, ПЛК мастер. Для записи в устройство добавил 2 штуки 8 Bit Output. Для битов надо прописывать номер нулевого бита в адресе.
8 Bit Output - биты 288-295
8 Bit Output - биты 296-303
В UMD поставить запись по изменению.

Со смещением +1 надо использовать биты 302 и 303, для включения 0х303 и 0х304 59415
Проверено на реальной панели со смещением +1 к битам и регистрам.
Так же добавлены UMD чтения ( чтение циклическое), 2 штуки 8 Bit Input адреса 288 и 296, ПЛК и читает и пишет правильно.

alex55
21.02.2022, 06:37
Доброе утро! Чтобы не плодить новых тем, подскажите пжст. как попроще сменить платформу проект на ПЛК 110 (СТАРОМ) перейти на ПЛК110 М02, чтобы только внести переменные в конфигуратор, возможно ли это. Спасибо.

kondor3000
21.02.2022, 09:40
Доброе утро! Чтобы не плодить новых тем, подскажите пжст. как попроще сменить платформу проект на ПЛК 110 (СТАРОМ) перейти на ПЛК110 М02, чтобы только внести переменные в конфигуратор, возможно ли это. Спасибо.

Можно сменить целевую платформу, нажать стандартная конфигурация в Дополнениях и набить конфиг руками. Можно сменить платформу, нажать стандартная конфигурация в Дополнениях и перенести конфиг с помощью программы, но потребуется правка, на 1 странице сама программа и инструкция, на 2 странице написано как править при переходе со старого на новый https://owen.ru/forum/showthread.php?t=18269

alex55
21.02.2022, 19:45
kondor3000 спасибо большое, помогло..

vsa
25.02.2022, 15:53
Имеется задача подключить к ПЛК110 по RS-485 (Modbus RTU) семь устройств. Устройства не от фирмы ОВЕН. Буду читать и записывать 16-ти битные слова во внутренние регистры внешних модулей. Подскажите, каким образом можно контролировать канал связи – свободный он или занят для посылки данных на удаленное устройство? У меня будут ситуации, когда нужно сразу нескольким устройствам необходимо выдать команды по сети.

kondor3000
25.02.2022, 17:10
Если записывать через конфигурацию, то контролировать ничего не надо. Добавляете 7 штук. UMD, каждый со своим адресом слейва, ставите запись по изменению. Добавляете cколько надо Registr Output со своими именами, функция записи 0х10. При изменении любого регистра ( нескольких регистров) производится последовательная запись в устройства, время поставьте 10 мс. Если адреса регистров подряд и их много, можно сделать групповую запись.

vsa
25.02.2022, 18:34
Спасибо. Если это так, то мне нравится такое обращение с каналом в ПЛК ОВЕН. Значит, ПЛК сам занимается слежением за каналом. Буду пробовать.

Newcomer
27.02.2022, 11:37
Добрый день.

Работаю с ПЛК160. Создал Modbus TCP Slave. А можно ли создать Modbus TCP Master ? Т.е. может ли ПЛК быть в одной сети и Master и Slave.

ASo
27.02.2022, 11:44
Может.
Modbus Maser - Universal Modbus Device и выбираете адрес/порт запроса.

Newcomer
27.02.2022, 11:47
Один и тот же ПЛК, не может быть в одной сети Modbus TCP и мастер и слейв.

Это почему ? В сети RS-485 это точно невозможно, а в TCP какие могут быть проблемы ?

Newcomer
28.02.2022, 23:05
Добрый вечер.

Правильно ли сконфигурирован Modbus TCP Master ?

Newcomer
01.03.2022, 12:48
А что не так?
Если с другой стороны овен же, то из-за "бу ченже" слейв может закрыться если нет транзакций.

Мастер(клиент) программный - гибчее

Значит у меня все OK ?

Валенок
01.03.2022, 18:08
На картинке окею ничего не мешает.

Mordan
09.03.2022, 11:44
Здравствуйте.
Овен ПЛК 110 М02 управляет несколькими ПЧ Овен по RS-485 Modbus RTU. Как можно определить, что в процессе работы один из ПЧ потерял связь с ПЛК (обрыв кабеля связи или нет питания на ПЧ)?
Спасибо

capzap
09.03.2022, 11:51
Здравствуйте.
Овен ПЛК 110 М02 управляет несколькими ПЧ Овен по RS-485 Modbus RTU. Как можно определить, что в процессе работы один из ПЧ потерял связь с ПЛК (обрыв кабеля связи или нет питания на ПЧ)?
Спасибо

в документации не пробовали искать ответы? 59600

дрю
15.03.2022, 11:56
Добрый день!
Есть переменная типа INT (например TEMP) которая принимает 5 фиксированых значения (0,10,50,90,100). В зависимости от значения этой переменной мы выполняем действие или не выполняем:
IF TEMP =0,10,50 THEN
выпоняем действие;
ELSE
не выполняем действие;
END_IF;
Собственно вопрос: каков синтаксис значений переменной TEMP что бы это выглядело компактно. Можно конечно написать коряво:
IF TEMP=0 OR TEMP=10 OR TEMP=50 THEN
и.т.д. но ведь коряво...

capzap
15.03.2022, 12:02
Добрый день!
Есть переменная типа INT (например TEMP) которая принимает 5 фиксированых значения (0,10,50,90,100). В зависимости от значения этой переменной мы выполняем действие или не выполняем:
IF TEMP =0,10,50 THEN
выпоняем действие;
ELSE
не выполняем действие;
END_IF;
Собственно вопрос: каков синтаксис значений переменной TEMP что бы это выглядело компактно. Можно конечно написать коряво:
IF TEMP=0 OR TEMP=10 OR TEMP=50 THEN
и.т.д. но ведь коряво...

может лучше CASE использовать чем IF-ы

IVM
15.03.2022, 12:09
Добрый день!
Есть переменная типа INT (например TEMP) которая принимает 5 фиксированых значения (0,10,50,90,100). В зависимости от значения этой переменной мы выполняем действие или не выполняем:
IF TEMP =0,10,50 THEN
выпоняем действие;
ELSE
не выполняем действие;
END_IF;
Собственно вопрос: каков синтаксис значений переменной TEMP что бы это выглядело компактно. Можно конечно написать коряво:
IF TEMP=0 OR TEMP=10 OR TEMP=50 THEN
и.т.д. но ведь коряво...

А что тут корявого ?

дрю
15.03.2022, 12:22
Да нет, думал есть более чтото компактное. Благодарю

AlexBut
16.03.2022, 10:54
PLC110 читается OPC modbus server'ом но нам надо подключить ещё один OPC modbus server к контроллеру PLC110 по TCP но
не получается- вероятно есть ограничение на количество сокетов? Не могу найти в CodeSYS 2.3.9.41 эту настройку- это нужно для перехода на
МастерСКАДА4 чтобы параллельно отрабатывать программы на 4-ке для последующего перехода

Спасибо

capzap
16.03.2022, 10:57
PLC110 читается OPC modbus server'ом но нам надо подключить ещё один OPC modbus server к контроллеру PLC110 по TCP но
не получается- вероятно есть ограничение на количество сокетов? Не могу найти в CodeSYS 2.3.9.41 эту настройку- это нужно для перехода на
МастерСКАДА4 чтобы параллельно отрабатывать программы на 4-ке для последующего перехода

Спасибо
один сокет одно соединение. Делайте второй слейв по 503 порту например

Newcomer
18.03.2022, 14:16
Добрый день.

Сколько у этого массива строк и сколько столбцов ?

M: ARRAY [1..4,1..50] OF INT;

kondor3000
18.03.2022, 15:00
Добрый день.

Сколько у этого массива строк и сколько столбцов ?

M: ARRAY [1..4,1..50] OF INT;

4 строки 50 столбцов, но записано это будет в одну строку)))
Пример mass1: ARRAY[1..4,1..5] OF INT:=5,6,11,15,9,14,4,31,21,27,1,5,6,20,11,91,7,37 ,8,22;
А выглядеть будет как столбец 59756

NoiZy
20.03.2022, 16:32
Здравствуйте,кто может помочь сделать программу простенькую мне нужно сделать шахматные часы. две кнопки, два таймера обратного отсчета
времени. Кнопка стоп игра.

capzap
20.03.2022, 19:05
Здравствуйте,кто может помочь сделать программу простенькую мне нужно сделать шахматные часы. две кнопки, два таймера обратного отсчета
времени. Кнопка стоп игра.

как то так

kao
26.03.2022, 15:47
Добрый день, изучаю пример работы с библиотекой UNM, чтобы реализовать обмен по символьному протоколу. Известно что на запрос модулю "$01M$R" должен прийти ответ "!017016P$R". Ответ приходит в совершенно ином виде, подскажите, что это за кодировка и как её можно конвертировать в символы ASCII?59913

AlexBut
28.03.2022, 10:54
Я создал объект ВНС-72 в среде разработки CodeSys , теперь надо перенести этот объект в большой рабочий проект. Как это лучше сделать?

petera
28.03.2022, 12:28
Я создал объект ВНС-72 в среде разработки CodeSys , теперь надо перенести этот объект в большой рабочий проект. Как это лучше сделать?

Проект экспорт...
Проект импорт...

AlexBut
29.03.2022, 12:33
Мне надо в большой проект состоящий из отдельных объектов(КНС,ВНС) втянуть объект разработанный на другом комп-ре в другом большом проекте, так чтобы не напортачить, не изменить
одноимённые объекты, т.е. в идеале втянуть только один объект(новый объект ВНС) а экспорт-импорт боюсь поломает одноимённые объекты т.к. я не увидел чтобы при импорте можно было выделить только один объект

kondor3000
29.03.2022, 13:28
Мне надо в большой проект состоящий из отдельных объектов(КНС,ВНС) втянуть объект разработанный на другом комп-ре в другом большом проекте, так чтобы не напортачить, не изменить
одноимённые объекты, т.е. в идеале втянуть только один объект(новый объект ВНС) а экспорт-импорт боюсь поломает одноимённые объекты т.к. я не увидел чтобы при импорте можно было выделить только один объект

Можно выделить один или несколько объектов без проблем. Нажатием мыши снять все выделения и удерживая Контрол, мышью выделить нужные.

AlexBut
30.03.2022, 03:30
Мне надо в большой проект состоящий из отдельных объектов(КНС,ВНС) втянуть объект разработанный на другом комп-ре в другом большом проекте, так чтобы не напортачить, не изменить
одноимённые объекты, т.е. в идеале втянуть только один объект(новый объект ВНС) а экспорт-импорт боюсь поломает одноимённые объекты т.к. я не увидел чтобы при импорте можно было выделить только один объект

kondor3000
30.03.2022, 10:08
Мне надо в большой проект состоящий из отдельных объектов(КНС,ВНС) втянуть объект разработанный на другом комп-ре в другом большом проекте, так чтобы не напортачить, не изменить
одноимённые объекты, т.е. в идеале втянуть только один объект(новый объект ВНС) а экспорт-импорт боюсь поломает одноимённые объекты т.к. я не увидел чтобы при импорте можно было выделить только один объект

Как выделить написал выше, ничего не поломает при экспорте, импорте. Если объекты с одинаковыми именами, перед экспортом сразу переименовать.

petera
30.03.2022, 10:21
Мне надо в большой проект состоящий из отдельных объектов(КНС,ВНС) втянуть объект разработанный на другом комп-ре в другом большом проекте, так чтобы не напортачить, не изменить
одноимённые объекты, т.е. в идеале втянуть только один объект(новый объект ВНС) а экспорт-импорт боюсь поломает одноимённые объекты т.к. я не увидел чтобы при импорте можно было выделить только один объект

Кто Вас заставляет экспортировать ВСЕ объекты из проекта-донора?
Можете экспортировать всего ОДИН объект (новый объект ВНС) !

ЗЫ
https://owen.ru/forum/attachment.php?attachmentid=59996&d=1648625239

hermano
31.03.2022, 01:35
Здравствуйте. Вопрос по переменным IN_OUT в FB.
Проблема такая. Я создаю блок с IN_OUT переменной. В документации написано, что передается адрес на переменную, нельзя константу, нельзя обратится напрямую через точку. В версии 3.5 все четко. Компилятор ругается на вышеописанные действия, блок работает правильно. А вот в версии 2.3 абсолютно такой же блок не работает. Причем я могу в переменную IN_OUT записать константу, обратится через точку и компилятор не выдает ошибку. Хотя если выбирать переменную в ниспадающем списке она отображается как IN_OUT. Если при вызове блока писать := то переменная работает как входная (т.е. переписывается внешним значением), а если => то как выходная (т.е. переписывает внешнюю переменную). А как IN_OUT не работает...

Я на 2.3 не писал раньше и не могу понять в чем дело.
Блок простейший:
FUNCTION_BLOCK Test_In_Out
VAR_IN_OUT
test: INT := 0;
END_VAR

IF test<32000 THEN
test:=test + 1;
ELSE
test:= 0;
END_IF

Вызов:
VAR
Test: Test_In_Out;
Test_var: INT:=0;
END_VAR
Test(test:=Test_var); Такой вариант работает на 3.5 и не работает на 2.3 (на 2.3 test работает как входная переменная)

единственный вариант заставить работать это после вызова блока дописать
Test_var:=Test.test; Но это противоречит сути этой переменной и компилятор в 3.5 выдает ошибку. а на 2.3 нормально запускается....

В чем может быть дело?

Евгений Кислов
31.03.2022, 06:27
Здравствуйте. Вопрос по переменным IN_OUT в FB.
Проблема такая. Я создаю блок с IN_OUT переменной. В документации написано, что передается адрес на переменную, нельзя константу, нельзя обратится напрямую через точку. В версии 3.5 все четко. Компилятор ругается на вышеописанные действия, блок работает правильно. А вот в версии 2.3 абсолютно такой же блок не работает. Причем я могу в переменную IN_OUT записать константу, обратится через точку и компилятор не выдает ошибку. Хотя если выбирать переменную в ниспадающем списке она отображается как IN_OUT. Если при вызове блока писать := то переменная работает как входная (т.е. переписывается внешним значением), а если => то как выходная (т.е. переписывает внешнюю переменную). А как IN_OUT не работает...

Я на 2.3 не писал раньше и не могу понять в чем дело.
Блок простейший:
FUNCTION_BLOCK Test_In_Out
VAR_IN_OUT
test: INT := 0;
END_VAR

IF test<32000 THEN
test:=test + 1;
ELSE
test:= 0;
END_IF

Вызов:
VAR
Test: Test_In_Out;
Test_var: INT:=0;
END_VAR
Test(test:=Test_var); Такой вариант работает на 3.5 и не работает на 2.3 (на 2.3 test работает как входная переменная)

единственный вариант заставить работать это после вызова блока дописать
Test_var:=Test.test; Но это противоречит сути этой переменной и компилятор в 3.5 выдает ошибку. а на 2.3 нормально запускается....

В чем может быть дело?

Добрый день.

Приведенный вами код не должен компилироваться в 2.3 из-за попытки инициализации VAR_IN_OUT переменной.

60016

Если убрать начальное значение - то программа компилируется и корректно работает.

В версии V3.5 конкретно этот же код не вызовет ошибок, потому что там компилятор несколько более продвинутый - он видит, что вы пытаетесь инициализировать переменную нулем (а это дефолтное поведение), и вообще не генерирует никакого кода для этого случая. Но если бы вы заменили 0 на любое другое число - то ошибка бы проявилась и в V3.5.

60017

hermano
31.03.2022, 08:42
Добрый день.

Приведенный вами код не должен компилироваться в 2.3 из-за попытки инициализации VAR_IN_OUT переменной.

60016

Если убрать начальное значение - то программа компилируется и корректно работает.

В версии V3.5 конкретно этот же код не вызовет ошибок, потому что там компилятор несколько более продвинутый - он видит, что вы пытаетесь инициализировать переменную нулем (а это дефолтное поведение), и вообще не генерирует никакого кода для этого случая. Но если бы вы заменили 0 на любое другое число - то ошибка бы проявилась и в V3.5.

60017

Спасибо, но мой компилятор не выдает ошибку и блок не работает. Переменная не работает как IN_OUT! Работает нормально только если после вызова блока добавить Test_var:=Test.test; Но ведь компилятор должен ругаться на такое обращение к переменной IN_OUT?

PS: Может это связано с версией codesys? У меня какой-то кривой, видимо, codesys 2.3, я на нем программирую только chitic. Установил 2.3.9, а потом установщик chitic что-то изменил в нем, и теперь codesys запускается только ярлыком chitic.

Евгений Кислов
31.03.2022, 08:50
Спасибо, заработало! Странно, но у меня компилятор 2.3 не дает ошибку, если присваиваю начальное значение IN_OUT и если я обращаюсь к этой переменной через точку извне блока. Но переменная переставала себя вести как IN_OUT, поэтому я и не мог понять, что происходит! Вроде все нормально, но не работает.
Еще раз спасибо!

PS: Может это связано с версией codesys? У меня какой-то кривой, видимо, codesys 2.3, я на нем программирую только chitic. Установил 2.3.9, а потом установщик chitic что-то изменил в нем, и теперь codesys запускается только ярлыком chitic.

Я использую версию 2.3.9.41 с нашего сайта.
Если вы используете другую версию - то, возможно, в ней еще не было этой проверки.

hermano
31.03.2022, 09:11
Я использую версию 2.3.9.41 с нашего сайта.
Если вы используете другую версию - то, возможно, в ней еще не было этой проверки.

Извиняюсь, я изменил сообщение. Так как наспех проверил другой код. В итоге не работает блок и не выдает ошибок компилятор... Вы ответили на первый вариант моего сообщения.
Сейчас поставлю опять версию с вашего сайта, попробую на ней.

Евгений Кислов
31.03.2022, 09:15
Извиняюсь, я изменил сообщение. Так как наспех проверил другой код. В итоге не работает блок и не выдает ошибок компилятор... Вы ответили на первый вариант моего сообщения.
Сейчас поставлю опять версию с вашего сайта, попробую на ней.

Лучше выложите ваш конкретный проект - я попробую повторить проблему у себя.

hermano
31.03.2022, 09:36
Лучше выложите ваш конкретный проект - я попробую повторить проблему у себя.

Вот проект. Он сделан в среде, которая получилась установкой Версии 2.3.9 с вашего сайта, а потом запущен установщик от chitic, который устанавливает таргеты, но при этом он создает свой ярлык на codesys и codesys запускается только с этого ярлыка...
также во вложении установщик от chitic

capzap
31.03.2022, 09:50
Вот проект. Он сделан в среде, которая получилась установкой Версии 2.3.9 с вашего сайта, а потом запущен установщик от chitic, который устанавливает таргеты, но при этом он создает свой ярлык на codesys и codesys запускается только с этого ярлыка...
также во вложении установщик от chitic

из ОВЕН у Вас я так понял только учетная запись на форуме

hermano
31.03.2022, 10:11
из ОВЕН у Вас я так понял только учетная запись на форуме

Нет, у меня много чего есть. Весовые терминалы, модули ввода/вывода, модемы с облаком и 210е контроллеры. Но это все не имело отношения к версии codesys 2.3.

компания ЛИТ (но закупки могут быть от разных фирм). Последняя покупка была 210тых, но пока еще не пришла. Я категорически против 2.3, так как когда-то бодался с ним уже на итоне (xsoft. лет 15 назад). Я за 210ый и 3.5, но меня ставят перед фактом...

ЗЫ:
собственно по понятным причинам ален, сименс, бр и шнайдер сейчас не в моде

Евгений Кислов
31.03.2022, 10:30
Нет, у меня много чего есть. Весовые терминалы, модули ввода/вывода, модемы с облаком и 210е контроллеры. Но это все не имело отношения к версии codesys 2.3.

компания ЛИТ (но закупки могут быть от разных фирм). Последняя покупка была 210тых, но пока еще не пришла. Я категорически против 2.3, так как когда-то бодался с ним уже на итоне (xsoft. лет 15 назад). Я за 210ый и 3.5, но меня ставят перед фактом...

ЗЫ:
собственно по понятным причинам ален, сименс, бр и шнайдер сейчас не в моде

1. Установка дистрибутива Сhitic и правда ломает стандартный Codesys 2.3.
2. Я проблему, конечно, вижу, но это вопрос к Сhitic и особенностям адаптации рантайма под использованный ими 16-битный Infineon.

hermano
31.03.2022, 10:32
1. Установка дистрибутива Сhitic и правда ломает стандартный Codesys 2.3.
2. Я проблему, конечно, вижу, но это вопрос к Сhitic и особенностям адаптации рантайма под использованный ими 16-битный Infineon.

Благодарю за разъяснения. Я сам не рад что приходится иметь дело с читиком...

Артем98
01.04.2022, 12:16
Добрый День, приобрел ПЛК110-60 М02 к нему подключен модуль дискретных выводов МУ210-401, к выходу модуля подключены драйверы которые управляют гибридными ШД вопрос заключается в том, что мне нужно программно включить двигатель на определенное количество импульсов дабы ШД повернулся на определённое количество оборотов и тд, получается так что выход модуля настроен на генератор импульсов и программа рассчитывает количество импульсов и задает на выход и выполняет то что нужно, но поскольку программа читается циклично то и выполнение поворотов не останавливается, а мне требуется чтобы после нажатия кнопки он повернулся на рассчитанное количество импульсов и остановился, потом если потребуется заново повторить, подскажите пожалуйста как это можно осуществить?
60039

IF in27=1 THEN
Lz:=Rz;
Ri:=Lz*10;
H:=500/ABS(Lz*10-37.5);
kol_vo_imp:= H*800/5;
okr:= REAL_TO_INT(kol_vo_imp);
itog:= INT_TO_WORD(okr);
IF Ri>44 AND Ri<350 AND in28=1 THEN
sh1:=itog;
END_IF;
sh3:=0;
bm.3:=0;
bm.4:=0;
END_IF;

deSyntheZis
01.04.2022, 13:33
Здравствуйте, разрабатываю программу для контроллера в Codesys 2.3 и визуализацию в СП300 Конфигуратор. на руках ни контроллера ни панели нет. Можно ли организовать связь между ними. Какой-то эмулятор контроллера и modbus rtu?

kondor3000
01.04.2022, 14:17
Здравствуйте, разрабатываю программу для контроллера в Codesys 2.3 и визуализацию в СП300 Конфигуратор. на руках ни контроллера ни панели нет. Можно ли организовать связь между ними. Какой-то эмулятор контроллера и modbus rtu?

Программу ПЛК и программу в конфигураторе (кроме макросов) можно проверить в эмуляции без подключения.

Можно использовать виртуальный контроллер PLC Win NT V2.4 (используется для проверки работы некоторых биб-тек, которые не работают без контроллера или к Скаде) и виртуальную панель в Онлайн эмуляции, но связать их не получится.
Виртуальную панель в Онлайн включении можно подключить только к реальному ПЛК (только панель мастер, Модбас RTU и только 30 минут).

kondor3000
01.04.2022, 15:19
Добрый День, приобрел ПЛК110-60 М02 к нему подключен модуль дискретных выводов МУ210-401, к выходу модуля подключены драйверы которые управляют гибридными ШД вопрос заключается в том, что мне нужно программно включить двигатель на определенное количество импульсов дабы ШД повернулся на определённое количество оборотов и тд, получается так что выход модуля настроен на генератор импульсов и программа рассчитывает количество импульсов и задает на выход и выполняет то что нужно, но поскольку программа читается циклично то и выполнение поворотов не останавливается, а мне требуется чтобы после нажатия кнопки он повернулся на рассчитанное количество импульсов и остановился, потом если потребуется заново повторить, подскажите пожалуйста как это можно осуществить?


Вам надо поискать похожие темы и почитать для начала, https://owen.ru/forum/showthread.php?t=35829
https://owen.ru/forum/showthread.php?t=23013
https://owen.ru/forum/showthread.php?t=35875
https://owen.ru/forum/showthread.php?t=22169&page=45

Здесь пример: Примеры для ПЛК1хх
16 Работа с быстрыми входами/выходами по прерыванию высокочастотного таймера https://owen.ru/product/codesys_v2/example_program

Alexandr88
01.04.2022, 17:43
Здравствуйте,
Помогите пожалуйста понять)
Кратко:
Пр 200 на экране создаю ввод и отдельно вывод переменной с плавающей запятой, загружаю в прибор, соединяю с плк, в плк создаю глобальную переменну одно для вывода то что я прописал на экране плк, а вторую что бы задать из codesis в режиме онлайн на пр200
Ввожу на приборе пр к примеру 21,8 в переменной плк показывает 2.730196е+023
Как добиться , что бы я на пр 200 задал 21,8 и что бы в codesis показало21,8???
Я пробывал real_to_int и real_to_word и int, фигня!
Так же попробовал из библиотеки oscat real_to_strf конвертирует real с плавающей запятой в значение стринг с плавающей запятой.

Так же попробовал fract
Конвертирует значение с плавающей точки в дробь! ,не помогла , не то
Такая же ситуация когда я отправляю значение из codesis в пр, к примеру прописываю 25,6 , в по пишет ноль, копирую и вставляю
2.730196е+023, там показывает 21,8...

Как конвертировать это значение в понятные?

kondor3000
01.04.2022, 18:24
Здравствуйте,
Помогите пожалуйста понять)
Так же попробовал fract
Конвертирует значение с плавающей точки в дробь! ,не помогла , не то
Такая же ситуация когда я отправляю значение из codesis в пр, к примеру прописываю 25,6 , в по пишет ноль, копирую и вставляю
2.730196е+023, там показывает 21,8...

Как конвертировать это значение в понятные?
При передачe Float ( вещественная с плавающей запятой), адрес указывается первого регистра, например Float - регистры 512,513, адрес будет 512.
В ПЛК Float должен быть с чётным адресом. Тут важен порядок регистров, при передаче по модбас они меняются местами.
Для правильного отображения:
Если ПЛК мастер, то в UMD ( Универсал модбас девайс), поменять в параметрах Trase_Mode на Native.
Если ПР мастер, снять (поставить) в настройках галку "Переставить регистры", галку "Переставить байты" снять.

Так же можно использовать функциональный блок, для перестановки местами регистров. Пример выкладывал тут https://owen.ru/forum/showthread.php?t=36062

А вообще то флоаты гонять по модбас не обязательно, для температур, давлений можно флоат умножить на 10 или 100 и конвертировать в INT, передать через 1 регистр, а при получении INT, разделить на 10.0, 100.0, получив флоат с нужным количеством знаков после запятой.

Kickit
02.04.2022, 00:25
Здравствуйте! При наличии внешних модулей в сети Modbus-RTU, какие можно использовать дискретные методы записи булевых значений в регистры внешних модулей помимо использования таймеров?
Напр., нужно замкнуть сухой контакт на внешнем модуле, но только чтобы в регистре кратковременно появилась логическая единица, а не постоянно замкнутый контакт. Если вы сами используете именно таймеры, дайте знать пожалуйста!

In_Da_Cher_A
02.04.2022, 09:50
Здравствуйте! При наличии внешних модулей в сети Modbus-RTU, какие можно использовать дискретные методы записи булевых значений в регистры внешних модулей помимо использования таймеров?
Напр., нужно замкнуть сухой контакт на внешнем модуле, но только чтобы в регистре кратковременно появилась логическая единица, а не постоянно замкнутый контакт. Если вы сами используете именно таймеры, дайте знать пожалуйста!ээээээ....ничего непонятно.
Что такое "внешние модули"? входА? выхода?
что такое "замкнуть сухой контакт на внешнем модуле"? чтобы сработал выходной канал на модуле вывода?
откройте интернет, и найдите описание F триггер (Falling Edge detection) и R триггер (Rising Edge detection) , прочтите как они работают, после этого найдите их в библиотеке кодесис и используйте в вашей программе

kondor3000
02.04.2022, 12:03
Здравствуйте! При наличии внешних модулей в сети Modbus-RTU, какие можно использовать дискретные методы записи булевых значений в регистры внешних модулей помимо использования таймеров?
Напр., нужно замкнуть сухой контакт на внешнем модуле, но только чтобы в регистре кратковременно появилась логическая единица, а не постоянно замкнутый контакт. Если вы сами используете именно таймеры, дайте знать пожалуйста!
Элемент R триггер формирует короткий импульс по переднему фронту.
Элемент F триггер формирует короткий импульс по заднему фронту.
Если вход замкнуть, то в регистре этот бит будет 1 до размыкания. А уже в программе вы можете вставить R триггер, для формирования короткого импульса.
Но в блоке сухой контакт, вам потом всё равно надо разорвать, чтобы сработало в следующий раз, если это нужно.

Kickit
02.04.2022, 12:11
Переформулию вопрос. На несколько циклов работы программы нужно создать импульс TRUE установленной продолжительности в мсек. Я использую таймер TP, что мне кажется слишком топорным. Есть ещё какие способы?

kondor3000
02.04.2022, 12:14
Переформулию вопрос. На несколько циклов работы программы нужно создать импульс TRUE установленной продолжительности в мсек. Я использую таймер TP, что мне кажется слишком топорным. Есть ещё какие способы?

Почему топорным? ТР как раз тут больше подходит.
Можно сделать из 2 элементов ТON и RS триггер, но зачем?
Вот если вам были бы нужны доп. функции, например пауза в таймере ТР, тогда можно и самому написать новый таймер.

Kickit
03.04.2022, 00:42
Спасибо за ответы!

deSyntheZis
04.04.2022, 10:05
Спасибо за ответ.

vsa
06.04.2022, 11:05
Можно ли поставить пароль на чтение программы из контроллера? Среда CoDeSys V2.3

kondor3000
06.04.2022, 11:11
Можно ли поставить пароль на чтение программы из контроллера? Среда CoDeSys V2.3
В контроллере ставить ничего не надо, просто не заливайте туда исходный файл проекта, а компилированный код никто и так не прочитает.

Рабочая область/ Пароли, можно поставить пароль и на чтение и на запись проекта из Codesys.

vsa
06.04.2022, 11:18
Верхние два поля это на чтение программы из контроллера?

kondor3000
06.04.2022, 11:24
Верхние два поля это на чтение программы из контроллера?

В контроллере ставить ничего не надо, просто не заливайте туда исходный файл проекта, а компилированный код никто и так не прочитает.

vsa
06.04.2022, 11:25
Понял! Большое спасибо!

Артем98
07.04.2022, 12:25
Добрый День, имеется ПЛК110[M02] к нему купил модуль аналоговых входов МВ110 подключенный через RS-485, все работает отлично, вижу сигналы с датчика в программе, так как измеряю ток переменный требуется действующее значение тока, подскажите пожалуйста как обработать сигнал с датчика тока что бы я мог наблюдать действующее значение тока, а не скачущее амплитудное значение?

IVM
07.04.2022, 12:39
Добрый День, имеется ПЛК110[M02] к нему купил модуль аналоговых входов МВ110 подключенный через RS-485, все работает отлично, вижу сигналы с датчика в программе, так как измеряю ток переменный требуется действующее значение тока, подскажите пожалуйста как обработать сигнал с датчика тока что бы я мог наблюдать действующее значение тока, а не скачущее амплитудное значение?

Ты сейчас меришь не амплитудное, а мгновенной значение тока. Если сможешь найти амплитудное значение, то действующее значение можно будет вычислить по формуле. I = 0,707 * Im. Организуй в программе ПЛК поиск максимума в непрерывной выборке измеряемой величины и в конце концов найдешь максимальное значение.

Артем98
07.04.2022, 12:46
Ты сейчас меришь не амплитудное, а мгновенной значение измеряемой величины. Если сможешь измерить амплитудное значение, то действующее значение можно будет вычислить по формуле. I = 0,707 * Im. Организуй в программе поиск максимума в непрерывной выборке измеряемой величины.

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

IVM
07.04.2022, 12:47
Да точно, измеряется мгновенное значение, а как можно сделать чтобы у меня было примерно одно значение, а не скачущее?

Я тебе все подробно написал.

Артем98
07.04.2022, 12:51
Я тебе все подробно написал.

Точно, спасибо)

IVM
07.04.2022, 13:03
Периодически максимум надо сбрасывать и искать по новой.

teikovo43
09.04.2022, 01:28
Здравствуйте, собираю щит на оборудование eaton с использование SmartWIre DT, имеются частотники dc1 подключенные через DX-NET SWD3. Использую стандарные профили для управления по SWD. Нужно вывести ток частотника через codesys v2, для этого нужно использовать ациклические данные, но я не понимаю как ими пользоваться. Если кто встречался с таким оборудованием, прошу помощи.

IVM
09.04.2022, 12:35
Здравствуйте, собираю щит на оборудование eaton с использование SmartWIre DT, имеются частотники dc1 подключенные через DX-NET SWD3. Использую стандарные профили для управления по SWD. Нужно вывести ток частотника через codesys v2, для этого нужно использовать ациклические данные, но я не понимаю как ими пользоваться. Если кто встречался с таким оборудованием, прошу помощи.

Что за частотное, кто его должен окрашивать ?

keysansa
09.04.2022, 12:58
Здравствуйте, собираю щит на оборудование eaton с использование SmartWIre DT, имеются частотники dc1 подключенные через DX-NET SWD3. Использую стандарные профили для управления по SWD. Нужно вывести ток частотника через codesys v2, для этого нужно использовать ациклические данные, но я не понимаю как ими пользоваться. Если кто встречался с таким оборудованием, прошу помощи.
Вы не указали шлюз smartwire, который используете.

teikovo43
09.04.2022, 14:29
Вы не указали шлюз smartwire, который используете.
EU5C-SWD-CAN

keysansa
09.04.2022, 14:33
EU5C-SWD-CAN

С CANOpen не работал. Но знаю, что у шины есть асинхронный обмен.
Надо читать.
ЗЫ. Если не лень, опишите вкратце проект. Я два раза применял smartwire, шикарно, но не бюджетно, хотя и шикарно.

teikovo43
09.04.2022, 14:36
С CANOpen не работал. Но знаю, что у шины есть асинхронный обмен.
Надо читать.
Я так понимаю нужно делать запросы и получать ответы по запрашиваемого параметру, как это делать я пока не понял. Может кто сталкивался с этим.

IVM, не понял вопроса

teikovo43
09.04.2022, 14:42
С CANOpen не работал. Но знаю, что у шины есть асинхронный обмен.
Надо читать.
ЗЫ. Если не лень, опишите вкратце проект. Я два раза применял smartwire, шикарно, но не бюджетно, хотя и шикарно.
Работаю на рыбаке, помимо рыбной фабрики, есть мукомолка, где из рыбы делают муку, собственно собрал новый щит для управления оборудованием. 24 движка, 4 из которых управляются частотниками. Интерфейс делал с помощью Galileo(мнемосхема, датчики, пуск, остановка и т.д) Все это соединено с помощью SWD. Со всем в принципе разобрался кроме запроса параметров с частотника. PLC xc-202

keysansa
09.04.2022, 15:57
Я так понимаю нужно делать запросы и получать ответы по запрашиваемого параметру, как это делать я пока не понял. Может кто сталкивался с этим.

И раз это асинхронный, то, думаю, это в отдельном потоке делать надо. Но это домыслы. Надо читать.

teikovo43
09.04.2022, 16:09
С CANOpen не работал. Но знаю, что у шины есть асинхронный обмен.
Надо читать.
ЗЫ. Если не лень, опишите вкратце проект. Я два раза применял smartwire, шикарно, но не бюджетно, хотя и шикарно.
Вот собираемый щит

keysansa
09.04.2022, 16:13
Вот собираемый щит

Спасибо.
Окунулся в приятные воспоминания )
Монтаж шкафа - это раскладка силы. При применении шин (SASY) - вообще красота.

teikovo43
09.04.2022, 16:18
Спасибо.
Окунулся в приятные воспоминания )
Монтаж шкафа - это раскладка силы. При применении шин (SASY) - вообще красота.
Короба для монтажа проводов не пришли из-за санкций :( И еще ожидаю много чего. Приходиться как есть делать. Осталось двери прикрутить) и посадить кнопки. Еще один щит, только поменьше будет утсановлен выше, на нем сенсорная панелька будет от eaton

keysansa
09.04.2022, 16:32
Короба для монтажа проводов не пришли из-за санкций :( И еще ожидаю много чего. Приходиться как есть делать. Осталось двери прикрутить) и посадить кнопки. Еще один щит, только поменьше будет утсановлен выше, на нем сенсорная панелька будет от eaton
Согласен, тяжело сейчас.
Кстати, не встречались с перегревом автоматов? На Eaton не было таких сборок, как у вас, максимум, 8 в ряд. На ABB были шкафы, по 16-20 автоматов в ряд, начинали греться, хотя по выбраны по номиналу двигателей, напряжение не просаживается.

teikovo43
09.04.2022, 16:46
В рыбном цехе на палубу выше, собран щит упаковки никаких проблем замечено не было.

keysansa
09.04.2022, 16:48
В рыбном цехе на палубу выше, собран щит упаковки никаких проблем замечено не было.

Спасибо. Видимо с ABB что-то не так.

Артем98
11.04.2022, 10:36
Приветствую, да у меня модуль МВ110 - 8АС, при помощи него могу ли я измерять переменный ток в программе?

IVM
11.04.2022, 10:40
Приветствую, да у меня модуль МВ110 - 8АС, при помощи него могу ли я измерять переменный ток в программе?

Ты меришь переменный ток или напряжение ?

Артем98
11.04.2022, 10:57
Ну по сути на модуль подключен датчик тока, но с датчика приходит напряжение)

IVM
11.04.2022, 11:03
Ну по сути на модуль подключен датчик тока, но с датчика приходит напряжение)

У тебя вход модуля как сконфигурирован, 0...20 мА ? Датчик тока конкретно какой ?

Артем98
11.04.2022, 11:09
У тебя вход модуля как сконфигурирован, 0...20 мА ? Датчик тока конкретно какой ?

Вход модуля сконфигурирован как 0-10 В! Датчик тока LF505S.

IVM
11.04.2022, 11:24
Вход модуля сконфигурирован как 0-10 В! Датчик тока LF505S.

Ты через входное отверстие датчика что пропустил ?

IVM
11.04.2022, 11:29
Вход модуля сконфигурирован как 0-10 В! Датчик тока LF505S.

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

Артем98
11.04.2022, 11:32
Ты через входное отверстие датчика что пропустил ?

Через вход прокинут провод 95 квадратов!

IVM
11.04.2022, 11:34
Через вход прокинут провод 95 квадратов!

И какой максимальный ток по этому проводу может протекать ?

Артем98
11.04.2022, 11:39
Вход модуля должен быть сконфигурирован как токовый, т.к. максимальное сопротивление нагрузочного резистора датчика не может превышать 149 Ом.

Датчик не напрямую подключен к модулю, а через плату смещения, так как датчик измеряет переменный ток у него может быть отрицательное значение, в плате предусмотрен измерительный резистор, с него снимается напряжение и суммируется с усредненным, т.е. если по проводу, который прокинут через датчик, ток не течет то на модуль приходит значение в 5В. Соответственно все это учтено, и в программе я принимаю верные сигналы , вопрос в том как это обработать программно?

Артем98
11.04.2022, 11:39
И какой максимальный ток по этому проводу может протекать ?

По проводу может протекать максимальный ток 400 А.

IVM
11.04.2022, 11:59
Датчик не напрямую подключен к модулю, а через плату смещения, так как датчик измеряет переменный ток у него может быть отрицательное значение, в плате предусмотрен измерительный резистор, с него снимается напряжение и суммируется с усредненным, т.е. если по проводу, который прокинут через датчик, ток не течет то на модуль приходит значение в 5В. Соответственно все это учтено, и в программе я принимаю верные сигналы , вопрос в том как это обработать программно?

Схему платы смещения выложи.

Артем98
11.04.2022, 13:38
Можно попробовать сделать так и мерить амплитудное значение тока с последующим пересчетом в действующее значение.

60270

У меня вот так сделано)

IVM
11.04.2022, 13:43
60270

У меня вот так сделано)

Зачем так сложно.

IVM
11.04.2022, 14:41
Если с ОУ на ты, то можно так сделать.

Артем98
11.04.2022, 15:17
Можно еще так сделать.

Да можно было и так сделать, но на диодах падение напряжения получается, и в этой схеме получается что мы одну полуволну обрезаем, а нам требуется наблюдать всю волну, для этого и сделано смещение на 5 В.

IVM
11.04.2022, 15:26
Да можно было и так сделать, но на диодах падение напряжения получается, и в этой схеме получается что мы одну полуволну обрезаем, а нам требуется наблюдать всю волну, для этого и сделано смещение на 5 В.

В моей последней схеме обе полуволны выпрямляются. Регулировкой R3 можно выставить на выходе ровно 10 В. На конденсаторе будет выделяться напряжение пропорциональное амплитудному значению потребляемого тока. Действующее значение потребляемого тока можно будет посчитать если ток имеет синусоидальную форму.

Артем98
11.04.2022, 15:31
В моей последней схеме обе полуволны выпрямляются.

Да, согласен, это я про схему которая выше писал, просто в измерительной части мы не используем диоды, измерения получаются не совсем точные.
В основном вопрос остается все тот же, можно ли сигнал который я получаю уже программе обработать?

IVM
11.04.2022, 16:07
Да, согласен, это я про схему которая выше писал, просто в измерительной части мы не используем диоды, измерения получаются не совсем точные.
В основном вопрос остается все тот же, можно ли сигнал который я получаю уже программе обработать?

Падение напряжения на диодах легко компенсировать за счет увеличения Кус ОУ. Я ранее написал, что пользуясь моей схемой можно вычислить действующее значение потребляемого тока если ток имеет синусоидальную форму. Чему пропорционально напряжение на выходе твоей мудренной схемы я знаю. ;)