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

petera
11.04.2022, 16:31
просто в измерительной части мы не используем диоды, измерения получаются не совсем точные.


60283

60284

60285

(c) В.С. Гутников. "Интегральная электроника в измерительных устройствах". Энегоатомиздат. 1988г.
60294

http://www.toroid.ru/gutnikovVS2.html

Сергей0308
11.04.2022, 18:08
Какой-то вопиющий пример из серии "мы лёгких путей не ищем" и всеми признанных норм и правил не знаем(не признаём), короче, мне кажется так проще(и дешевле):

60288

И две полуволны будут одинаковые(симметричные в зеркальном отображении), какая разница какую мерить?!

keysansa
11.04.2022, 21:02
Какой-то вопиющий пример из серии "мы лёгких путей не ищем" и всеми признанных норм и правил не знаем(не признаём), короче, мне кажется так проще(и дешевле):

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

teikovo43
12.04.2022, 01:27
Добрый день!
Прошу прощения, долго ждали ответ от европейских коллег

Вот, какую информацию они нам дали:
«The motor current can be accessed by acyclic data.
PNU nrU nr 504.0 gives motor current.»
(Доступ к току двигателя можно получить с помощью ациклических данных.
PNU nrU nr 504.0 выдает ток двигателя.)

Вот дали информацию по моему предыдущему вопросу, как этим пользоваться?)

vsa
13.04.2022, 18:48
Добрый день родной форум! Изучаю контроллер ПЛК73 на предмет разработки нового проекта. Заказчик настоял на данной модели ПЛК. Изучаю примеры программ keyboard_1.pro и keyboard_2.pro с сайта ОВЕН для данного контроллера. Все необходимые библиотеки подгрузил, но не могу найти библиотеку SYSTASKINFO.LIB. Она мене нужна для запуска программ в эмуляторе. Хочу посмотреть, как в эмуляторе показывается состояние экрана. Подскажите, где можно списать SYSTASKINFO.LIB?

Валенок
13.04.2022, 21:17
..ПЛК73 .. SYSTASKINFO.LIB..
Удалите из списка библиотек

kondor3000
13.04.2022, 21:37
Добрый день родной форум! Изучаю контроллер ПЛК73 на предмет разработки нового проекта. Заказчик настоял на данной модели ПЛК. Изучаю примеры программ keyboard_1.pro и keyboard_2.pro с сайта ОВЕН для данного контроллера. Все необходимые библиотеки подгрузил, но не могу найти библиотеку SYSTASKINFO.LIB. Она мене нужна для запуска программ в эмуляторе. Хочу посмотреть, как в эмуляторе показывается состояние экрана. Подскажите, где можно списать SYSTASKINFO.LIB?
Установщик библиотек скачайте, Lib_setup
https://owen.ru/product/codesys_v2/documentation
По моему SYSTASKINFO.LIB не нужна вообще для ПЛК73. Часть биб-к только для ПЛК73 (ПЛК63), часть только для других ПЛК.
И зря вы связались с ПЛК73 (ПЛК63) там всё по другому. И экран вы не посмотрите в эмуляторе, только переменные.

Spawn
14.04.2022, 00:08
там всё по другому

А что конкретно в нем другого-то? ПЛК как ПЛК. Единственный, на данный момент, весомый аргумент не в пользу данного ПЛК - его снимают с производства. Побаловаться без дисплея можно и на PLCWinNT, смотря какая задача по работе с дисплеем, а то можно и визуализацию накидать. Не понятно для каких конкретно целей vsa нужна SYSTASKINFO.LIB, но для PLCWinNT она есть в Common Files...

vsa
14.04.2022, 07:55
При загрузки пробной программы keyboard_1.pro появляется сообщение, укажите, где находится библиотека SYSTASKINFO.LIB. Да я и сам пока не знаю зачем нужна мне SYSTASKINFO.LIB. Хотел просто посмотреть, как программа работает с экраном. Заказчик на своем предприятии поимел много ПЛК73. Поэтому и рекомендует нам взять этот контроллер. А задача простая. необходимо следить за покачиванием емкости. Будут 4 программы покачивания. В каждой программе своя амплитуда и время процесса. Амплитуда будет определяться бесконтактными датчиками слева и справа от оси покачивания. Для каждой пары датчиков - своя амплитуда. Покачивание будет осуществляться через частотный преобразователь. электродвигатель с редуктором. Скорость вращения будет задаваться потенциометром. Я и думал, что на экране ПЛК73 буду выбирать номер программы, следить за оставшимся временем и корректировать (во время настройки) значения таймеров.

In_Da_Cher_A
14.04.2022, 21:59
шалом эврибади

знатоки ST, подскажите, какая конструкция правильнее
вот такая

IF ftr2_Wsh = TRUE THEN
IF ftr2_wshEnd = TRUE THEN
ftr2_Wt :=TRUE;
ftr2_Wsh :=FALSE;
ftr2_Wrk :=FALSE;
END_IF;
END_IF;


или такая

IF ftr1_Wsh = TRUE AND ftr1_wshEnd = TRUE THEN
ftr1_Wt :=TRUE;
ftr1_Wsh :=FALSE;
ftr1_Wrk :=FALSE;
END_IF;

такое ощущение, что вариант 1 не кошерный для CDS и не будет работать

kondor3000
14.04.2022, 22:02
шалом эврибади

знатоки ST, подскажите, какая конструкция правильнее
вот такая
такое ощущение, что вариант 1 не кошерный для CDS и не будет работать

Вообще то всё ещё проще

IF ftr1_Wsh AND ftr1_wshEnd THEN
ftr1_Wt :=TRUE;
ftr1_Wsh :=FALSE;
ftr1_Wrk :=FALSE;
END_IF

In_Da_Cher_A
14.04.2022, 22:06
Вообще то всё ещё проще

IF ftr1_Wsh AND ftr1_wshEnd THEN
ftr1_Wt :=TRUE;
ftr1_Wsh :=FALSE;
ftr1_Wrk :=FALSE;
END_IF


ну моё кунг-фу пока ещё не настолько хорошо, поэтому тянет присваивать, чтобы не запутаться
простота пока не главное, главное чтобы работало
так в итоге вариант 1 с двумя (и более) IF не рабочий?

kondor3000
14.04.2022, 22:13
ну моё кунг-фу пока ещё не настолько хорошо, поэтому тянет присваивать, чтобы не запутаться
простота пока не главное, главное чтобы работало
так в итоге вариант 1 с двумя (и более) IF не рабочий?

Он рабочий но излишний и в конце ; не нужна после END_IF

In_Da_Cher_A
14.04.2022, 22:26
Он рабочий но излишний, и в конце ; не нужна после END_IF
это случайно
ещё хотел уточнить
ftr1_Wsh изначально 1 и ftr1_wshEnd как бы её обнуляет.
соответственно беспокоит, что надо ли делать какие-то задержки по времени или фиксации переменных триггером, чтобы были переходы в другое состояние?
сегодня попробовал на железе, такое ощущение, что по переднему фронту проскакивает и система не успевает отработать предыдущее, как уже проскакивает дальше

kondor3000
14.04.2022, 22:32
это случайно
ещё хотел уточнить
ftr1_Wsh изначально 1 и ftr1_wshEnd как бы её обнуляет.
соответственно беспокоит, что надо ли делать какие-то задержки по времени или фиксации переменных триггером, чтобы были переходы в другое состояние?
сегодня попробовал на железе, такое ощущение, что по переднему фронту проскакивает и система не успевает отработать предыдущее, как уже проскакивает дальше

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

Вот здесь обсуждение фильтров на таймере TON (TOF) https://owen.ru/forum/showthread.php?t=10555&page=856

timik2009
19.04.2022, 15:30
Привет всем . можно ли подключить ТРТ32-Щ4.03.RS по протоколу Modbus RTU к плк 160_М .

kondor3000
19.04.2022, 15:38
Привет всем . можно ли подключить ТРТ32-Щ4.03.RS по протоколу Modbus RTU к плк 160_М .

Во первых наверное ТРМ32-Щ4.03.RS, а не ТРТ 32 https://owen.ru/product/trm32

Протокол связи - Modbus RTU/ASCII, ОВЕН, конечно можно подключить, руководство читайте. Адреса регистров в таблице Модбас надо перевести из HEX в DEC, с помощью калькулятора.60390

timik2009
20.04.2022, 08:53
Добрый день. вопрос заключался как в ТРМ32-Щ4.03.RS установить скорость и адрес Modbus RTU.60394

kondor3000
20.04.2022, 09:27
Добрый день. вопрос заключался как в ТРМ32-Щ4.03.RS установить скорость и адрес Modbus RTU.60394

А по вашей таблице не видно? Заводская установка адрес 16, скорость 9600 (2).
Если надо изменить, заходите в настройки и меняете параметры Р-05 и Р-02.
То же самое можно сделать и по модбас, посмотрев какие регистры нужны и переведя их в DEC, правда после изменения, может потребоваться перезагрузка прибора и изменение программы в ПЛК ( по модбас лучше только читать).

timik2009
20.04.2022, 09:55
а если неизвестны какие были установлены настройки. на стандартные заводские не отвечает прибор.как сбросить на заводские настройки. в пункты Р02 и Р05 изменения вносил прибор также не отвечает на запросы с новыми параметрами.

kondor3000
20.04.2022, 10:08
а если неизвестны какие были установлены настройки. на стандартные заводские не отвечает прибор.как сбросить на заводские настройки. в пункты Р02 и Р05 изменения вносил прибор также не отвечает на запросы с новыми параметрами.

Руководство надо читать, для записи поставить (снять) перемычку, для Щ4 28-29 контакт, смотри скрин 60395
После записи перезагрузите и проверьте пункты Р02 и Р05 ещё раз.

Сброса на заводские настройки не нашёл.

AlexBut
29.04.2022, 12:17
Натолкнулся на менеджер просмотров в "ресурсы " CodeSys 2-но не нашёл описания в help?

kondor3000
29.04.2022, 14:26
Натолкнулся на менеджер просмотров в "ресурсы " CodeSys 2-но не нашёл описания в help?

Менеджер просмотра для просмотра и заказа наборов значений переменных - всё что есть в описании.
Если у вас тысячи переменных, то туда можно добавить несколько самых важных, через F2 например и просматривать значения при работе.60521
Даже не знаю, что там описывать и пользуется этим хоть кто-то. Не забивайте голову всякой фигнёй, там полно того, что нужно изучить
Например вывести переменные в визуализацию и наглядней и удобней. 60522

George_KOt
01.05.2022, 18:23
Добрый день товарищи!
В системах с ОВЕН новичок, помогите пожалуйста найти толковое объяснение подключения ПЛК150 к Scada TraceMode через OPC сервер. Проблема в том что через Modbus RTU не работает, так как преобразователь интерфейса RS-485-> USB не пашет драйвер почему-то определяет в не зависимости от COM-порта единственный COM8, что не правильно. Это влечет в дальнейшей работе отсутствие связи через TraceMode, когда осуществляется обращение к Slave устройству.

ASo
01.05.2022, 18:33
Добрый день товарищи!
В системах с ОВЕН новичок, помогите пожалуйста найти толковое объяснение подключения ПЛК150 к Scada TraceMode через OPC сервер. Проблема в том что через Modbus RTU не работает, так как преобразователь интерфейса RS-485-> USB не пашет драйвер почему-то определяет в не зависимости от COM-порта единственный COM8, что не правильно. Это влечет в дальнейшей работе отсутствие связи через TraceMode, когда осуществляется обращение к Slave устройству.
OPC по какой физической линии хотите запустить?

George_KOt
01.05.2022, 19:15
Если это возможно минуя дополнительные устройства, то по связи Ethernet, если я понял правильно вопрос. Задача поставлена очень простая, создать простой графический интерфейс для одного дискретного выхода, чтобы с графического экрана выполнить включение данного выхода и увидеть изменение статуса с выкл состояние в вкл. Но с этим плохо знаком, поэтому спрашиваю помощи у коллег) Сильно меня не ругайте за возможные ошибки в формулировке.

west
01.05.2022, 20:04
Если это возможно минуя дополнительные устройства, то по связи Ethernet
Да без проблем, если в конфигурации ПЛК и программе пропишите нужное + присвоите нужный IP (либо используйте IP по умолчанию) ПЛК.
P.S.
Скрины:
- с ПЛК100, но это не существенно для этой линейки контроллеров.
- и советую для такого малого количества тегов СКАДу https://simplight.ru/. Не реклама! И она очень проста в настройке.

ASo
01.05.2022, 20:37
И дальше привязывание встроенный modbus-tcp tracemode.

Didar
04.05.2022, 05:26
Всем доброго времени суток, пишу диплом на разработку АРМ-диспетчера. Для демонстрации решил написать небольшую программу в Codesys в режиме имитации. Построил резервуар с автоматическим наполнением и сливом воды нажатием на кнопку, теперь хочу сделать так чтобы вода в первом резервуаре нагрелась до N-температуры и только в этом случае ее можно было забирать на производство. Подскажите пожалуйста как поступить??

kondor3000
04.05.2022, 08:10
Всем доброго времени суток, пишу диплом на разработку АРМ-диспетчера. Для демонстрации решил написать небольшую программу в Codesys в режиме имитации. Построил резервуар с автоматическим наполнением и сливом воды нажатием на кнопку, теперь хочу сделать так чтобы вода в первом резервуаре нагрелась до N-температуры и только в этом случае ее можно было забирать на производство. Подскажите пожалуйста как поступить??

Выведете Т воды резервуара на дисплей, сравнивайте с уставкой, после достижения уставки, разрешите слив воды.
В справке по F1, можно прочитать, как выводить текст (переменные) в визуализации.
По F2, можно вставлять переменные из проекта.

Vyachik
09.05.2022, 19:17
Всем привет. Как сделать чтобы в визуализации менялся цвет объекта в зависимости от условия (язык St). Пример: 1 условие - фон красный, 2 - синий, 3- зеленый. Не понимаю как записать переменную в которой будет храниться нужный цвет.

kondor3000
10.05.2022, 00:11
Всем привет. Как сделать чтобы в визуализации менялся цвет объекта в зависимости от условия (язык St). Пример: 1 условие - фон красный, 2 - синий, 3- зеленый. Не понимаю как записать переменную в которой будет храниться нужный цвет.

Можно создать три прямоугольника, наложить их друг на друга, а управлять цветом битами этой переменной. Например переменная zvet, биты будут zvet.0, zvet.1, zvet.2 каждый включает свой цвет. Вводя в переменную числа 1,2,4 будут переключаться цвета.
На скрине пример ввода переменной 60598 Галку прозрачности ставите на заливке цвета, а тревожный цвет ставите красный, синий, зелёный 60599

Евгений Кислов
10.05.2022, 08:42
Можно обойтись одним элементом и использовать параметр Переменные цвета/Цвет заливки:

60600

Остальное реализуется в коде:



PROGRAM PLC_PRG
VAR
xCondition1: BOOL;
xCondition2: BOOL;
xCondition3: BOOL;

dwColor: DWORD;
END_VAR
VAR CONSTANT
(*цвета задаются в формате BBGGRR*)
c_dwColorRed: DWORD := 16#0000FF;
c_dwColorGreen: DWORD := 16#00FF00;
c_dwColorBlue: DWORD := 16#FF0000;
c_dwColorWhite: DWORD := 16#FFFFFF;
END_VAR


IF xCondition1 THEN
dwColor := c_dwColorRed;
ELSIF xCondition2 THEN
dwColor := c_dwColorBlue;
ELSIF xCondition3 THEN
dwColor := c_dwColorGreen;
ELSE
(*если ни одно из условий не выполняется - используем белый цвет*)
dwColor := c_dwColorWhite;
END_IF

Vyachik
10.05.2022, 08:59
Спасибо, все получилось.

Можно обойтись одним элементом и использовать параметр Переменные цвета/Цвет заливки:

60600

Остальное реализуется в коде:



PROGRAM PLC_PRG
VAR
xCondition1: BOOL;
xCondition2: BOOL;
xCondition3: BOOL;

dwColor: DWORD;
END_VAR
VAR CONSTANT
(*цвета задаются в формате BBGGRR*)
c_dwColorRed: DWORD := 16#0000FF;
c_dwColorGreen: DWORD := 16#00FF00;
c_dwColorBlue: DWORD := 16#FF0000;
c_dwColorWhite: DWORD := 16#FFFFFF;
END_VAR


IF xCondition1 THEN
dwColor := c_dwColorRed;
ELSIF xCondition2 THEN
dwColor := c_dwColorBlue;
ELSIF xCondition3 THEN
dwColor := c_dwColorGreen;
ELSE
(*если ни одно из условий не выполняется - используем белый цвет*)
dwColor := c_dwColorWhite;
END_IF

santi90
12.05.2022, 14:39
Добрый день!
Пытаюсь открыть проект ПЛК Wago на Codesys и при открытии получаю ошибку "Ошибка чтения конфигурации ПЛК! Файл описания модуля 'Module.MB_MASTER' не найден". При этом нужный таргет добавлен в Codesys, библиотеку Modbus подпихнул уже во все папки Library, которые возможно. Подскажите, в чем может быть проблема? Codesys 2.3

capzap
12.05.2022, 14:43
Добрый день!
Пытаюсь открыть проект ПЛК Wago на Codesys и при открытии получаю ошибку "Ошибка чтения конфигурации ПЛК! Файл описания модуля 'Module.MB_MASTER' не найден". При этом нужный таргет добавлен в Codesys, библиотеку Modbus подпихнул уже во все папки Library, которые возможно. Подскажите, в чем может быть проблема? Codesys 2.3

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

santi90
12.05.2022, 14:56
модуль и библиотека это разные вещи. Для Ваго желательно и КДС скачивать ихний

да, КДС скачал именно их. Пробовал искать модуль, но отдельно он не гуглится. Вообще штука странная, получается, что в конфиге ПЛК есть некий элемент, которого нет в моем КДС?

IVM
13.05.2022, 11:43
да, КДС скачал именно их. Пробовал искать модуль, но отдельно он не гуглится. Вообще штука странная, получается, что в конфиге ПЛК есть некий элемент, которого нет в моем КДС?

А новый проект с этим таргетом создается ?

Newcomer
15.05.2022, 16:53
Добрый день.

Как в проекте поменять таргет ?

Newcomer
15.05.2022, 17:04
Почему при запуске проекта в эмуляции булева переменная TRUMPET_4 <TRUMPET_4:BOOL := FALSE;> в отладчике подсвечивается красным цветом ? Почему TRUMPET_3 <TRUMPET_3:BOOL := FALSE;> отображается нормально ?

kondor3000
15.05.2022, 17:07
Добрый день.

Как в проекте поменять таргет ?

В настройках целевой платформы, изменить конфигурацию на нужный таргет. Открыть конфигурацию ПЛК, в меню выбрать Дополнения/Стандартная конфигурация, применить, ОК. Получите чистый тагрет ПЛК. После этого надо либо вручную добавить конфигурацию, либо перенести из старой программы конфиг., с помощью программы переноса. https://owen.ru/forum/showthread.php?t=18269

kondor3000
15.05.2022, 17:21
Почему при запуске проекта в эмуляции булева переменная TRUMPET_4 <TRUMPET_4:BOOL := FALSE;> в отладчике подсвечивается красным цветом ? Почему TRUMPET_3 <TRUMPET_3:BOOL := FALSE;> отображается нормально ?

Вероятно, у вас в программе булевой переменной, присваивается некорректное значение. 60672
Выкладывайте полный скрин или лучше проект.

Newcomer
15.05.2022, 17:24
Почему при запуске проекта в эмуляции булева переменная TRUMPET_4 <TRUMPET_4:BOOL := FALSE;> в отладчике подсвечивается красным цветом ? Почему TRUMPET_3 <TRUMPET_3:BOOL := FALSE;> отображается нормально ?

Мне кажется в таргете PLC160 косяк, из-за которого происходит наложение переменных.

kondor3000
15.05.2022, 17:26
Мне кажется в таргете PLC160 косяк, из-за которого происходит наложение переменных.
Если этот косяк после смены таргета, то вы неправильно его сменили, читайте мой пост внимательно. Или пишите как меняли.

Newcomer
15.05.2022, 17:29
Если этот косяк после смены таргета, то вы неправильно его сменили, читайте мой пост внимательно. Или пишите как меняли.

Я таргет пока не менял.

Newcomer
15.05.2022, 17:31
Вероятно, у вас в программе булевой переменной, присваивается некорректное значение. 60672
Выкладывайте полный скрин или лучше проект.

TRUMPET_4 := TRUE; Это единственное присвоение в проекте.

Если TRUMPET_4 объявить в PLC_PRG, а не в VAR_GLOBAL, то все становится нормально.

kondor3000
15.05.2022, 17:37
TRUMPET_4 := TRUE; Это единственное присвоение в проекте.

Если TRUMPET_4 объявить в PLC_PRG, а не в VAR_GLOBAL, то все становится нормально.

Значит вы эту же переменную присвоили и в конфигурации и в PLC_PRG. В конфигурации она и так глобальная.
В таких случаях надо проект выкладывать, а то можно гадать до посинения.

Newcomer
15.05.2022, 17:59
Значит вы эту же переменную присвоили и в конфигурации и в PLC_PRG. В конфигурации она и так глобальная.
В таких случаях надо проект выкладывать, а то можно гадать до посинения.

У меня в конфигурации вообще ничего не объявлено, она девственно чиста. Проект чисто демонстрационный, запускается только в режиме симуляции. PLC Config мне вообще в данном случае не нужен. Таргет для проекта выбран произвольно. С ПЛК ОВЕН и CODESYS V2.3 работаю много лет.

kondor3000
15.05.2022, 18:06
У меня в конфигурации вообще ничего не объявлено, она девственно чиста. Проект чисто демонстрационный, запускается только в режиме симуляции, PLC Config мне вообще в данном случае не нужен. Таргет для проекта выбран произвольно. С ПЛК ОВЕН работаю много лет.

У меня "Инвалида" нет ни в PLC_PRG, ни в глобальных. Значит проблема у вас в проекте. Проще создать новый и не париться, если он и так чистый.

Newcomer
15.05.2022, 18:10
У меня "Инвалида" нет ни в PLC_PRG, ни в глобальных. Значит проблема у вас в проекте. Проще создать новый и не париться, если он и так чистый.

Легко сказать создай новый проект. У меня в проекте визуализация не хилая. Я проблему решил путем переноса объявления части переменных в PLC_PRG.

Newcomer
15.05.2022, 18:38
Такая хрень однажды случилась в реальном проекте. Я не помню что тогда был за таргет и как я вышел из положения. В этот раз у меня из-за этого визуализация не верно работала пока не перенес объявление части переменных в PLC_PRG.
Визуализация не верно работала потому что происходило наложение переменной типа DWORD на переменную типа BOOL.
Эти переменные были объявлены как глобальные и шли друг за другом.

capzap
15.05.2022, 18:58
Люди будьте бдительны при работе с таргетом PLC160. ;)
это было бы багом, если можно было повторить любому подобное, но как то пока все спришивают показать проект, потому что с лету не получается так сделать. Может не в плк дело

Newcomer
15.05.2022, 19:38
это было бы багом, если можно было повторить любому подобное, но как то пока все спришивают показать проект, потому что с лету не получается так сделать. Может не в плк дело

А в чем ? Компилятор ошибок в проекте не находит.

Newcomer
16.05.2022, 09:54
Проект/очистить всё

Сделал. Краснота ушла и в визуализации все отображается верно. Валенок - это голова. ;)

АлександрZ
19.05.2022, 10:18
Добрый день. Подскажите в чём проблема. Написана программа для ПЛК 110.60.м. П ходу написания программы (на CFC) все модули делал отдельными макросами. Всё прекрасно работало и вот дописываю программу, и несколько макросов (крайних) - входы и выходы - серым цветом. Убираю один макрос - оставшаяся часть программы работает. Добавляю несколько переменных история повторяется, убираю переменные - всё работает. Что происходит, подскажите, как решить проблему?

Валенок
19.05.2022, 16:59
Добрый день. Подскажите в чём проблема. Написана программа для ПЛК 110.60.м. П ходу написания программы (на CFC) все модули делал отдельными макросами. Всё прекрасно работало и вот дописываю программу, и несколько макросов (крайних) - входы и выходы - серым цветом. Убираю один макрос - оставшаяся часть программы работает. Добавляю несколько переменных история повторяется, убираю переменные - всё работает. Что происходит, подскажите, как решить проблему?
Добавил несколько переменных в вашу программу - да, беда. Это нельзя исправить

АлександрZ
20.05.2022, 09:09
Добавил несколько переменных в вашу программу - да, беда. Это нельзя исправить

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

kondor3000
20.05.2022, 09:58
Не совсем понял, как Вы смогли что-то добавить в программу?

Это намёк, что без проекта подсказать вам нечего) Выкладывайте проект, через расширенный режим.
Вообще то, Codesys это не Лоджик, здесь макросы не используют (хотя это возможно), а используют функции, функц. блоки и программы.

IVM
20.05.2022, 12:46
Добрый день.

Как в визуализации отобразить после числа знак %. Так как на картинке не получается, т.е. символ % не отображается..

melky
20.05.2022, 13:06
IVM может есть символ "экран" / или \ должно быть в правке отражено... например /% или // ну и так далее
или $ например

P / p
Задает отображения знака процентов рядом с число, указывает количество десятичных разрядов после запятой

IVM
20.05.2022, 13:53
Проблема с вводом числа в визуализации.

Первые две картинки (ранее сделанный проект), при нажатии на элемент выскакивает калькулятор и можно ввести число. Вторые две картинки (новый проект), при нажатии на элемент калькулятор не выскакивает. Не понятно почему в списке Category разное число строк хотя элемент в этих двух проектах один и тот же. Первый проект делался в W'XP, второй в W'7.

IVM
20.05.2022, 13:55
IVM может есть символ "экран" / или \ должно быть в правке отражено... например /% или // ну и так далее
или $ например

P / p
Задает отображения знака процентов рядом с число, указывает количество десятичных разрядов после запятой

Без Е.Кислова не разобраться.

kondor3000
20.05.2022, 14:44
Без Е.Кислова не разобраться.

Что вставить 2 раза %% ума не хватает?
%3.1f%%
Ни один из знаков / \ $ // проценты не выводит.

АлександрZ
20.05.2022, 14:58
Спасибо. Скорее всего что так происходит в эмуляторе. Если смотреть работу программы в конфигураторе ПЛК, то программа работает корректно. Что до макросов, я их не добавляю в библиотеку, я их "собираю" в проекте. С ними удобно из-за занимаемого пространства, да и визуально отслеживать легче работу. За отзыв - спасибо.

kondor3000
20.05.2022, 16:30
Спасибо. Скорее всего что так происходит в эмуляторе. Если смотреть работу программы в конфигураторе ПЛК, то программа работает корректно. Что до макросов, я их не добавляю в библиотеку, я их "собираю" в проекте. С ними удобно из-за занимаемого пространства, да и визуально отслеживать легче работу. За отзыв - спасибо.

ФБ (функциональный блок) это практически тот же макрос. Советую почитать про их применение. Программу разбиваете на несколько ФБ, можно по функционалу, можно при однотипных блоках ( пишите один блок и используете нужное кол-во раз) или просто при большом объёме программы бьёте на куски.
ФБ и отлаживать удобно и проверить работу каждого блока можно по отдельности и не будет проблем с отображением больших программ.

АлександрZ
23.05.2022, 13:53
ФБ (функциональный блок) это практически тот же макрос. Советую почитать про их применение. Программу разбиваете на несколько ФБ, можно по функционалу, можно при однотипных блоках ( пишите один блок и используете нужное кол-во раз) или просто при большом объёме программы бьёте на куски.
ФБ и отлаживать удобно и проверить работу каждого блока можно по отдельности и не будет проблем с отображением больших программ.

Согласен. Иногда пишу ФБ, правда для их написания пользуюсь языком ST. потом добавляю в проект. Макросы - это просто возможность сэкономить рабочее поле. Будет время, разберусь с возникшей ситуацией (просто интересно в чём дело). Но если кто уже сталкивался с подобным - может и подскажут. Создаётся впечатление, что недостаточно времени опроса, но это только предположение.

kondor3000
23.05.2022, 16:34
Согласен. Иногда пишу ФБ, правда для их написания пользуюсь языком ST. потом добавляю в проект. Макросы - это просто возможность сэкономить рабочее поле. Будет время, разберусь с возникшей ситуацией (просто интересно в чём дело). Но если кто уже сталкивался с подобным - может и подскажут. Создаётся впечатление, что недостаточно времени опроса, но это только предположение.

Вы думаете я просто так вам написал про ФБ, от нечего делать)))
Тут уже возникали подобные вопросы, когда всю программу на 1 листе пытались нарисовать и были проблемы с отображением переменных в работе ( часть отображалась с вопросами и серым цветом)

АлександрZ
23.05.2022, 17:01
Вот и у меня так получилось.....

Николай Суриков
23.05.2022, 17:08
Вы думаете я просто так вам написал про ФБ, от нечего делать)))
Тут уже возникали подобные вопросы, когда всю программу на 1 листе пытались нарисовать и были проблемы с отображением переменных в работе ( часть отображалась с вопросами и серым цветом)

В некоторых случаях бывает даже потеря связи с контроллером.

Angelina69
23.05.2022, 17:36
Добрый день. Будьте добры помочь. Пишу программу в кодесис 2.3, пытаюсь получить данные из датчика давления. Протокол связи RS-232, подсоединяю датчик к плк овен 100. Данных о датчике почти нет. В конфигурации плк добавила соединение Modbus (master)* и одну переменную для считывания данных (все как на рисунке). Подскажите, как узнать ModuleSlaveAddress , имеет ли значение ModuleIP, как узнать можно RegisterAddress. Как считать* данные, может есть какие-нибудь примеры связи контроллера с slave по rs-232, ничего найти почти не могу60799

FPavel
23.05.2022, 22:03
Angelina69, представленный протокол - это точно не ModBus.
Думаю, что решение с обменом - применение библиотек SysLibCom и самостоятельная обработка строк. Т.е. не через конфигуратор, а при помощи самодельной программы. Точнее не подскажу, опыта нет.

В целом, решал бы задачу так.
Построил конечный автомат по разбору поступающих данных:

var
iState: integer; (* номер шага конечного автомата *)
end_var;

case iState of
10: (* ожидание первого символа стартовой последовательности *)
какой-то код по приёму символа
if символ=26 then
iState:=20;
end_if;
20: (* ожидание второго символа стартовой последовательности *)
какой-то код по приёму символа
if символ=50 then
iState:=30
else
iState:=10 (* если ошибка - вернуться к началу *)
end_if;
30: ............
40: (*считывание 20 байт кода *)
какой-то код чтения 20 байт
разбор массива байт и преобразование его в несколько чисел
выставление флага готовности чисел для дальнейшей обработки в программе ПЛК
iState:=10; (* переход к началу приёма пакета данных - стартовой кодовой последовательности *)
else
iState:=10;
end_case;
Конечно, могу ошибаться, но направление примерно такое.


Вот ссылка на пример
https://owen.ru/forum/showthread.php?t=13585

АлександрZ
24.05.2022, 09:12
В некоторых случаях бывает даже потеря связи с контроллером.

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

Rednaxel
24.05.2022, 10:50
...пытаюсь получить данные из датчика давления. Протокол связи RS-232, подсоединяю датчик к плк овен 100. Данных о датчике почти нет....60799
Что значит "Данных почти нет"? А что есть? Марка, модель? Всю информацию о параметрах связи с датчиком Вам должен дать производитель. Даже самые китайские китайцы ;) дают. Без этого будет не сказать чтобы совсем невозможно вычислить адрес устройства, а также адреса и параметры регистров, но очень и очень непросто.
Начать хотя бы с того что RS-232 -- это не протокол связи, а стандарт физического уровня. А вот протокол, т.е. как раз описание процедур обмена данных с прибором, может быть какой угодно, вплоть до уникального и нигде не описанного.

Angelina69
24.05.2022, 11:55
Спасибо за ответ, попробую сделать что-нибудь в таком духе, а в ссылке на примеры файлы почему-то не скачиваются, может потому что закрытая тема, не знаю( может есть примеры в другом месте?

Angelina69
24.05.2022, 12:01
Вместе с датчиком шло ПО, которое и считывало все данные, скорее всего поэтому производители не включили информацию о протоколе, но мне нужно подключить именно к контроллеру, чтобы он отображал данные и производил необходимые мне арифметические действия. (про протокол спасибо - согласна)

FPavel
24.05.2022, 12:19
Angelina69, видимо, ссылки "протухли".
Посмотрите, тогда среди https://owen.ru/product/codesys_v2/example_program - вижу там примеры связи по нестандартным протоколам
Не обязательно это будет SysLibCom - может UNM или OwenNET. У меня реально в этом нет опыта, но предполагаю, что кирпичики для решения в этом направлении.

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

Ещё, менеджер по продажам нашего федерального округа советовал писать в техподдержку support@owen.ru, но на мои вопросы они ответили дословно "в каждом случае по разному". Но, попытка не пытка, может именно по вопросу протоколов у консультантов есть ещё примеры и наработки, а если скажете им ещё и название датчика - может даже и готовое решение. Если они отправят к тем же примерам, то значит в примерах есть направление к самостоятельному решению.

Валенок
24.05.2022, 16:07
...Но хотелось бы понять что происходит в данном конкретном случае, ведь память не занята, предупреждений и ошибок при компиляции нет, что тогда?
Дык Марс в Юпитере, очевидно ж

In_Da_Cher_A
25.05.2022, 08:05
Подскажите, как узнать ModuleSlaveAddress , имеет ли значение ModuleIP, как узнать можно RegisterAddress. Как считать* данные, может есть какие-нибудь примеры связи контроллера с slave по rs-232, ничего найти почти не могу60799
как узнать ModuleSlaveAddress - теоретически - никак, так как это параметр, который выставляется руками в слейве
практически - воспользуйтесь простейшим сканером модбас, который перебирает адреса и скорости, если датчик сделан под модбас, сканер покажет на какой адрес и скорость отвечает слейв.
можете скачать по ссылке и попробовать
https://drive.google.com/file/d/1lxZA9d-Tbl6L5Faqwt3hKOBd2ZpE9EoC/view?usp=sharing

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


slave по rs-232а почему вырешили, что датчик работает по 232?

и да - в любом случае, для экспирементов со сканером, вам потребуется юсб/рс преобразователь

Александр SPB
27.05.2022, 09:12
Вопрос, если программу вызывать вот так :
CASE a OF
0 :
ton1(IN:= NOT ton1.Q , PT:= t#50ms , Q=> , ET=> );
IF ton1.Q THEN
a :=1 ;
END_IF
1 :
XXX; (* Вызов программы *)
a := 0;
END_CASE
Это равносильно вызову программы через Timer_POU ?

Александр SPB
27.05.2022, 09:54
[/CODE]только медленнее на цикл или два
Для вызова PID регулятора это критично или нет?

Вячеслав@
27.05.2022, 12:27
Добрый день. А как-то можно разделить переменные для записи и чтения в Modbus Slave ПЛК110? По умолчанию все переменные идут по очереди с нулевого регистра. И допустим, у меня первые 10 переменных для записи Панелью (она мастер), а дальше 10 переменных для считывания панелью. Если мне нужно добавить еще одну переменную записи, то регистры считывания смещаются, что неудобно. Есть какой-то способ разделить их?

Вячеслав@
27.05.2022, 12:57
кто же Вам мешает наделать пустышек между регистрами записи и чтения?

Спасибо за ответ! Да, это выход.

Serg S
29.05.2022, 11:40
Имею вопрос. Может это и было, не увидел.. Есть энкодер инкрементальный, с него я в счетчик CTUD отправляю. Мне счетчик на 4 байта нужен, а CTUD на два, т.е. последовательно два счетчика. Вопрос в том как объединить старший и младший WORDы счетчика на выходе и уставке перед счетчиками в DWORDы на выходе и уставке. Получать-отправлять по Modbus, так эти переменные я задал в DWORD. Может счетчик сделать 4-х быйтным? Или переменные для Modbus разбить на WORD ? Может это это элементарно, подскажите.

kondor3000
29.05.2022, 23:07
Имею вопрос. Может это и было, не увидел.. Есть энкодер инкрементальный, с него я в счетчик CTUD отправляю. Мне счетчик на 4 байта нужен, а CTUD на два, т.е. последовательно два счетчика. Вопрос в том как объединить старший и младший WORDы счетчика на выходе и уставке перед счетчиками в DWORDы на выходе и уставке. Получать-отправлять по Modbus, так эти переменные я задал в DWORD. Может счетчик сделать 4-х быйтным? Или переменные для Modbus разбить на WORD ? Может это это элементарно, подскажите.

Можно написать свой счётчик, с выходом DWORD, будет 4 байтное число) Вот пример функционального блока CTU_My 60969
Например так ( это часть кода), вторую допишите сами

FUNCTION_BLOCK CTU_My
VAR_INPUT
C: BOOL;
Res : BOOL;
PV: DWORD;
END_VAR
VAR_OUTPUT
Q: BOOL;
CV: DWORD;
END_VAR
VAR
R_TRIG1: R_TRIG;
S1: BOOL;
END_VAR
__________________________________________________ _____
R_TRIG1(CLK:=C , Q=>S1 );
IF S1 AND CV<PV THEN
CV:=CV+1;
END_IF
Q:=(CV=PV);

Serg S
30.05.2022, 09:24
Спасибо, попробую в этом направлении.

Angelina69
30.05.2022, 23:25
Добрый вечер, в прошлый раз обращалась по поводу связи с датчиком по rs232, все оказалось гораздо проще, чем я думала (для считывания данных сделала по шаблону). Но есть еще проблемы.
1) Датчик непрерывно, после каждого измерения, отсылает данные (23 байта, первые два байта "38" и "65" - начало нового измерения, третий - знак), я сначала создала массив размером 315 байт, затем уменьшила и снова увеличила, в итоге при подключении к контроллеру в массиве либо сохранялись значения элементов наименьшего массива, либо все были равны 0, только при изменении адреса буфера (в SysComRead) значения записывались, но записывалось одно измерение (только 23 байта), хотя в SysComRead я задавала прочесть например 100 байтов.
2) После чтения данных, хотела их обработать, написала код (в программировании я вообще не сильна и на st в кодесисе тяжело писать), но контроллер ругается, и я не знаю, можно ли работать с буффером когда порт еще открыт, и я не очень поняла на st весь код работает циклично ?
обработка простая: каждый байт в массиве это отдельная цифра, чтобы получить значение числа каждый байт домножаю на 10^n и суммирую, это значение я записываю в глобальную переменную, чтобы работать с ним в основной программе
Код программы:

(*Открываем порт RS-232*)

IF COM_SERVICE1.ready=FALSE THEN
(* 1 - RS-232 *)
com_num:=1;
(*
Настройки порта (com_settings):
byParity - Режим проверки четности 0 = нет, 1 = нечет, 2 = чет
byStopBits - Кол-во стоповых бит 0 =один, 1=полтора , 2=два
dwBaudRate - Скорость обмена 4800, 9600, 19200, 38400, 57600, 115200 бит/с.
dwBufferSize - Не используется должно быть =0
dwScan - Не используется должно быть =0
dwTimeout - Не используется должно быть =0
Port - Номер порта в формате перечисления PORTS (com_number)
*)
Settings.Port:=com_num;
Settings.dwBaudRate:=9600;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;
(*
Настройка и открытие порта (COM_SERVICE)
Пока на выходе Ready не будет сигнал TRUE, стучимся в порт
Порт открывается с настройками, указанными в com_settings,
а на вход Task подаются следующие значения:

0 - Открытие и настройка порта в соответствии с настройками в структуре Settings
1 - Изменение настроек уже открытого порта на настройки указанные в Settings
2 - Закрытие порта, номер порта берется из Settings.Port
*)
COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=0 );
com_ready:=FALSE;
ELSE
COM_SERVICE1.Enable:=FALSE;
com_ready:=TRUE;
END_IF



IF com_ready=TRUE THEN
(*Порт открыт и инициализирован, теперь можно работать с портом*)
IF i<32000 THEN
SysComRead(Settings.Port, ADR(buffer),100,0);
i:=i+1;
END_IF
END_IF

IF m=1 THEN
m:=0;
END_IF

WHILE m<>1 DO
WHILE buffer[a]<>38 DO
a:=a+1;
END_WHILE

IF buffer[a]=38 THEN
a:=a+1;
IF buffer[a]=65 THEN
a:=a+1;
CASE buffer[a] OF
32: dif_pressure:=buffer[a+1]*1000+buffer[a+2]*100+buffer[a+3]*10+buffer[a+4]+0.1*buffer[a+6];
m:=1;
45: dif_pressure:=-(buffer[a+1]*1000+buffer[a+2]*100+buffer[a+3]*10+buffer[a+4]+0.1*buffer[a+6]);
m:=1;
ELSE
a:=a+1;
END_CASE
ELSE
a:=a+1;
END_IF
ELSE
a:=a+1;
END_IF
END_WHILE

IF i=32000 THEN
i:=0;
END_IF

IF a<>0 THEN
a:=0;
END_IF

Александр SPB
31.05.2022, 23:51
Добрый вечер. Как можно зафиксировать значение T_1 и T_2 и при дальнейшем увеличении температуры T_1и T_2 не менялись.
START_TIME:=TIME();
IF ACT_1 =20.2 THEN
TIME_111.T_1 := TIME() ;
END_IF
IF ACT_1 = 25 THEN
TIME_111.T_2 := TIME() ;
END_IF
SUM_1:=TIME_TO_REAL (TIME_111.T_2 -TIME_111.T_1);
SUM_2 := REAL_TO_TIME (SUM_1);

capzap
01.06.2022, 07:29
IF xStart AND NOT xOldStart THEN
xFlag1 := TRUE;
xFlag2 := TRUE;
tmSUM := T#0s;
END_IF;
IF ACT_1 > 25.0 AND xFlag2 THEN
tmSUM := TIME() - tmFirst;
xFlag2 := FALSE;
ELSIF ACT_1 > 20.2 AND xFlag1 THEN
tmFirst := TIME();
xFlag1 := FALSE;
END_IF;
xOldStart := xStart ;

LAGOOPED
01.06.2022, 08:45
Колеги добрый день! Помогите разобраться, вроде всё просто но никак не разберусь. Связка ПР 103 и ПЛК 150, ПЛК 150 опрашивает регистр ПР 103 го, в ПР програмно BLINK задаёт импульсы счётчик 32 БИТ считает, как добиться чтобы счётчик не переполнялся счёт нужен до 5 ти млн. В ПЛК значения вижу но при наполнении обнуляется и так по кругу.

kondor3000
01.06.2022, 09:28
Колеги добрый день! Помогите разобраться, вроде всё просто но никак не разберусь. Связка ПР 103 и ПЛК 150, ПЛК 150 опрашивает регистр ПР 103 го, в ПР програмно BLINK задаёт импульсы счётчик 32 БИТ считает, как добиться чтобы счётчик не переполнялся счёт нужен до 5 ти млн. В ПЛК значения вижу но при наполнении обнуляется и так по кругу.

Какие типы данных передаёте и принимаете?
Считает до 65535 ? Сколько регистров (или Байт) в переменной счётчика в ПР и сколько в переменной в ПЛК ?

LAGOOPED
01.06.2022, 11:58
Спасибо что не прошли мимо. Прикладываю скрины настроек. 61018

LAGOOPED
01.06.2022, 12:00
61019 Вот ещё сразу всё не прикрипилось61020

kondor3000
01.06.2022, 13:04
61019 Вот ещё сразу всё не прикрипилось

Ну и где у вас 32 битная переменная? У вас все 16 битные и передаются они через 1 регистр.
32 битная переменная занимает 2 регистра.
И только в ПЛК вы неявно преобразуете WORD в DWORD. Толку от этого никакого, вы должны 32 битную переменную передавать и принимать.
Читайте про типы данных, их соответствие, верхний предел и преобразования типов, всё есть в справках.

LAGOOPED
01.06.2022, 14:27
Уважаемый kondor умом понимаю что должен передать 32 бит и принять, но никак не пойму как это сделать. Лоджик сам ведь раздаёт регистры, удалил переменные создал новые в этот раз выдал двумя регистрами, сам не понял как, удалил создал новые всё. Но до конца не уверен что правильно. И смущает что в ПЛК считывает только registor input он же WORD? Посмотри пожалуйста...6102861029

capzap
01.06.2022, 14:31
Уважаемый kondor умом понимаю что должен передать 32 бит и принять, но никак не пойму как это сделать. Лоджик сам ведь раздаёт регистры, удалил переменные создал новые в этот раз выдал двумя регистрами, сам не понял как, удалил создал новые всё. Но до конца не уверен что правильно. И смущает что в ПЛК считывает только registor input он же WORD? Посмотри пожалуйста...6102861029

если главная проблема с ПР, а плк только читает, то зачем Вы задаете вопрос в разделе ПЛК? Эта тема не раз обсуждалась в разделе ПР

LAGOOPED
01.06.2022, 14:35
Прошу прощения но вроде с CoDeSys связано. Больше не буду. Пойду в ПР поищу.

kondor3000
01.06.2022, 14:37
Уважаемый kondor умом понимаю что должен передать 32 бит и принять, но никак не пойму как это сделать. Лоджик сам ведь раздаёт регистры, удалил переменные создал новые в этот раз выдал двумя регистрами, сам не понял как, удалил создал новые всё. Но до конца не уверен что правильно. И смущает что в ПЛК считывает только registor input он же WORD? Посмотри пожалуйста...

Забейте в ПР, одну переменную в 2 регистра, надо сделать со смещением. 61038
register input он же WORD, значит надо использовать не его, а где DWORD написано))) 61032

Валенок
01.06.2022, 14:52
Какая разница - 32 или 16- битный счетчик в ПР ? Если 32-бита, вопрос в только в том - ответит ли ПР (не знаю) если запросить только младшее слово у 32-х битного значения и не опрашивать реже цикла заполнения этого младшего слова (это надо умудрится)


..вроде с CoDeSys связано..
не боись, где-то в плк :



_cnt : все равно что 16-ти битное где-то в области обмена
...
var
cnt_ : word;
нужный_счетчик : dword;
end_var
----
нужный_счетчик := (нужный_счетчик + dword_to_word(cnt_ - _cnt)) mod 5_000_001; //по заявкам телезрителей
cnt_ := _cnt;


Всё. Для 16-ти битного на ПР тоже самое

LAGOOPED
01.06.2022, 15:35
61033 Проделал как рекомендовал kondor3000 не работает. Вроде ерундовая задача второй день сижу. Люди помогите:)61034

kondor3000
01.06.2022, 16:06
Проделал как рекомендовал kondor3000 не работает. Вроде ерундовая задача второй день сижу. Люди помогите:)

Вам надо 32 битное число разобрать на старший и младший регистр и передать, здесь подобная тема https://owen.ru/forum/showthread.php?t=34198&page=2
В настройках UMD (Универсал модбас девайс) возможно придётся поменять последнюю настройку на Native или поменять местами младший и старший регистры.
А принимать уже как DWORD.
Проверить передачу с ПР можно хоть Owen OPC Server, ставится за 2 минуты https://owen.ru/product/new_opc_server

ЗЫ: Выше выложил скрины.

Вячеслав@
02.06.2022, 12:39
Добрый день! Есть ли возможность работы с группой Modbus параметров, как с массивом, если ПЛК110 слэйв?
Когда мастер, можно использовать String, но в режиме слэйв String недоступен. Регистров много, хотелось бы их как-то сгруппировать. Если не упаковкой в String, то хотя бы обращаться к регистрам по индексу массива. Есть такая возможность?

kondor3000
02.06.2022, 13:21
Добрый день! Есть ли возможность работы с группой Modbus параметров, как с массивом, если ПЛК110 слэйв?
Когда мастер, можно использовать String, но в режиме слэйв String недоступен. Регистров много, хотелось бы их как-то сгруппировать. Если не упаковкой в String, то хотя бы обращаться к регистрам по индексу массива. Есть такая возможность?

Да есть, можно использовать группу регистров слейва и мастера как массив и можно как структуру.
Здесь есть пример, в моём последнем сообщении копировал группу регистров из мастера в слейв, как массив.
https://owen.ru/forum/showthread.php?t=35809

Вячеслав@
02.06.2022, 16:06
Да есть, можно использовать группу регистров слейва и мастера как массив и можно как структуру.
Здесь есть пример, в моём последнем сообщении копировал группу регистров из мастера в слейв, как массив.
https://owen.ru/forum/showthread.php?t=35809

Ого, как хитро. Как Вы до этого додумались ) Благодарю, буду пробовать.

kondor3000
02.06.2022, 16:29
Ого, как хитро. Как Вы до этого додумались ) Благодарю, буду пробовать.

Надо было решить задачу, которая вроде как не решалась (с помещением мастера в слейв).
Решение оказалась довольно простым.

Yuliya
08.06.2022, 14:15
Добрый день, я совсем новичок в разработке программ.
ПЛК110 опрашивает два устройства МВ110-224.8А.
Как получить ошибку связи с модулями? Есть ли какая то функция которая отлавливает адрес устройства которое не ответило на опрос?
Подскажите пожалуйста может есть примеры такой реализации?

Евгений Кислов
08.06.2022, 14:19
Добрый день, я совсем новичок в разработке программ.
ПЛК110 опрашивает два устройства МВ110-224.8А.
Как получить ошибку связи с модулями? Есть ли какая то функция которая отлавливает адрес устройства которое не ответило на опрос?
Подскажите пожалуйста может есть примеры такой реализации?

Добрый день.
См. канал Last Address.
К нему нужно привязать переменную типа DWORD.

61122

Yuliya
08.06.2022, 15:36
спасибо за ответ.
Данная переменная меняется в ходе опроса. Может есть функциональный блок, который сопоставляет эти меняющие значения ошибки и адреса устройства и на выходе однозначно определяет какой устройство не ответило из N-slave устройств не ответило на запрос?

kondor3000
08.06.2022, 15:44
спасибо за ответ.
Данная переменная меняется в ходе опроса. Может есть функциональный блок, который сопоставляет эти меняющие значения ошибки и адреса устройства и на выходе однозначно определяет какой устройство не ответило из N-slave устройств не ответило на запрос?

Если опрос идёт, Last Address показывает адрес устройства, а Last Error ошибку равную нулю. Если одно из устройств отвалится, Last Error будет показывать ошибку, (например 81 - нет связи), то есть не будет равно нулю.
Достаточно сделать проверку на ноль Last Error, при адресе Last Address, например с помощью IF ......THEN.
Кол-во битов потери связи и проверок, сделать по кол-ву слейвов. Лучше сделать маску битов потери связи.

Юрий_Че
20.06.2022, 23:21
Всем привет. Имеется интернет шлюз МКОН - 24. Хочу использовать его в связке с контроллером WAGO 750-891.
Ранее не когда не настраивал МКОН. Смотрел пример настройки с контроллером ОВЕН, а вот с wago все по-другому.
Мастер - контроллер wago в ethernet, а slave в rs-485
Подскажите каким-образом можно его связать с wago?

UDA
22.06.2022, 13:12
Я новичок, мучает один вопрос. Как правильно сделать аварийную уставку
Суть: Есть технологический процесс, где до пуска компрессора, давления в системе 0 МПа. После пуска компрессора рабочее давление грубо говоря от 2 до 5 МПа.
Я в свою очередь делаю аварийные уставки 2 Мпа по низкому значению, и 5 МПа по верхнему значению. Тут мы сразу понимаем, что когда мы включим шкаф с контроллером, и нажмём пуск, то он уйдет в аварию, так как давление ещё ниже 2.5 МПа.
Я спрашиваю, более опытного коллегу, как лучше всего сделать. На что он мне отвечает - ставь таймер 5 секунд, компрессор за это время выйдет в рабочей режим. То есть ставим задержку после этого мониторим уставку.
Тут я начинаю сомневаться. Пример с таймером, это однотипный проект, где длина трубы и объем бака не меняются уже 6 лет, а если у меня длина трубы больше (в моём процессе она реально больше, и таймер я пока не знаю какой ставить, к тому же мой шкаф не управляет компрессором, а только следит за давлением, вдруг его включат позже. Короче засада, так как у меня всё по другому.)
А почему бы не сделать так: Пусть до пуска нижняя аварийная уставка у нас 0 МПа, когда включится система и начнётся рост давления от 0 до 2 МПа аварийная уставка 0. После того как мы перешли значение 2 Мпа, аварийная уставка меняется на 2МП. На что мне отвечают - это уже проеденный этап не изобретай велосипед. Тут есть с чем согласиться.
Прошу рассудить и дать свои рекомендации, что вы далаете когда аварийная это какой то заданный промежуток, и есть процессы не аварийные когда мы вываливаемся за эти приделы. Как правильно.

З/Ы: Логично предположить, что так мы например не увидим утечку, так как давление может вообще не подняться выше 2, и мы будем дуть в трубу в которой прорыв. В этом случае я бы добавил макрос, который бы следил за тем, что у нас идёт планомерный рост давления без провалов ниже какого то значения до 2 МПа.

kondor3000
22.06.2022, 14:24
Я новичок, мучает один вопрос. Как правильно сделать аварийную уставку
Суть: Есть технологический процесс, где до пуска компрессора, давления в системе 0 МПа. После пуска компрессора рабочее давление грубо говоря от 2 до 5 МПа.
Я в свою очередь делаю аварийные уставки 2 Мпа по низкому значению, и 5 МПа по верхнему значению. Тут мы сразу понимаем, что когда мы включим шкаф с контроллером, и нажмём пуск, то он уйдет в аварию, так как давление ещё ниже 2.5 МПа.
Я спрашиваю, более опытного коллегу, как лучше всего сделать. На что он мне отвечает - ставь таймер 5 секунд, компрессор за это время выйдет в рабочей режим. То есть ставим задержку после этого мониторим уставку.
Тут я начинаю сомневаться. Пример с таймером, это однотипный проект, где длина трубы и объем бака не меняются уже 6 лет, а если у меня длина трубы больше (в моём процессе она реально больше, и таймер я пока не знаю какой ставить, к тому же мой шкаф не управляет компрессором, а только следит за давлением, вдруг его включат позже. Короче засада, так как у меня всё по другому.)
А почему бы не сделать так: Пусть до пуска нижняя аварийная уставка у нас 0 МПа, когда включится система и начнётся рост давления от 0 до 2 МПа аварийная уставка 0. После того как мы перешли значение 2 Мпа, аварийная уставка меняется на 2МП. На что мне отвечают - это уже проеденный этап не изобретай велосипед. Тут есть с чем согласиться.
Прошу рассудить и дать свои рекомендации, что вы далаете когда аварийная это какой то заданный промежуток, и есть процессы не аварийные когда мы вываливаемся за эти приделы. Как правильно.

З/Ы: Логично предположить, что так мы например не увидим утечку, так как давление может вообще не подняться выше 2, и мы будем дуть в трубу в которой прорыв. В этом случае я бы добавил макрос, который бы следил за тем, что у нас идёт планомерный рост давления без провалов ниже какого то значения до 2 МПа.

Горе от ума)))
Давление у вас измеряется и изменение давления вы смотрите там. Если не включили давление, по истечении времени, это тоже авария. Поэтому ставьте таймер и не мучайтесь, время можно подкорректировать при настройке. Таймер работает один раз при включении, потом, если что не так, то это авария.
Иногда, если прописано в ТЗ или потребует заказчик, вы можете сделать как им надо.

Sulfur
22.06.2022, 14:29
UDA


Пуск;
Если Пуск И за N лет Давление <= 2бар
То Аларм_Работа_в_дырку:=ТRUE;
Енд_Если;

Иван Иванович С
28.06.2022, 17:09
Здравствуйте!

Использую аналоговый вход (Fast analog input) AI2+ ПЛК160 как АЦП "Iput type 0-10V". Ввод AI2+ даже когда не подключен ни к чему - на нем висит 8.4 В просто так, как подтяжка.

Мне надо заводить в ПЛК выход датчика от 0 В до 2.5 В, моя нагрузка не может задавить выходное напряжение (входное для ПЛК) ниже 3В.

По схеме из РЭ - просто через мультиплексор в АЦП заводится, а там должен быть высокоомный вход. В чем может быть дело? Откуда изнутри ПЛК берется напряжение на аналоговом входе?

kondor3000
28.06.2022, 17:28
Здравствуйте!

Использую аналоговый вход (Fast analog input) AI2+ ПЛК160 как АЦП "Iput type 0-10V". Ввод AI2+ даже когда не подключен ни к чему - на нем висит 8.4 В просто так, как подтяжка.

Мне надо заводить в ПЛК выход датчика от 0 В до 2.5 В, моя нагрузка не может задавить выходное напряжение (входное для ПЛК) ниже 3В.

По схеме из РЭ - просто через мультиплексор в АЦП заводится, а там должен быть высокоомный вход. В чем может быть дело? Откуда изнутри ПЛК берется напряжение на аналоговом входе?

Возможно этот вход неисправен. А на других входах есть напряжение?
Вход точно сконфигурирован как 0-10 В ?
Земля у всех входов общая, может на земле по другому входу висит напряжение?

Иван Иванович С
28.06.2022, 17:52
Возможно этот вход неисправен. А на других входах есть напряжение?
Вход точно сконфигурирован как 0-10 В ?
Земля у всех входов общая, может на земле по другому входу висит напряжение?

Спасибо за ответ!
Вход исправен и точно сконфигурирован 0-10В, с ним отлично работает другой датчик с аналоговым выходом. Только этот другой датчик легко просаживает это напряжение до потенциала своего аналогового выхода.
А вот датчик-аналог другого производителя не может продавить и завышает на 2 В.

kondor3000
28.06.2022, 21:45
Спасибо за ответ!
Вход исправен и точно сконфигурирован 0-10В, с ним отлично работает другой датчик с аналоговым выходом. Только этот другой датчик легко просаживает это напряжение до потенциала своего аналогового выхода.
А вот датчик-аналог другого производителя не может продавить и завышает на 2 В.

Вы ответили не на всё вопросы.
Проверьте напряжение на других входах (с датчиками и без) и на этом входе, с отключёнными остальными датчиками. Надо определить, откуда берётся напряжение на входе и нет ли потенциала на земле, она общая для всех входов.
Подключите этот датчик к другому входу, у вас ведь несколько входов.

west
28.06.2022, 22:45
Прошу рассудить и дать свои рекомендации
Пробуй.
Там нет уставки времени выхода на режим (норма), но дорисовать это недолго.

Иван Иванович С
29.06.2022, 10:16
Вы ответили не на всё вопросы.
Проверьте напряжение на других входах (с датчиками и без) и на этом входе, с отключёнными остальными датчиками. Надо определить, откуда берётся напряжение на входе и нет ли потенциала на земле, она общая для всех входов.
Подключите этот датчик к другому входу, у вас ведь несколько входов.

К сожалению, не могу проверить у меня только один вход сконфигурирован как 0-10В, остальные токовые петли. Так что смотреть на них будет некорректно. Прошивку обновлять я тоже не могу. Все общие выводы AI1С - AI8С подключены к земле контроллера, относительно которой 8.4В и наблюдается.

Отключил все выводы AI1С - AI8С, на всех близкое напряжение - около 9В.

IVM
29.06.2022, 10:23
Здравствуйте!

Использую аналоговый вход (Fast analog input) AI2+ ПЛК160 как АЦП "Iput type 0-10V". Ввод AI2+ даже когда не подключен ни к чему - на нем висит 8.4 В просто так, как подтяжка.

Мне надо заводить в ПЛК выход датчика от 0 В до 2.5 В, моя нагрузка не может задавить выходное напряжение (входное для ПЛК) ниже 3В.

По схеме из РЭ - просто через мультиплексор в АЦП заводится, а там должен быть высокоомный вход. В чем может быть дело? Откуда изнутри ПЛК берется напряжение на аналоговом входе?

Тип этого датчика назовите.

kondor3000
29.06.2022, 11:01
Отключил все выводы AI1С - AI8С, на всех близкое напряжение - около 9В.
Ну вот и ответ. Либо неисправность в контроллере, либо утечка одного из входов. Или контроллер в ремонт, либо ставить на этот датчик преобразователь 0-10 В => 4-20 мА, либо использовать МВ110-224.2АС для этого датчика.

IVM
29.06.2022, 11:06
Отключил все выводы AI1С - AI8С, на всех близкое напряжение - около 9В.

Напряжение мерите тестером на входах ПЛК или наблюдаете в отладчике CoDeSys ?

Иван Иванович С
29.06.2022, 12:10
Ну вот и ответ. Либо неисправность в контроллере, либо утечка одного из входов. Или контроллер в ремонт, либо ставить на этот датчик преобразователь 0-10 В => 4-20 мА, либо использовать МВ110-224.2АС для этого датчика.

У меня несколько таких контроллеров на всех, к сожалению, одна картина.


Тип этого датчика назовите.

Сенсор метана INIR-ME100%, аналоговый выход. У него большое выходное сопротивление и он не передавливает потенциал на входе АЦП.

IVM
29.06.2022, 12:39
Сенсор метана INIR-ME100%, аналоговый выход. У него большое выходное сопротивление и он не передавливает потенциал на входе АЦП.

Буфер на ОУ у вас стоит ?

У сенсора есть еще UART интерфейс. Можно по нему показания читать.

Иван Иванович С
29.06.2022, 13:01
Буфер на ОУ у вас стоит ?

У сенсора есть еще UART интерфейс. Можно по нему показания читать.

Нет, буфер не стоит. У меня стоял другой датчик-аналог он нормально работал без буфера. В этом-то и проблема.)) Добавлять в КД еще промежуточные платы не вариант, думаю как быть с ПЛК, чтобы работало с имеющейся прошивкой под аналоговый вход. До этого стоял сенсор Dynament, в таком же корпусе с такой же распиновкой, все такое же. А вот прилетела проблема с напряжением на АЦП.(((

kondor3000
29.06.2022, 13:06
Нет, буфер не стоит. У меня стоял другой датчик-аналог он нормально работал без буфера. В этом-то и проблема.)) Добавлять в КД еще промежуточные платы не вариант, думаю как быть с ПЛК, чтобы работало с имеющейся прошивкой под аналоговый вход. До этого стоял сенсор Dynament, в таком же корпусе с такой же распиновкой, все такое же. А вот прилетела проблема с напряжением на АЦП.(((

Так может всё таки проверите, что на входе в Codesys показывает. Может там по нулям всё без датчика и всё работает? Даже если с датчиком показывает что-то, проверьте есть ли разница при изменении показаний датчика.

IVM
29.06.2022, 13:13
Нет, буфер не стоит. У меня стоял другой датчик-аналог он нормально работал без буфера. В этом-то и проблема.)) Добавлять в КД еще промежуточные платы не вариант, думаю как быть с ПЛК, чтобы работало с имеющейся прошивкой под аналоговый вход. До этого стоял сенсор Dynament, в таком же корпусе с такой же распиновкой, все такое же. А вот прилетела проблема с напряжением на АЦП.(((

Если производитель пишет, что нужен буфер, то его надо ставить. Еще лучше не просто буфер, а неинвертирующий ОУ с однополярным питанием поставить и сделать выход 0...10 В.

Serg S
29.06.2022, 15:32
Не нашел инструкции по подключению ПЛК-63 по MODBUS в качестве мастера. Может это элементарно, но в РП мне не попалось. Версия 2.01. Подскажите, сошлитесь...

Валенок
30.06.2022, 08:20
Не нашел инструкции по подключению ПЛК-63 по MODBUS в качестве мастера. Может это элементарно, но в РП мне не попалось. Версия 2.01. Подскажите, сошлитесь...
Ветка для 63/73 - рядом
Только программно
https://owen.ru/forum/showthread.php?t=13573

Спорягин Кирилл
04.07.2022, 14:00
При попытке входа на страницу Codesys V2 (https://owen.ru/catalog/sreda_programmirovaniya_codesys) выбрасывает на главную страницу сайта ОВЕН.
Это временное явление?

И даже просто по моей ссылке не заходит.
Пусть Главная страница ОВЕН -> Каталог продукции -> Среда программирования CODESYS. Далее при выборе любого из кодесисов выбрасывает на главную страницу.

Уже заходит.

Gena72
06.07.2022, 13:44
plc + CF card
Как прочитать уникальный ИД карты?

kondor3000
06.07.2022, 16:00
plc + CF card
Как прочитать уникальный ИД карты?

Как только найдёте ПЛК равный Компу + картридер CF, так и сможете.

des_na_laes@mail.ru
14.07.2022, 13:14
Коллеги, добрый день! Контроллер ПЛК160, панель оператора СП315-Р. Нет коннекта по ETHERNET, даже лампочки не моргают сетевые. Кабель прямого подключения сделал, с компьютером сразу работают этим же кабелем. В чем дело может быть? Расключение ПЛК? Или СП315 особенное?

capzap
14.07.2022, 13:20
Коллеги, добрый день! Контроллер ПЛК160, панель оператора СП315-Р. Нет коннекта по ETHERNET, даже лампочки не моргают сетевые. Кабель прямого подключения сделал, с компьютером сразу работают этим же кабелем. В чем дело может быть? Расключение ПЛК? Или СП315 особенное?

в ПК современная сетевуха, в устройствах бюджетные варианты, либо кабель кросс, либо через свич

des_na_laes@mail.ru
14.07.2022, 15:00
в ПК современная сетевуха, в устройствах бюджетные варианты, либо кабель кросс, либо через свич

6166561664
Подскажите, а из Какого РЭ брать расключение? У ПЛК 160 и СП315 в инструкциях по разному расключается кабель ETHERNET

saii
14.07.2022, 15:36
6166561664
Подскажите, а из Какого РЭ брать расключение? У ПЛК 160 и СП315 в инструкциях по разному расключается кабель ETHERNET

Второй вариант

Илья_Пущин
15.07.2022, 07:41
Здравствуйте, подскажите пожалуйста, какую кодировку нужно поставить чтобы нормально отображались сообщения, вроде все перепробовал, что нужно сделать? (Codesys 2.3.9.41, язык рус, кодировка XML Unicode UTF-16)61674

kondor3000
15.07.2022, 09:36
Здравствуйте, подскажите пожалуйста, какую кодировку нужно поставить чтобы нормально отображались сообщения, вроде все перепробовал, что нужно сделать? (Codesys 2.3.9.41, язык рус, кодировка XML Unicode UTF-16)61674

Проект/ Опции/ Рабочий стол, поставить Россия и кириллицу 61675 и нажать ОК.

petera
15.07.2022, 09:45
Проект/ Опции/ Рабочий стол, поставить Россия и кириллицу 61675 и нажать ОК.

Немного ошиблись, это меняет шрифт на весь интерфейс
Для редактора шрифт выбирать в другом месте
61676

Jukki
17.07.2022, 14:47
Возможно ли задать начальное значение переменой экземпляра функционального блока непосредственно в самом экземпляре? Или только создав переменную и связав с входом блока?

ASo
17.07.2022, 15:01
Это как? Разное для разных экземпляров?

Jukki
17.07.2022, 15:31
Это как? Разное для разных экземпляров?
Да. Как у сименса можно было в Instance DB задать каждой переменной начальное значение отличное от того, что прописано в функциональном блоке.

ASo
17.07.2022, 17:07
В КДС такое сделать нельзя.

Jukki
18.07.2022, 09:59
Почему нельзя ?

Запускаемся (сами фб можно и не запускать) и смотрим
y1.xx/y2.xx/y3.xx

ps
17 задать можно. Проверено. Остальное - не знаю

Благодарю, действительно работает, даже несколько переменных. Интересно, откуда информация? В документации подобного не видел.

Валенок
18.07.2022, 11:29
Интересно, откуда информация? В документации подобного не видел..
Справка/Содержание/Типы данных CDS/Пользовательские../Структуры/пример инициализации

Юрий_Че
18.07.2022, 15:45
Народ, подскажите пожалуйста, как округлить число типа real до десятых на языке ST
Пример: чтоб из числа 18.5889965 получилось 18,6

EFrol
18.07.2022, 16:15
Что в голову пришло:
val := INT_TO_REAL(REAL_TO_INT(val * 10)) / 10;

kondor3000
18.07.2022, 16:44
Народ, подскажите пожалуйста, как округлить число типа real до десятых на языке ST
Пример: чтоб из числа 18.5889965 получилось 18,6

Val:=REAL_TO_DINT(Val*10)/10.0 ;

VyacheslavN
20.07.2022, 17:10
Добрый день, делаю проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet, для обмени данными создал глобальные переменные и задал им адреса: ProgramMod AT%IW240 :WORD, AutomatMod AT%QW156 : WORD; при компиляции проекта получил ошибку: codesys 3728 не верный адрес. До этого делал аналогичный проект на ПЛК WAGO все было хорошо. Подскажите пожалуйста адреса modbus для Овена, перерыл весь интернет, такой темы ни кто не поднимал, в доках не Овен то же про адреса ни чего. Как правильно установить обмен данными с ПК?

In_Da_Cher_A
20.07.2022, 17:54
Подскажите пожалуйста адреса modbus для Овенакакие адреса?

перерыл весь интернет, такой темы ни кто не поднимал, первое правило бойцовского клуба знаешь?;)

в доках не Овен то же про адреса ни чеговторое правило бойцовского клуба

Как правильно установить обмен данными с ПК?перестать использовать в работе с ОВЕН те же самые "шаблоны, что и

аналогичный проект на ПЛК WAGO все было хорошо
всё есть в обучающих видео - только вместо ПК в обучающих видео панель оператора

kondor3000
20.07.2022, 18:29
Добрый день, делаю проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet, для обмени данными создал глобальные переменные и задал им адреса: ProgramMod AT%IW240 :WORD, AutomatMod AT%QW156 : WORD; при компиляции проекта получил ошибку: codesys 3728 не верный адрес. До этого делал аналогичный проект на ПЛК WAGO все было хорошо. Подскажите пожалуйста адреса modbus для Овена, перерыл весь интернет, такой темы ни кто не поднимал, в доках не Овен то же про адреса ни чего. Как правильно установить обмен данными с ПК?

Советую просмотреть все обучающие видео для начала https://owen.ru/product/plk110_m02/video
Для обмена с устройствами рекомендуется давать имена переменным, а не использовать прямую адресацию AT%QW156. Ко всем переменным которые вы добавили в конфигурации, например в слейве ТСР, вы можете обращаться по именам и они будут глобальными и энергонезависимыми.
Пример слейва ТСР (и одновременно Debag 232) с добавленными переменными ProgramMod, AutomatMod (WORD) 61769
Адрес устройства 1, порт 502, адреса переменных 0 и 1.

FPavel
20.07.2022, 21:36
Пример слейва ТСР (и одновременно Debag 232)
Не додумывался до такого, чтобы в ModBus (slave) вставить два физических интерфейса TCP и Debug RS-232.
Подскажите, в такой конфигурации можно (утрированно) подключить две панели оператора - одну к порту Ethernet, а другую к порту Debug - и воздействовать на одни и те же переменные?

Стоит задача продублировать переменные, которыми ПЛК обменивается с панелью по TCP, на другой порт (Debug + АС4 RS-485) для обмена с внешней SCADA или панелью. А желания копировать ~100 переменных и делать код для их копирования напрочь отсутствует.
Такое добавление физического порта в конфигурацию решает мою задачу (подключить вторую панель или SCADA с равноправным доступам к переменным)?

kondor3000
20.07.2022, 22:18
Не додумывался до такого, чтобы в ModBus (slave) вставить два физических интерфейса TCP и Debug RS-232.
Подскажите, в такой конфигурации можно (утрированно) подключить две панели оператора - одну к порту Ethernet, а другую к порту Debug - и воздействовать на одни и те же переменные?

Стоит задача продублировать переменные, которыми ПЛК обменивается с панелью по TCP, на другой порт (Debug + АС4 RS-485) для обмена с внешней SCADA или панелью. А желания копировать ~100 переменных и делать код для их копирования напрочь отсутствует.
Такое добавление физического порта в конфигурацию решает мою задачу (подключить вторую панель или SCADA с равноправным доступам к переменным)?

Можно подключить 2-3 панели (или другие устройства) без проблем и все переменные будут общими. Вместо Debag (или вместе с ним) может быть и RS485-1 (RS485-2) или ТСР с портом 503.
По поводу Скады посмотрите ещё видео. Все (даже промежуточные или Модбас Мастера) переменные могут быть переданы в Скаду стоящей на том же компе, к которому уже подключён ПЛК https://www.youtube.com/watch?v=B03Fi_P2sqk
Кстати можно встроить слейв в слейве или мастер в слейве, а так же скопировать все переменные массивом из мастера в слейв, здесь в конце есть мой пример https://owen.ru/forum/showthread.php?t=35809

FPavel
20.07.2022, 22:48
Спасибо, особенно за "порт 503" - Ethernet, конечно же, предпочтительнее.
Т.е. смогу на один Ethernet разъём подключить и панель и SCADA по разным логическим портам (502 и 503). Как раз то, что просит заказчик.

Видео посмотрел, но оно немного про решение другой задачи.

Спасибо.

VyacheslavN
21.07.2022, 11:13
Большое спасибо вам за ответ с примером, теперь все понятно!

ЛеонидC
21.07.2022, 18:04
Добрый день, делаю проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet. Подаю команду char wcommand[] = {
0x00,0x01, //Идентификатор транзакции
0x00,0x00, //Идентификатор протокола
0x00,0x06, //Длина сообщения
0x00, //Адрес устройства
0x06, //Код функции запись аналогового значения
0x00, //Адрес регистра Hi байт
0x00, //Адрес регистра Lo байт wcommand[9] = LowAdr
0x00, //Значение регистра Hi байт
0xd6 //Значение регистра Lo байт
для записи в регистр Modbus (пакет TCP/IP). Ничего не пишется. Косяк с адресами (Адрес регистра Hi байт )?

kondor3000
21.07.2022, 20:06
Добрый день, делаю проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet. Подаю команду char wcommand[] = {

для записи в регистр Modbus (пакет TCP/IP). Ничего не пишется. Косяк с адресами (Адрес регистра Hi байт )?

Вы в ПЛК конфигурацией пользуетесь или библиотекой для обмена? Сделайте скрины. Какую программу используете в компе? Сделайте скрины настроек.
Прочитайте мой пост #8900 на предыдущей странице и посмотрите скрин примера обмена через конфигурацию по ТСР.
Если первый раз, то ещё и обучающие видео посмотрите, по ссылке там же.

In_Da_Cher_A
21.07.2022, 20:25
вчера Вячеслав, сегодня Леонид и все делают один и тот же
проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet.вы там всем курсом чтоли друг у друга списываете? с одними и теми же ошибками и нежеланием смотреть обучающее кино :D

ЛеонидC
21.07.2022, 21:15
Программа на с++ написана. С ВАГО она работала. ПЛК волнует только с точки зрения modbus адресов. Например, для ВАГО было // %QW256 по %QW511 регистры на modbus чтение 0x0100-0x01FF - modbus адреса этих регистров (modbus-чтение, plk-чтение/запись) // %IW256 по %IW511 регистры на modbus запись 0x0300-0x03FF - modbus адреса этих регистров (modbus-чтение/запись, plk-чтение), а для этого Овена непонятно. Просьба конструктивно, если знаете, а не "смотреть обучающее кино"

kondor3000
21.07.2022, 21:25
Программа на с++ написана. С ВАГО она работала. ПЛК волнует только с точки зрения modbus адресов. Например, для ВАГО было // %QW256 по %QW511 регистры на modbus чтение 0x0100-0x01FF - modbus адреса этих регистров (modbus-чтение, plk-чтение/запись) // %IW256 по %IW511 регистры на modbus запись 0x0300-0x03FF - modbus адреса этих регистров (modbus-чтение/запись, plk-чтение), а для этого Овена непонятно. Просьба конструктивно, если знаете, а не "смотреть обучающее кино"

Овен это не Ваго !!! Так понятней?

ЛеонидC
21.07.2022, 21:29
Стандарты modbus одинаковые, адреса могут быть разные для ВАГО нашли, а для Овена нет, все просто, импортозамещение ....

kondor3000
21.07.2022, 21:32
Стандарты modbus одинаковые, адреса могут быть разные для ВАГО нашли, а для Овена нет, все просто, импортозамещение ....

У двоих подобное получилось, они слушали и учились! Если не хотите разобраться, дело ваше. Ответы вам даны.

In_Da_Cher_A
21.07.2022, 21:42
Программа на с++ написана. С ВАГО она работала. ПЛК волнует только с точки зрения modbus адресов. а вы-то с ваго работали? вы хоть понимаете, как сделана область памяти у ваго?

Просьба конструктивно, если знаете, а не "смотреть обучающее кино""а есть вы тоже за меня будете?":D то есть вы за весь день ничего не делали, не смотрели, не пытались понять и пытаетесь сейчас списать "правильный ответ"?
конструктивно - перестаньте тупо пытаться соединять программу, написанную тупо под ВАГО, с контроллером ОВЕН
просто по одной простой причине - это разные железяки.

Стандарты modbus одинаковые, адреса могут быть разные для ВАГО нашли, а для Овена нет, все просто, импортозамещение ....
вотсап работает и на айфоне и на андроиде :D

VyacheslavN
21.07.2022, 21:54
В ПЛК конфигуратором создал modbus(slave) как вы показали в пост #8900 , на компе программа написана на С++, обучающие видео все пересмотрел, там показывают как установить связь с ПЛК по EZERNET в среде codesys, это все понятно, у нас другая задача: надо организовать обмен данными ПК - ПЛК по modbus TCP, аналогичный проект успешно работает на ПЛК WAGO, теперь, по понятным причинам, пересели на ОВЕН, контроллер для меня новый, раньше с ним не работал. Программа на ПК своя, понимаем, что проблема скорее всего с адресами, как проверить, пока не знаю, если есть какие либо идеи поэтому поводу, поделитесь, буду благодарен. С Леонидом работаем вместе.

kondor3000
21.07.2022, 22:01
В ПЛК конфигуратором создал modbus(slave) как вы показали в пост #8900 , на компе программа написана на С++, обучающие видео все пересмотрел, там показывают как установить связь с ПЛК по EZERNET в среде codesys, это все понятно, у нас другая задача: надо организовать обмен данными ПК - ПЛК по modbus TCP, аналогичный проект успешно работает на ПЛК WAGO, теперь, по понятным причинам, пересели на ОВЕН, контроллер для меня новый, раньше с ним не работал. Программа на ПК своя, понимаем, что проблема скорее всего с адресами, как проверить, пока не знаю, если есть какие либо идеи поэтому поводу, поделитесь, буду благодарен. С Леонидом работаем вместе.

В моём посте указаны и параметры, которые вам нужны. Адрес слейв устройства 1, порт 502, адреса переменных 0 и 1. То есть адреса начинаются с 0, так как WORD занимает 1 регистр, соответственно адреса 0,1, 2, 3 и т.д.
Забиваете IP контроллера, все параметры и пытаетесь работать в своей программе. К ПЛК надо подключиться онлайн, залить проект в память и старт. Меняете переменные и смотрите в программе.
На скрине не вижу TCP.

Если не получиться пока с вашей программой, обмен с компом можно проверить программой Owen OPC Server, скачивается и ставится за 2 мин и проверяете обмен с ПЛК
https://owen.ru/product/new_opc_server

In_Da_Cher_A
21.07.2022, 23:53
там показывают как установить связь с ПЛК по EZERNET в среде codesysмда.....то есть вы тупо по словам "связь пк с плк" смотрели?
подсказка, между прочим, куда смотреть, была написана вчера

как проверить, пока не знаюначните тупо с чтения одного бита


На скрине не вижу TCP.надеюсь они просто Fix не раскрыли

capzap
22.07.2022, 07:17
Добрый день, делаю проект на ПЛК Овен 110-60м02, в проекте есть связь ПК с ПЛК по modbus TCP ethernet. Подаю команду char wcommand[] = {
0x00,0x01, //Идентификатор транзакции
0x00,0x00, //Идентификатор протокола
0x00,0x06, //Длина сообщения
0x00, //Адрес устройства
0x06, //Код функции запись аналогового значения
0x00, //Адрес регистра Hi байт
0x00, //Адрес регистра Lo байт wcommand[9] = LowAdr
0x00, //Значение регистра Hi байт
0xd6 //Значение регистра Lo байт
для записи в регистр Modbus (пакет TCP/IP). Ничего не пишется. Косяк с адресами (Адрес регистра Hi байт )?

адрес устройства пробовали выставлять в единицу и 255?
Как выглядит слейв в плк?

VyacheslavN
22.07.2022, 07:36
Спасибо за совет, программа залита и запущена, ОРС сегодня попробую. ТСР порт 502.

kondor3000
22.07.2022, 09:06
Спасибо за совет, программа залита и запущена, ОРС сегодня попробую. ТСР порт 502.

Обычная заливка записывает проект в оперативную память. Чтобы проект сохранился в ПЗУ и запускался после отключения питания, надо создать загрузочный проект.

ЛеонидC
22.07.2022, 10:50
адрес устройства пробовали выставлять в единицу и 255?
Как выглядит слейв в плк?

Адреса проверю, спасибо

Anton441
29.07.2022, 07:11
Здравствуйте. Возник вопрос. Требуется выполнить операции со строковыми переменными длиной свыше 255. Мне известно про библиотеку standart64.lib, однако она создана для CoDeSys 3.5. Имеется ли аналогичная библиотека для CoDeSys 2.3?

Валенок
29.07.2022, 07:31
syslibstr, в справке

Anton441
29.07.2022, 08:01
syslibstr, в справке

Где взять? Описание? Действительно позволяет работать со строками большой длины?

Anton441
29.07.2022, 08:36
syslibstr, в справке

Эта библиотека вообще поддерживается контроллерами ОВЕН?

Валенок
29.07.2022, 08:50
+ Справка/содержание/биб-ки/системные/..
Да, видимо

Anton441
29.07.2022, 13:26
+ Справка/содержание/биб-ки/системные/..
Да, видимо

Почему-то библиотека не работает. По крайней мере вычисление длины переменной STRING.
Пример во вложении. В чём дело?

kondor3000
29.07.2022, 13:49
Почему-то библиотека не работает. По крайней мере вычисление длины переменной STRING.
Пример во вложении. В чём дело?

Эта библиотека вам всё равно не подойдёт, там во всех блоках указано STRING (80), см. скрин 61903
А не работает наверно в эмуляции, надо на железе проверять.
Обычный оператор LEN работает, длина 8.
Мне вот интересно где строки используются длиннее 255 ?
Может вам лучше с файлами начать работать?

Anton441
29.07.2022, 14:18
Эта библиотека вам всё равно не подойдёт, там во всех блоках указано STRING (80), см. скрин 61903
А не работает наверно в эмуляции, надо на железе проверять.
Обычный оператор LEN работает, длина 8.
Мне вот интересно где строки используются длиннее 255 ?
Может вам лучше с файлами начать работать?

026099 1217 164<0x0D><0x0A>026096 1114 174<0x0D><0x0A>026087 1019 182<0x0D><0x0A>026081 726 188<0x0D><0x0A>026029 929 203<0x0D><0x0A>026084 821 215<0x0D><0x0A>026119 1219 395<0x0D><0x0A>026118 1119 399<0x0D><0x0A>026102 729 418<0x0D><0x0A>026117 1027 418<0x0D><0x0A>026104 926 436<0x0D><0x0A>026103 824 443<0x0D><0x0A>026125 1238 618<0x0D><0x0A>026124 1141 624<0x0D><0x0A>026123 1039 636<0x0D><0x0A>026120 738 646<0x0D><0x0A>026122 940 664<0x0D><0x0A>026121 842 669<0x0D><0x0A>026116 1246 844<0x0D><0x0A>026114 1044 856<0x0D><0x0A>026115 1142 856<0x0D><0x0A>026113 944 866<0x0D><0x0A>026111 743 873<0x0D><0x0A>026112 853 881<0x0D><0x0A>026110 1246 1064<0x0D><0x0A>026109 1148 1077<0x0D><0x0A>026108 1051 1082<0x0D><0x0A>026107 954 1083<0x0D><0x0A>026105 755 1091<0x0D><0x0A>026106 853 1095
В этой строке содержимое штрихкода+координата X штрихода+координата Y штрихода и таких групп до 32 штук. Длина строковой переменной до 580 символов. Применяется в системе помарочного учёта алкогольной промышленности.
61904

Валенок
29.07.2022, 14:36
Посмотрел по живому. Syslibstr хочет какие-то неразрешенные ссылки на внешние поу. В общем syslibstr в топку.
while + pointer решат проблему длины длинной строки.

Но !
Разовью тему от kondor3000, с его позволения, надеюсь))
По приведенному примеру Вам пока нафик не нужны длинные строки. Можно обойтись standart'ом. Это же очевидно )) #13#10 говорят об этом.

Anton441
01.08.2022, 16:03
Посмотрел по живому. Syslibstr хочет какие-то неразрешенные ссылки на внешние поу. В общем syslibstr в топку.
while + pointer решат проблему длины длинной строки.

Но !
Разовью тему от kondor3000, с его позволения, надеюсь))
По приведенному примеру Вам пока нафик не нужны длинные строки. Можно обойтись standart'ом. Это же очевидно )) #13#10 говорят об этом.

Так как применить библиотеку stsndart? И что такое #13#10 на которые Вы ссылаетесь?

melky
01.08.2022, 17:11
Anton441 <0x0D><0x0A> Валенок вам про это говорит, делите и побеждайте...

Валенок
02.08.2022, 10:12
Так как применить библиотеку stsndart? ..


VAR CONSTANT
(*"делите и побеждайте.." (С) melky*)
DELIM : STRING := '<0x0D><0x0A>'; (*в натуре видимо нужно '$R$N', оно же '$0D$0A'*)
END_VAR
VAR
L_DELIM : DWORD;
longstr : STRING(1000) := (*1000: любое тупо большее макс ожидаемого (580?) + sizeof(тип под pstr), ниже*)
//из примера выше - как есть
'026099 1217 164<0x0D><0x0A>....<0x0D><0x0A>026106 853 1095';

cnt : INT; (*сколько строк после парсинга*)
result : ARRAY[1..40] OF STRING; (*40: любое >= чем макс кол-во "тегов", string(x) - X заведомо вмещающее "тег"*)
(*в результ класть DELIM не вижу смысла*)

i : DWORD;
pstr : POINTER TO STRING; (*string(x) - X заведомо вмещающее "тег" + DELIM*)
pz : POINTER TO BYTE;
z : BYTE;
END_VAR
-------------------------------------------------
L_DELIM := LEN(DELIM);
cnt := 0;
pstr := ADR(longstr);
REPEAT
cnt := cnt + 1;
i := FIND(pstr^, DELIM (*заместо DELIM достаточно 1-ый символ DELIM'а*));
(*//тупо быстрее MID'а*)
IF i > 0 THEN (*ненужно здесь SEL вставлять, т.к. каждый цикл LEN выполнять незачем*)
pz := pstr + i - 1;
ELSE
pz := pstr + INT_TO_DWORD(LEN(pstr^));
END_IF
z := pz^; (*либо 1-й символ DELIM'а либо #0*)
pz^ := 0;
result[cnt] := pstr^;
pz^ := z;
(*//*)
pstr := pz + L_DELIM;
UNTIL i = 0 //проверять cnt на превышение макс кол-ва строк - сами
END_REPEAT


ps
вообще задача непонятна - как можно длину длиной строки просрать если она не возникает в ПЛК из ниоткуда

kondor3000
02.08.2022, 12:56
END_VAR из раздела объявлений, с наглой мордой, переселился в конец программы.

Валенок
02.08.2022, 15:54
Она сама, это глюк КДС !!!
))
Спасибо, убрал
и добавил (рука дрогнула когда копипастил)

Ruslanadm
04.08.2022, 11:06
Добрый день. Так сложилось, что сначала изучил OWEN Logic, теперь дошла очередь до Codesys.
Вопрос. Как реализовать промежуточное сохранение значения входа или переменной, часто это называют термином "защелка"?
В лоджике это было примерно так62013

petera
04.08.2022, 12:00
Добрый день. Так сложилось, что сначала изучил OWEN Logic, теперь дошла очередь до Codesys.
Вопрос. Как реализовать промежуточное сохранение значения входа или переменной, часто это называют термином "защелка"?
В лоджике это было примерно так62013

Блок MOVE с дополнительным входом EN

kondor3000
04.08.2022, 18:55
Добрый день. Так сложилось, что сначала изучил OWEN Logic, теперь дошла очередь до Codesys.
Вопрос. Как реализовать промежуточное сохранение значения входа или переменной, часто это называют термином "защелка"?


Или написать на ST, переменные как на скрине - IF I8 THEN AO1:=AI1; I8:=FALSE; END_IF

IF I8 THEN
AO1:=AI1;
I8:=FALSE;
END_IF

Ruslanadm
05.08.2022, 00:39
Спасибо, все получилось. По крайней мере, с CFC, ST тоже, конечно, безусловно пригодится, но он пока только в планах.

ZETs
06.08.2022, 14:52
Здравствуйте!
К МВА подключен расходомер сигналом 4-40.
Требуется посчитать сколько воды проходит в течении 10, 30, 1 час. Можно конечно каждую секунду суммировать значения и делить на интервал времени.
Не нашел готовый блок, возможно плохо искал и есть готовый блок для подобной задачи.
Подскажите пожалуйста есть для подобной задачи готовые блоки учета нарастающим итогом за заданный интервал времени?

ASo
06.08.2022, 15:40
Integral из util.liv

Dzherenov
08.08.2022, 14:05
Здравствуйте, заинтересовала такая задача. На фабрике есть сеть датчиков влажности которые передают в свой специализированный контроллер данные (допустим по Modbus RTU), можно ли как то "присосаться" к этой сети с помощью ПЛК110? Я так полагаю в режиме слейв он данные запрашивать не может, и два мастера в сети тоже не могут существовать. Специализированный контроллер тоже не сможет передать данные в ПЛК110 он такой функции не имеет.

kondor3000
08.08.2022, 14:18
Здравствуйте, заинтересовала такая задача. На фабрике есть сеть датчиков влажности которые передают в свой специализированный контроллер данные (допустим по Modbus RTU), можно ли как то "присосаться" к этой сети с помощью ПЛК110? Я так полагаю в режиме слейв он данные запрашивать не может, и два мастера в сети тоже не могут существовать. Специализированный контроллер тоже не сможет передать данные в ПЛК110 он такой функции не имеет.
ПЛК не могут прослушивать сеть, если вам нужно 1-2 регистра прослушать, можно применить СМИ-2М, в режиме Spy (прослушивание сети). Для 10 параметров, понадобиться 10 штук. https://owen.ru/product/smi2_m
Либо применить ПЛК110 вместо спец. контроллера.
ПЛК110 может сам опрашивать все ваши датчики. Тогда будет один мастер. Далее можно передать хоть в Скаду, хоть куда вам надо. А спец контроллер, подключить как мастер, можно к другому порту контроллера.

EFrol
08.08.2022, 14:40
С помощью ПЛК110 - можно.
Только с использованием библиотек для работы с портами.
Соответственно анализировать принятые пакеты придется на уровне программы.
На диске с ПЛК110 есть описание такой библиотеки
06. Документация\05. Библиотеки\02. Библиотеки ОВЕН для всех ПЛК\Библиотека UNM.pdf

EFrol
08.08.2022, 15:09
Эта библиотека работает с портами на прямую. Есть возможность реализовать собственный протокол.
Предлагаю для ознакомления ветку https://owen.ru/forum/showthread.php?t=22498

Dzherenov
08.08.2022, 15:09
ПЛК не могут прослушивать сеть, если вам нужно 1-2 регистра прослушать, можно применить СМИ-2М, в режиме Spy (прослушивание сети). Для 10 параметров, понадобиться 10 штук. https://owen.ru/product/smi2_m
Либо применить ПЛК110 вместо спец. контроллера.
ПЛК110 может сам опрашивать все ваши датчики. Тогда будет один мастер. Далее можно передать хоть в Скаду, хоть куда вам надо. А спец контроллер, подключить как мастер, можно к другому порту контроллера.

То-есть единственный адекватный вариант это ПЛК110 опрашивать датчики и ретранслировать через слейв их в спец контроллер? Он не сможет наверное такое рапознать, ну да ладно просто было интересно как решить такуюзадачу. Спасибо за ответ.

kondor3000
08.08.2022, 15:18
Эта библиотека работает с портами на прямую. Есть возможность реализовать собственный протокол.
Предлагаю для ознакомления ветку https://owen.ru/forum/showthread.php?t=22498

Это давно прочитал и даже реализовал пару раз. Тут всё равно контроллер выступает в роли Мастера сети и думаю со спец контроллером (он тоже мастер) будет конфликт. Да, опросить всякие счётчики по нестандартным протоколам можно. По крайней мере подключиться в готовую сеть мне не удавалось.

EFrol
08.08.2022, 15:38
А разве с помощью функции GETBYTE не видны пакеты Мастера и пакеты Ведомых?

После захвата интерфейса LOCKDEVICE порт находится в режиме приема.
Не знаю размер входного буфера, но GETBYTE возвращает 0 если буфер пуст, т.е. можно организовать цикл ожидания.
А дальше побайтно принимать и анализировать - отделять запросы от ответов, а из ответом брать нужное. (снифить)

kondor3000
08.08.2022, 17:50
А разве с помощью функции GETBYTE не видны пакеты Мастера и пакеты Ведомых?

После захвата интерфейса LOCKDEVICE порт находится в режиме приема.
Не знаю размер входного буфера, но GETBYTE возвращает 0 если буфер пуст, т.е. можно организовать цикл ожидания.
А дальше побайтно принимать и анализировать - отделять запросы от ответов, а из ответом брать нужное. (снифить)

Все функции не тестировал, если сделаете рабочий пример, могу проверить. А пока это только догадки.
Например ПЛК опрашивает модуль МВ110-8А (адрес 16) по модбас RTU (115200, 8N1), надо написать программу для второго ПЛК, которая будет считывать данные с действующей линии опроса.

EFrol
08.08.2022, 18:24
Да Вы правы. Стоит сначала проверить. Пожалуй у меня будет такая возможность. Продолжим чуть позже насчет UNM.
Однако хочу поймать Вас на слове, что ПЛК не может прослушивать сеть.
Вот выдержка из РП на ПЛК110:
62059

kondor3000
08.08.2022, 20:33
Да Вы правы. Стоит сначала проверить. Пожалуй у меня будет такая возможность. Продолжим чуть позже насчет UNM.
Однако хочу поймать Вас на слове, что ПЛК не может прослушивать сеть.
Вот выдержка из РП на ПЛК110:
62059

Протокол только Овен. Изначально разговор был про Модбас RTU, потом про нестандартные протоколы.



есть сеть датчиков влажности которые передают в свой специализированный контроллер данные (допустим по Modbus RTU),

Если бы спец контроллер был Овен, то ТС так бы и написал сразу.

EFrol
08.08.2022, 21:35
Хорошо. Последний аргумент.
Здесь отрывок кода, который реализует, со слов автора, режим ПЛК-slave.
https://owen.ru/forum/showthread.php?t=23870
Т.е. после захвата порт прослушивается на запросы от ПК, а это значит, что порт может так же прослушивать и ответы от ведомых.

Так что уважаемый Dzherenov ищите подробное описание протокола обмена с датчиками и вперед!!!

bunkov
11.08.2022, 09:44
Подскажите, пытаемся открыть программу в кодесисе и выдает такую ошибку

Невозможно создать модуль Rs-232
62101

kondor3000
11.08.2022, 10:14
Подскажите, пытаемся открыть программу в кодесисе и выдает такую ошибку

Невозможно создать модуль Rs-232

Какой у вас ПЛК ?
Вы случайно не переносите с одного ПЛК на другой программу? Возможно таргеты криво установлены. Выложите программу, в расширенном режиме, добавить файл, посмотрим.
Попробуйте с сайта пример открыть любой https://owen.ru/product/codesys_v2/example_program
Откуда такие размытые скрины у вас ? Скрины делайте нормальные, тем же Paint в формате jpg получаются скрины во всю страницу.

bunkov
11.08.2022, 11:21
Понял благодарю. Проверим.

koo1de
10.09.2022, 12:37
Всем привет. Ситуация следующая:

В проекте есть ФБ отвечающие за обработку сигналов AI, за работу насосов, за работу приводов, за работу задвижек и т.д., есть экземпляры ФБ для самого оборудования. Есть также переменные которые используются для связи между ПЛК 160 М02 и панелью СП315. Если переменная может быть изменены по коду в ПЛК то в ФБ она объявляется в разделе VAR_IN_OUT и это отлично работает. На переменную ФБ подкидывается переменная для связи и мы можем менять ее как с панели, так и в ПЛК.

Однако теперь ситуация следующая, что нужно к этим двум переменным добавить третью (для связи с вышестоящей АСУТП), чтобы все три переменные (ПЛК, панель, АСУТП) могли взаимно изменяться.

Например. Есть переменная отвечающая за уставку HHH_SP: REAL; Она находится в VAR_IN_OUT функционального блока, на нее подается переменная HHH_TCP: REAL, которая выводит эту самую уставку на панель и с панели же мы ее можем менять. Теперь к ПЛК 160 М02 по RS-485(Modbus RTU) будет подключена АСУТП, которая будет писать например в новую переменную HHH_RTU. И теперь все три переменные HHH_TCP, HHH_RTU, HHH_SP должны изменяться независимо от того, пришло ли новое значение от АСУТП, панели или ПЛК.

Каким образом можно это реализовать?

С ПЛК Schneider или Siemens проблем нет. Можно адресно накладывать переменные друг на друга. Как быть на ПЛК-160-М02 и Codesys 2.3?

kondor3000
10.09.2022, 15:03
Всем привет. Ситуация следующая:
Каким образом можно это реализовать?

Можно адресно накладывать переменные друг на друга. Как быть на ПЛК-160-М02 и Codesys 2.3?

Есть несколько вариантов:
1) убрать эти переменные из ФБ (HHH_TCP, HHH_RTU, HHH_SP) и сделать одну глобальную HHH, её можно объявить либо в глобальных, либо вставить в конфигурацию.
2) сделать один слейв вставив туда TCP, RS485-1, RS485-2 и все переменные будут доступны по всем каналам.
3) вставить один слейв в другой, все переменные с первого будут общими.
Варианты можно комбинировать.

зы: есть и ещё варианты, 4 и 5, если этих мало))

koo1de
12.09.2022, 07:11
Есть несколько вариантов:
1) убрать эти переменные из ФБ (HHH_TCP, HHH_RTU, HHH_SP) и сделать одну глобальную HHH, её можно объявить либо в глобальных, либо вставить в конфигурацию.
2) сделать один слейв вставив туда TCP, RS485-1, RS485-2 и все переменные будут доступны по всем каналам.
3) вставить один слейв в другой, все переменные с первого будут общими.
Варианты можно комбинировать.

зы: есть и ещё варианты, 4 и 5, если этих мало))

Вот собственно проблема именно в том, что нужно разнести на разные слейвы TCP и RTU, чтобы на RTU можно было менять настройки связи не задевая TCP. Но чтобы переменные были общими.
Расскажите подробнее про 3, 4 и 5 варианты)))

КБСОЮЗ
12.09.2022, 07:51
Добрый день!
ПЛК110-60МК2. Не могу передать сигнал на быстрые выходы. Логика в нутри программы Timer по прерыванию работает, и выдает необходимое количество импульсов (светодиоды выходов DQ1, DQ2 работаю одекватно), а до выходной клемы (винт присоединения) сигнал не доходит. Как подключить. Если можно прошу приммитивный пример данного кода в CFC.

In_Da_Cher_A
12.09.2022, 07:56
светодиоды выходов DQ1, DQ2 работаю одекватно
физический светодиод на самом ПЛК или в конфигурации ПЛК в онлайне квадратик мигает?

kondor3000
12.09.2022, 08:20
Вот собственно проблема именно в том, что нужно разнести на разные слейвы TCP и RTU, чтобы на RTU можно было менять настройки связи не задевая TCP. Но чтобы переменные были общими.
Расскажите подробнее про 3, 4 и 5 варианты)))
4 и 5, касаются мастера в слейве, вам сейчас не надо.
А также все переменные должны быть общими или часть, короче задание не ясно пока.
Правда, по вашему посту вам 2 вариант нужен, если все переменные общие, а настройки будут меняться независимо, порты то разные. Тут скрин слейва со вставленными TCP и Debag 232, вставить можно любые. И ещё прочитайте два след. поста по ссылке.
https://owen.ru/forum/showthread.php?t=10555&page=890#8900

КБСОЮЗ
12.09.2022, 10:26
Светодиод на самом ПЛК.

In_Da_Cher_A
12.09.2022, 11:21
Светодиод на самом ПЛК.светодиод горит, а сигнала физического нет? смотрите свою схему подключения, логика здесь не причём

west
12.09.2022, 11:44
Не могу передать сигнал на быстрые выходы.
Проще скинуть свой проект, чем угадывать.

КБСОЮЗ
12.09.2022, 12:30
In_Da_Cher_A
Спасибо! Проверил, да был косяк в подключении.

КБСОЮЗ
12.09.2022, 13:15
ПЛК110-60 МК2.
Как задать частоту сигнала на быстром выходе с периодом менее T#1ms.

In_Da_Cher_A
12.09.2022, 14:49
ищите на форуме, где-то была тема с "самодельным" библиотеками
про быстрые выходы начните сначала здесь
https://owen.ru/forum/showthread.php?t=22169

koo1de
13.09.2022, 15:33
4 и 5, касаются мастера в слейве, вам сейчас не надо.
А также все переменные должны быть общими или часть, короче задание не ясно пока.
Правда, по вашему посту вам 2 вариант нужен, если все переменные общие, а настройки будут меняться независимо, порты то разные. Тут скрин слейва со вставленными TCP и Debag 232, вставить можно любые. И ещё прочитайте два след. поста по ссылке.
https://owen.ru/forum/showthread.php?t=10555&page=890#8900

Почитал. То, что описано мне уже известно.
Повторюсь. Уже есть переменные которые через AT % наложены на адреса в Modbus Slave (делалось это таким образом, потому что переменные удобнее заполнять копипастом в Notepad++, и в целом текстовое оформление переменных для быстрой работы мне кажется более удобны) - эти переменные присваиваются на INPUT, IN_OUT в функциональные блоки где и ведется обработка данных. Сделано это для обмена данными между СП315 и ПЛК160М02 по Modbus TCP.
Требуется создать нового Slave для обмена по Modbus RTU в конфигурации ПЛК(т.к. сетевой адрес в сети RTU должен быть настраиваемым на ПНР. Тот что уже есть в Slave для TCP мы не хотим менять, т.к. привязки у панели везде к сетевому адресу 1). И в этот новый Slave выдать те же самые переменные что уже созданы для обмена по TCP.
62618
62619

Есть ли какие-то способы для этого?

koo1de
13.09.2022, 15:39
4 и 5, касаются мастера в слейве, вам сейчас не надо.
А также все переменные должны быть общими или часть, короче задание не ясно пока.
Правда, по вашему посту вам 2 вариант нужен, если все переменные общие, а настройки будут меняться независимо, порты то разные. Тут скрин слейва со вставленными TCP и Debag 232, вставить можно любые. И ещё прочитайте два след. поста по ссылке.
https://owen.ru/forum/showthread.php?t=10555&page=890#8900

К примеру в Unity от SE - я могу создать несколько переменных и всем присвоить один и тот же адрес. Как их будут использовать по коду он не ограничивает, вопрос только в адекватности программиста и программы.
У Siemens, я могу через AT наложить как на адрес %, так и VAR1 AT VAR1_1: BOOL - т.е. наложить переменную на переменную если у них одинаковые типы.

Сложность в Codesys 2.3 в том, что на каждый слейв создаются новые адреса % или же новые переменные, а мне необходимо выдавать одни и те же переменные в два разных канала информационного обмена.
И если с управляющими командами все проще. То как быть, что в ПЛК могут писать уставки как с панели по TCP, так и с АСУТП по RTU - а уставка это одна и та же, одна и та же переменная.

ASo
13.09.2022, 15:44
Придётся написать FB для синхронизации.

capzap
13.09.2022, 15:45
Есть ли какие-то способы для этого?

пробовали в слейв добавить по мимо ТСР еще сетку по RS485? Другими словами один слейв на два интерфейса

koo1de
13.09.2022, 15:45
Придётся написать FB для синхронизации.

Неужели нет более изящных и простых решений?)

petera
13.09.2022, 15:46
К примеру в Unity от SE - я могу создать несколько переменных и всем присвоить один и тот же адрес. Как их будут использовать по коду он не ограничивает, вопрос только в адекватности программиста и программы.
У Siemens, я могу через AT наложить как на адрес %, так и VAR1 AT VAR1_1: BOOL - т.е. наложить переменную на переменную если у них одинаковые типы.

Сложность в Codesys 2.3 в том, что на каждый слейв создаются новые адреса % или же новые переменные, а мне необходимо выдавать одни и те же переменные в два разных канала информационного обмена.
И если с управляющими командами все проще. То как быть, что в ПЛК могут писать уставки как с панели по TCP, так и с АСУТП по RTU - а уставка это одна и та же, одна и та же переменная.

Как уже сказано выше, просто добавь в существующий слейв еще один интерфейс, например, RS485.
Все!
Будешь "писать уставки как с панели по TCP, так и с АСУТП по RTU - а уставка это одна и та же, одна и та же переменная"

ЗЫ.
Адрес для второго интерфейса можешь сделать любым!

koo1de
13.09.2022, 15:47
пробовали в слейв добавить по мимо ТСР еще сетку по RS485? Другими словами один слейв на два интерфейса

У обоих интерфейсов будет один и тот же адрес в сети Modbus. Мне требуется чтобы у TCP он оставался 1, а для RTU на ПНР выставят какой захотят не трогая TCP (обмен с панелью)

capzap
13.09.2022, 15:48
У обоих интерфейсов будет один и тот же адрес в сети Modbus. Мне требуется чтобы у TCP он оставался 1, а для RTU на ПНР выставят какой захотят не трогая TCP (обмен с панелью)

по ТСР UnitID не так важен, идентификатором является адрес в сети Ethernet, Вы попробуйте сначала а не отметайте предложения

koo1de
13.09.2022, 15:49
Будет ли работать добавления нового Slave в уже существующий Slave? Тот, который будет вложенным, будет видеть переменные своего родителя в ветке?

koo1de
13.09.2022, 15:50
по ТСР UnitID не так важен, адресом является адрес в сети Ethernet, Вы попробуйте сначала а не отметайте предложения

Графические привязки на панели СП315 реализованы с указанием UnitID, при смене UnitID панель теряет эти переменные, т.е. не может их опросить.

capzap
13.09.2022, 15:50
Будет ли работать добавления нового Slave в уже существующий Slave? Тот, который будет вложенным, будет видеть переменные своего родителя в ветке?

так Вы проще ищите решение или как можно сложнее?

petera
13.09.2022, 15:53
Тот, который будет вложенным, будет видеть переменные своего родителя в ветке?

Нет, но родитель будет видеть ВСЕ переменные вложенного слейва

ЗЫ.
https://owen.ru/forum/showthread.php?t=14199&p=146969&viewfull=1#post146969

koo1de
13.09.2022, 15:59
так Вы проще ищите решение или как можно сложнее?

Ищу наиболее простое решение среди тех, которые не будут вносить изменения в уже существующий проект.
Перепривязывать визуализацию на панели уже не представляется возможным. Можно вкрутить секцию, которая бы не затрагивала уже существующую алгоритмию, можно создать новые переменные и наложить их на старые и т.д. и т.п.
Переделывать структуру уже существующих ФБ, уже не представляется возможным.

Трудность с заказчиком в том, что не было какого-то конкретного требования по RTU (АСУТП) составляющей. В итоге накидали два порта в один Slave и всем все вроде бы ОК. А сейчас заказчик говорит - мы собрали все ваши типовые шкафы в один шлейф RS-485 и будет работать по RTU. Это ведет к тому, что нужны разные SlaveID/UnitID.

Отсюда и возник вопрос, что можно сделать с тем, что имеем.

koo1de
13.09.2022, 16:02
Нет, но родитель будет видеть ВСЕ переменные вложенного слейва

ЗЫ.
https://owen.ru/forum/showthread.php?t=14199&p=146969&viewfull=1#post146969

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

Спасибо за наводку - буду тестить!

petera
13.09.2022, 16:04
Ищу наиболее простое решение среди тех, которые не будут вносить изменения в уже существующий проект.
Перепривязывать визуализацию на панели уже не представляется возможным. Можно вкрутить секцию, которая бы не затрагивала уже существующую алгоритмию, можно создать новые переменные и наложить их на старые и т.д. и т.п.
Переделывать структуру уже существующих ФБ, уже не представляется возможным.

Трудность с заказчиком в том, что не было какого-то конкретного требования по RTU (АСУТП) составляющей. В итоге накидали два порта в один Slave и всем все вроде бы ОК. А сейчас заказчик говорит - мы собрали все ваши типовые шкафы в один шлейф RS-485 и будет работать по RTU. Это ведет к тому, что нужны разные SlaveID/UnitID.

Отсюда и возник вопрос, что можно сделать с тем, что имеем.

Сделайте слейв в слейве
Внешний слейв с RS485, в нем не нужно делать переменные, только добавить слейв с TCP, с существующими переменными.

kondor3000
13.09.2022, 16:47
Вооот. А вот второй вариант уже возможно подходит. Т.е. я могу иерархически старший Slave оставить пустым по переменным, а нижестоящий наполнить нужными мне переменными и адресами переменных.

Спасибо за наводку - буду тестить!

Я же вам это три дня назад написал)) это был 3 вариант.

И мой вам совет, не пишите программ с прямой адресацией AT %QW12.0.0. Вам теперь в слейве, переписывать все адреса придётся.
Если лень давать имена переменным, сделайте массив (структуру) с указателем на 0 адрес и ВСЁ!

vitek101
16.09.2022, 09:34
Пардон, не в ту ветку написал...

Pirog
20.09.2022, 21:44
Добрый день. Подскажите, где можно найти готовые проекты (сначала простые) для изучения. Спасибо

kondor3000
20.09.2022, 22:15
Добрый день. Подскажите, где можно найти готовые проекты (сначала простые) для изучения. Спасибо
Здесь примеры проектов https://owen.ru/product/codesys_v2/example_program
Смотрите 17 обучающих видео https://www.youtube.com/watch?v=UGUnjXPVcmM&list=PLdzwdjCksDcsdiLTFGVu2-USwUXB5nDJj

user32767
23.09.2022, 06:46
62762

Здравствуйте. Посмотрите, пожалуйста, на снимок экрана, я не понимаю эту логику. Я с сименсовских ПЛК пришёл, и там этот пример работает. А на СПК107 вот так вот.

user32767
23.09.2022, 07:40
62764

Вот весь экран приложения, F5 нажал.
Нет, ну конкретно в этом случае я, конечно, могу пользоваться константой AlwaysFalse, но просто теперь уже нет уверенности в том, что Set и Reset вообще работают в Codesys.

user32767
23.09.2022, 07:41
Одна лишняя картинка, извините, удалял вроде

Евгений Кислов
23.09.2022, 07:47
62764

Вот весь экран приложения, F5 нажал.
Нет, ну конкретно в этом случае я, конечно, могу пользоваться константой AlwaysFalse, но просто теперь уже нет уверенности в том, что Set и Reset вообще работают в Codesys.

Если вы пришли с сименовских ПЛК, то должны понимать, что такое OB1.
В CODESYS ему соответствует задача MainTask.

Т.е. сейчас вы создали программу, но нигде ее не вызываете.

user32767
23.09.2022, 07:53
Спасибо! Теперь работает.

wwtp39
29.09.2022, 11:20
Подскажите, что означает стрелка на пиктограмме в POU?62830

ASo
29.09.2022, 11:23
Данный POU изменён и требует загрузки в ПЛК.

kondor3000
29.09.2022, 12:36
Подскажите, что означает стрелка на пиктограмме в POU?62830

Даже если просто скомпилировать проект, могут появиться стрелочки. Можно не заливая проект, сначала посмотреть изменения, а потом залить.

КонстантинСт
30.09.2022, 10:58
Добрый день!
Можете, пожалуйста, подсказать в чем принципиальная разница между ПЛК 110-60 и ПЛК 160? Может быть есть какая-то сравнительная таблица?
И второй вопрос: предположим есть станок или установка, т.е. обычная средняя система автоматизации. Есть ли смысл брать ПЛК 160 или лучше взять 200ый? Если не считать количество вхожов/выходов.

kondor3000
30.09.2022, 14:13
Добрый день!
Можете, пожалуйста, подсказать в чем принципиальная разница между ПЛК 110-60 и ПЛК 160? Может быть есть какая-то сравнительная таблица?
И второй вопрос: предположим есть станок или установка, т.е. обычная средняя система автоматизации. Есть ли смысл брать ПЛК 160 или лучше взять 200ый? Если не считать количество вхожов/выходов.

Неужели трудно открыть на сайте нужный ПЛК и сравнить? https://owen.ru/catalog/programmiruemie_logicheskie_kontrolleri
Если вкратце 110_60 имеет только дискретные входы, выходы, а 160 ещё и аналоговые входы и выходы.
Что вам нужно решайте сами.
А на 200 ещё и среда разработки другая, опять же, что вам удобнее.

Alex198
30.09.2022, 17:42
Друзья, подскажите пожалуйста как убрать пробелы (точки) в строке ввода

kondor3000
30.09.2022, 17:46
Друзья, подскажите пожалуйста как убрать пробелы (точки) в строке ввода

Не печатать пробелы и точки.

west
30.09.2022, 20:53
как убрать пробелы (точки) в строке ввода
А мне даже интересно стало где и что там появляется само по себе.

Hrenotehnik
03.10.2022, 12:40
…столкнулся с конфликтом двух библиотек

SmsOwenLib (2.3.0.25)
Oscat_basic_333

В обоих присутствуют POU с именами «IS_NUM», «ISC_NUM», «TO_UML», что вызывает ошибку компиляции №3700.
РЭ предлагает "просто" заменить имя повторяющегося POU.
Прошу подсказать:
Как переименовать или выборочно удалить неиспользуемые POU в библиотеке (из Oscat использую только ф/б ONTIME)
(p.s. Всем здравствуйте…)

capzap
03.10.2022, 12:43
1) выкинуть из проекта библиотеку оскат
2) открыть библиотеку оскат отдельно
3) скопировать в свой проект нужный ФБ или экспорт,импорт

In_Da_Cher_A
03.10.2022, 12:45
неиспользуемые POU в библиотекеПроект-Опции-Генератор кода-исключить объекты-исключить неиспользуемые
как-то так. Если не получится, то надо руками выбирать вроде