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

Gfthr
23.10.2019, 22:16
Доброго времени суток. Есть такой вопрос: имеется ПР200-220-24, имеется Owen Logic. Реализовывал ил кто-либо в этой среде ПИД-регулятор с заданием стартовой точки, или имел кто-то опыт в прикручивании этой самой стартовой точки к имеющемуся регулятору в библиотеке?

Andrew_Stranger
23.10.2019, 22:42
Вы думаете все поняли, что есть стартовая точка?

Gfthr
23.10.2019, 22:57
уточняю по стартовой точке - нужно, чтобы регулятор начинал расчет не с нулевым значением накопленной интегральной составляющей, а со значением, которое может быть получено при работе регулятора

Валенок
24.10.2019, 15:58
уточняю по стартовой точке - нужно, чтобы регулятор начинал расчет не с нулевым значением накопленной интегральной составляющей, а со значением, которое может быть получено при работе регулятора
Непонятно каким боком тута Ложик. Например КДС.Util.PID для такой задачи имеет ручной режим :
переключение в ручн, установка ручного выхода (вызов), переключение в авто (вызов). Вызовы можно в одном цикле.
Есть еще способы.

В КДС.Util.PID значение интегр.суммы определяется не только соббсно суммой но и механизмом "безударного" перехода (который заодно решает мифическую проблему "бесконечного" роста). Думаю в Ложик.ПИДе тоже должно быть подобное (см. доки), иначе этот пид нужен был бы только коням. Сферическим.

Витька-Титька
25.10.2019, 12:48
Помогите пожалуйста!
У меня ПЛК100 ОВЕН.
Хочу увидеть хоть один отправленный с него сокет по UDP соединению.
Все примеры которые мне скидывали не работают.
SysSockInetAddr по всей видимости вообще не работает. Значит записываю IP в виде 16#, SysSockHtons не понятно работает или нет, я пробовал и через него и на прямую приписывать порт структуре SOCKADDRESS.
Потом возвращаем дескриптор сокета с помощью SysSockCreate, и заносим в буфер данные и пытаемся отправить их с помощью SysSockSendTo.
Результат - ТИШИНА(

capzap
25.10.2019, 12:55
Помогите пожалуйста!
У меня ПЛК100 ОВЕН.
Хочу увидеть хоть один отправленный с него сокет по UDP соединению.
Все примеры которые мне скидывали не работают.
SysSockInetAddr по всей видимости вообще не работает. Значит записываю IP в виде 16#, SysSockHtons не понятно работает или нет, я пробовал и через него и на прямую приписывать порт структуре SOCKADDRESS.
Потом возвращаем дескриптор сокета с помощью SysSockCreate, и заносим в буфер данные и пытаемся отправить их с помощью SysSockSendTo.
Результат - ТИШИНА(

хоть и не udp но пример рабочий, если сервер еще доступен https://owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715

Витька-Титька
25.10.2019, 13:22
Спасибо, посмотрю. Если вдруг появится какой нибудь пример UDP соединения, я буду благодарен, если вы его покажите.

Александр N
26.10.2019, 13:55
Добрый день, есть небольшая проблема, может кто сталкивался. При использовании библиотеки SyslibCallback возникает следующее предупреждение " Предупреждение 2501: A callback function is not allowed to contain local variables".
В принципе на работу не влияет, но как-то нервирует. Если есть советы то заранее спасибо.

Александр N
26.10.2019, 14:01
Спасибо. Сам разобрался.

Alex_A
29.10.2019, 15:30
Добрый день!

Есть ПЛК150-220-А0-М и модуль по RS485 МУ110-224.16к, возможно ли с его помошью управлять пневмораспределителем Festo?

Andrew_Stranger
29.10.2019, 15:49
Добрый день!

Есть ПЛК150-220-А0-М и модуль по RS485 МУ110-224.16к, возможно ли с его помошью управлять пневмораспределителем Festo?

Почему бы и нет.

Alex_A
29.10.2019, 15:58
Почему бы и нет.


Проблема в том что я новичок в этом деле.

Грубо говоря - есть 6 распределителей , они должны срабатывать по порядку с некоторой паузой срабатывания перед каждой операцией...

Собрал на LD схему - вроде компилируется и работает в эмуляции, при переносе на живой плк: срабатывают выходы на самом ПЛК , но вот как использовать МУ110-224.16к я не разберусь. Вроде по RS485 он подцепился и обмен идет

я посмотрел видеоуроки по подключению модулей и тп. , но там везде модули конфигурируются с типом WORD, а LD только BOOL понимает и я пока не понимаю как с этим работать..

Мне бы примерчик как это где нибудь реализовано - я бы разобрался.

Sulfur
29.10.2019, 22:20
Примерчик:
45366
И имейте ввду, что желательно использовать промежуточные реле для пневмораспределетителей. А так же обязательно защиту от противоЭДС катушек. Как минимум диод параллельно катушке. Идеально - разъем с индикацией и встроенной защитой.

workmind
30.10.2019, 04:22
Здравствуйте!

Начал знакомиться со средой CoDeSys 2.3 и библиотеками. Часть из них стандарта и делает тоже самое, что и в других средах разработки, даже названия одни и те же, но есть ряд интересных, например: DECODE_FLOAT. Я видел, что на форуме задавали вопросы по работе данной функции, но я никак не могу найти ее в хелпе или иную документацию. Где всё это искать? Где можно прочитать про неё? Есть ли вообще какой-то хелп, где подробное описание всех возможных функций?

Alex_A
30.10.2019, 09:22
Примерчик:
45366
И имейте ввду, что желательно использовать промежуточные реле для пневмораспределетителей. А так же обязательно защиту от противоЭДС катушек. Как минимум диод параллельно катушке. Идеально - разъем с индикацией и встроенной защитой.

Разьем на пневмораспределителях с защитой вроде бы.

Попробовал по вашей подсказке - ошибки пропали, но МУ всё равно не срабатывает - не загорается индикатор на том выходе который хочу использовать. Убрал всё до мниимума , оставил только выходы.
Может я конфигурирую что то - не так ?

45372
45373
45374

DDmitry
30.10.2019, 09:41
Добрый день!
РТС термистор, с проводом 2 м ДРТС014-1000_ОМ.50/2 можно использовать для ТРМ200-Н (двухканальный измеритель с универсальным входом и RS-485)?

petera
30.10.2019, 09:56
Разьем на пневмораспределителях с защитой вроде бы.

Попробовал по вашей подсказке - ошибки пропали, но МУ всё равно не срабатывает - не загорается индикатор на том выходе который хочу использовать. Убрал всё до мниимума , оставил только выходы.
Может я конфигурирую что то - не так ?

45372
45373
45374

Не хватает картинки с настройками Register output
45376
Какой адрес? какая команда(функция) используется?

ЗЫ.
По умолчанию команда- 0х06, а для модуля нужна команда 0х10!

Sulfur
30.10.2019, 11:02
Alex_A

МУ всё равно не срабатывает
Он и не будет срабатывать в данной программе. Потому что переменная Word_to_MU110 объявлена дважды - в ПЛЦ_ПРГ и в конфигурации ПЛК. В ПЛЦ_ПРГ лишнее. То, что объявлено в конфигурации, имеет статус глобальной переменной.

Alex_A
31.10.2019, 08:49
Сделал всё по советам , моудль вроде запустился. Спасибо

Еще вопрос - за что отвечает параметр Register adress в Register output module?

petera
31.10.2019, 10:15
Сделал всё по советам , моудль вроде запустился. Спасибо

Еще вопрос - за что отвечает параметр Register adress в Register output module?
В вопросе находится ответ - параметр Register adress отвечает за адрес регистра МУ, в который Вы хотите писать биты (для МУ110 это 50 - адрес битовой маски)

45392

В слейве (в МУ110) есть карта распределения регистров, каждый регистр имеет уникальный адрес
45393

Странно? Почему этот вопрос возник в конце, а не в начале?
Какой адрес Вы там написали для МУ, если не знаете зачем этот параметр?

Alex_A
31.10.2019, 13:24
В вопросе находится ответ - параметр Register adress отвечает за адрес регистра МУ, в который Вы хотите писать биты (для МУ110 это 50 - адрес битовой маски)

45392

В слейве (в МУ110) есть карта распределения регистров, каждый регистр имеет уникальный адрес
45393

Странно? Почему этот вопрос возник в конце, а не в начале?
Какой адрес Вы там написали для МУ, если не знаете зачем этот параметр?

50 написал, знакомый скинул настройки модуля, но он сам не помнит почему 50.

Потом я тоже нашел это в руководстве. Но всё равно спасибо.

otporuchik
01.11.2019, 09:29
Добрый день.
Вопрос по счетчику CTU из стандартной библиотеки кодесис.
Вход PV, который задает границу отсчета заявлен с типом данных WORD, т.е. ожидается, что он может принимать значения до 65535 включительно.
Однако по факту принимает не более 32767, при больших значениях просто включает выход Q.
Ошибка в счетчике, или в моих представлениях?45409

Sulfur
01.11.2019, 10:28
Можете написать свой ФБ вместо этого. И там уже хоть DWORD организовать.

otporuchik
01.11.2019, 10:41
Можете написать свой ФБ вместо этого. И там уже хоть DWORD организовать.

Это-то понятно. Вопрос во времени. Хотел стандартной библиотекой воспользоваться, не изобретать велосипеды, а оно вон как.

Sulfur
01.11.2019, 10:48
Я люблю изобретать велосипеды.

otporuchik
01.11.2019, 11:20
Я люблю изобретать велосипеды.

Вполне себе вариант, в принципе.
Спасибо.

nau
02.11.2019, 13:44
Добрый день!

Подскажите, как реализовать на ST следующее:
Если input1 = true и затем input2 вдруг становиться true (т.е. input 1 и input2 = true) тогда X = 1
Если input2 = true и затем input1 вдруг становиться true (т.е. input 1 и input2 = true) тогда X = 0

_Mikhail
02.11.2019, 13:50
Добрый день!

Подскажите, как реализовать на ST следующее:
Если input1 = true и затем input2 вдруг становиться true (т.е. input 1 и input2 = true) тогда X = 1
Если input2 = true и затем input1 вдруг становиться true (т.е. input 1 и input2 = true) тогда X = 0

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

nau
02.11.2019, 14:57
используй сравнение по переднему фронту. Кто первый пришел , тот............и работает
большое спасибо! все получилось!

Aflubin
04.11.2019, 15:40
Добрый вечер!! Подскажите - системные таски в Кодесис, в режиме эмуляции не работают что ли?

wotan
05.11.2019, 10:50
Здравствуйте!
Объясните пожалуйста допустим cifra = 777.777
x := REAL_TO_INT (cifra*5); если здесь я понял как можно вывести число до запятой (будет 3889)
y := (cifra/0.5); то как здесь реализовать чтобы было число после запятой (получается 1555.554 (а я хочу чтобы было 554))

TV13M
05.11.2019, 11:22
Доброго времени!
Подскажите плз можно ли из под линукса править переменные на ПЛК (к примеру 160)
(по 485 я такое уже делал. А по изернету что то не могу додуматься. ПЛК ещё нет. Пытаюсь найти инфу о возможности чтения правки переменных)
Может быть укажите ссылку описания настроек.

Sulfur
05.11.2019, 13:39
wotan

y := (cifra/0.5) ... хочу чтобы было 554
Что-то я не нашел специального оператора для этого. Сочиняю велосипед:


VAR
Y_1: REAL;(*Вспомогательная переменная*)
Y_2: REAL;(*Вспомогательная переменная*)
y:INT; (*требуемый результат*)
END_VAR;
-----
Y_1:= cifra/0.5; (*Вычисляем правильное значение*)
Y_2:= TRUNC(Y_1);(*Отбрасываем дробную часть*)
y:=REAL_TO_INT ((Y_1-Y_2)*1000); (*Вычисляем разницу с дробью и без, и умножаем на требуемую точность после запятой*)

Alex_A
06.11.2019, 09:59
В вопросе находится ответ - параметр Register adress отвечает за адрес регистра МУ, в который Вы хотите писать биты (для МУ110 это 50 - адрес битовой маски)

45392

В слейве (в МУ110) есть карта распределения регистров, каждый регистр имеет уникальный адрес
45393

Странно? Почему этот вопрос возник в конце, а не в начале?
Какой адрес Вы там написали для МУ, если не знаете зачем этот параметр?

Потихоньку разбираюсь с ПЛК. ПЛК150, напомню.

Удалось сделать все операции с помощью выходов DI самого ПЛК.

Но с модулем МУ110-224.16К непонятки. Програмно включаю отключаю вход - он всё равно подает на катушку 24в. Не подскажете , куда копать ?
Придется промежуточные реле ставить ?

Sulfur
06.11.2019, 11:37
МУ110-224.16К ... всё равно подает на катушку 24в
Он в принципе не может подавать напряжение. У него выход типа "открытый коллектор". Т. е. проще говоря, когда индикатор выхода горит, то выход "замкнут" на СОМ. Промежуточное или твердотельное реле подключается плюсом к +24V, минусом на выход блока.

Валенок
07.11.2019, 16:21
Он в принципе не может подавать.. .
Не рассмотрен вариант когда вход грохнули неправильным подключением))

Sulfur
07.11.2019, 20:35
Валенок
Выход - "открытый коллектор", эмиттер выходного транзистора сидит на СОМ, коллектор торчит наружу. Пробой коллектор-эмиттер будет по факту замыканием DOхх на СOM. Откуда там взяться напряжению?
Напоминаю, задавший вопрос так и сказал буквально - блок выдает напряжение.

stanislau
08.11.2019, 14:31
Всем привет. Может кто-то на пальцах объяснить разницу в языках fbd и cfc? Я тут что-то запутался. Что в codesys называется cfc, в owen logic называется fbd. Я различий не заметил или не понял. Если они одинаковы, то зачем в codesys есть отдельно cfc и fbd? В codesys не работал, может поэтому не понимаю отличий.

_Mikhail
08.11.2019, 14:52
Всем привет. Может кто-то на пальцах объяснить разницу в языках fbd и cfc? Я тут что-то запутался. Что в codesys называется cfc, в owen logic называется fbd. Я различий не заметил или не понял. Если они одинаковы, то зачем в codesys есть отдельно cfc и fbd? В codesys не работал, может поэтому не понимаю отличий. SFC это одна из разновидностей FBD
45512

Rednaxel
08.11.2019, 15:24
Может кто-то на пальцах объяснить разницу в языках fbd и cfc
Чтобы совсем уже запутать Станислава ;) который вроде спрашивал про CFC а не про SFC, процитирую классика:
Одним из вариантов FBD является язык программирования CFC (Continuous Function Chart). Он позволяет произвольно задавать порядок выполнения блоков. Диаграммы CFC дают программисту большую свободу действий, но платой за это является несколько большая вероятность допустить ошибку и более объемный код.

stanislau
08.11.2019, 19:43
Чтобы совсем уже запутать
Rednaxel,ну, в принципе, у Вас получилось:) Как я понял, если программу составлять в fbd, то исполняться будет все сразу. В cfc можно задать последовательность исполнения отдельных частей программы (например: опрашивать входы или первым запускать таймер ton10, а не ton5). Так что ли?

ASo
08.11.2019, 21:02
В FBD версии КДС - совсем нет.
В порядке строк, в каждой строке - слева направо.

stanislau
08.11.2019, 21:18
То есть в fbd - слева направо, сверху в низ? А в cfc можно задавать любой порядок исполнения блоков?

Rednaxel
08.11.2019, 23:24
То есть в fbd - слева направо, сверху в низ? А в cfc можно задавать любой порядок исполнения блоков?

Порядок в CFC тоже слева направо сверху вниз, но блоки на поле проекта размещаются как угодно программисту (точнее, их проще перемещать) и он сам следит чтобы порядок исполнения не нарушался. По субъективным ощущениям FBD как-то сковывает по сравнению с CFC.

Попробуйте такую концепцию программирования в CodeSYS: основная программа PLC_PRG в CFC, а блоки из которых она состоит пишутся на ST. Чаще всего так и делается, насколько я знаю.

Ну а в Owen Logic уже как есть, тут ничего не попишешь.

stanislau
09.11.2019, 00:46
Не хочу ни кому надоедать. Но может кто-нибудь приложить пару скринов одинакового алгоритма - один на fbd, второй на cfc. До программирования плк я еще не дошел. Пока посматриваю на КДС и для меня оказалось новостью наличие cfc. В fbd тоже можно перемещать блоки как угодно. Главное правильно соединить, потом крути как хочешь, линии связи не оборвутся и порядок исполнения не нарушиться. Так в Owen Logic по крайней мере.

Rednaxel
09.11.2019, 02:17
.... До программирования плк я еще не дошел. Пока посматриваю на КДС и для меня оказалось новостью наличие cfc...
Не заморачивайтесь, мой Вам совет, Станислав: программируйте в чем Вам больше нравится! Вас ждет еще так много новостей когда начнете, что эта новость быстро уйдет на второй план. Не все сразу. Постепенно сами разберетесь. ;-)

stanislau
09.11.2019, 20:43
OK. Пока помучаю ПР200, но начальство на ПЛК110 растрясу.

Andy86-j
11.11.2019, 14:01
Такой вопрос - есть ли в codesys при написании программы на CFC ограничение по размеру поля вниз?
Столкнулся с проблемой, что не могу переместить элементы программы ниже определенной области. Вправо элемент сместить можно, вниз нельзя. Причем программа то не шибко, чтобы большая была.

Rednaxel
11.11.2019, 15:58
Такой вопрос - есть ли в codesys при написании программы на CFC ограничение по размеру поля вниз?
Столкнулся с проблемой, что не могу переместить элементы программы ниже определенной области. Вправо элемент сместить можно, вниз нельзя. Причем программа то не шибко, чтобы большая была.

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

Andy86-j
11.11.2019, 16:25
Как это у Вас выглядит подробнее? Можно с картинками, инженеры они любят картинки смотреть ;)
45536
Переместил содержимое программы выше, но вход все равно ниже не опустить.
Пробовал открыть новый проект, но даже в нем самый первый элемент не удается переместить ниже определенной точки. Справа, кстати, тоже есть ограничение.

Andy86-j
11.11.2019, 16:25
Там какой-то скрытый return. Сделайте 1 прогон и он съедет ниже.

Я, наверное, совсем чайник. А что вы под прогоном подразумеваете?

Rednaxel
11.11.2019, 16:40
Я, наверное, совсем чайник. А что вы под прогоном подразумеваете?

Я тоже впервые слышу про скрытые Return. В режиме эмуляции или в контроллере видимо имелось ввиду прогон.

Вроде все нормально у Вас выглядит. Попробуйте масштаб помельче чтобы видеть все поле.
Да и опустили вы в общем-то достаточно чтобы вставить любой блок? Зачем Вам дальше-то?

Если хотите сделать какую-то подпрограмму и запихать ее подальше чтобы не мозолила глаза, просто создайте отдельный ФБ.

Andy86-j
11.11.2019, 16:50
Я тоже впервые слышу про скрытые Return. В режиме эмуляции или в контроллере видимо имелось ввиду прогон.

Вроде все нормально у Вас выглядит. Попробуйте масштаб помельче чтобы видеть все поле.
Да и опустили вы в общем-то достаточно чтобы вставить любой блок? Зачем Вам дальше-то?

Если хотите сделать какую-то подпрограмму и запихать ее подальше чтобы не мозолила глаза, просто создайте отдельный ФБ.

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

Rednaxel
11.11.2019, 17:35
Просто я ранее думал, что белое поле оно бесконечно и можно лишь упираться в количество элементов программы.
На самом деле ограничение сводится к Вашей способности охватить весь проект целиком. Вот она наверняка меньше чем ПЛК может обработать ;)

Кроме того, одни части программы важнее других, над ними приходится "попотеть" и все это время Вы путаетесь во всей это каше которую сам же и заварили.
Поэтому алгоритм обычно делится на подпрограммы (блоки), которые уже потом размещаются в PLC_PRG.
И тогда, как правило, если уже не получается на большом мониторе охватить взглядом весь алгоритм, значит пора подумать какой еще блок выделить в подпрограмму.
Структурный подход, понимашь ;)

Rednaxel
11.11.2019, 19:17
Да цикл один сделайте, и мешающая хрень ниже упадет

В смысле "Онлайн - один цикл"? Это баг такой? Или фича? ;)

Andy86-j
12.11.2019, 14:20
баг в среде, а цикл - фича для обхода бага
Онлайн необязательно

Пробовал и оффлайн и онлайн - смещения return не происходит. И да, он появляется только при подключении ПЛК и при эмуляции и располагается в нижней левой точке. Если элементы расположить выше, то он тоже поднимется. Но ниже некой границы не уходит.

Rednaxel
12.11.2019, 22:37
Пробовал и оффлайн и онлайн - смещения return не происходит. И да, он появляется только при подключении ПЛК и при эмуляции и располагается в нижней левой точке. Если элементы расположить выше, то он тоже поднимется. Но ниже некой границы не уходит.

Все это все ужжжасно интересно... Но, мне кажется, за всеми этими границами, return и прочими частностями мы забыли о главном: для чего все это?
Приоткройте тайну, Andy : что именно у Вас не получается? Какой техпроцесс Вы пытаетесь автоматизировать? На какой его части Вы "застопорились"?
Можете выложить проект, не стесняйтесь: посмотрим, покритикуем ;) и разработаем наиболее эффективное решение. Так Вы быстрее научитесь, а мы выберемся из этих зарослей багов CodeSys/

Andy86-j
13.11.2019, 07:03
Все это все ужжжасно интересно... Но, мне кажется, за всеми этими границами, return и прочими частностями мы забыли о главном: для чего все это?
Приоткройте тайну, Andy : что именно у Вас не получается? Какой техпроцесс Вы пытаетесь автоматизировать? На какой его части Вы "застопорились"?
Можете выложить проект, не стесняйтесь: посмотрим, покритикуем ;) и разработаем наиболее эффективное решение. Так Вы быстрее научитесь, а мы выберемся из этих зарослей багов CodeSys/
Да я бы не сказал, что у меня не получается. Просто стало неожиданностью, что поле программы конечно. До этого на FBD все рисовал и там этой проблемы не было(видимо из-за большей однозначности последнего действия в процессе и отсутствии этого returnа). Рисую проект работы вакуумной камеры. Просто на мой взгляд легче, когда весь проект сверху вниз идет, в этом плане надо было так на FBD и рисовать, просто решил попробовать для интереса CFC. Сейчас просто покучнее все блоки скомпоную.
Касаемо писания отдельных ФБ. Не особо, на мой взгляд, там и места выиграется. Т.к. в основном там логические проверки AND(включается то-то, но должно быть много условий для этого).

Andy86-j
13.11.2019, 08:35
Вам несколько про другое хотят сказать, если вы выложите свое творение, то будут подсказки, что можно убрать в функции, чтоб существенно сократить объем элементов на одном холсте, а как кучнее скомпоновать квадратики ни кто и не хотел Вам посоветовать

Выложил. Хотя изначально вопрос то был в другом - есть ли ограничения по размещения блоков в CFC. Судя по всему оно все таки есть.

Andy86-j
13.11.2019, 08:58
ну конечно есть, процессор же выполняет машинный код а не художества в виде квадратиков, на все эти линии связи отводится определенный объем памяти под ссылки с одного элемента к другому, случается так что он заканчивается

При компиляции выводится значение "использовано данных", индексы pou и похожие. Я так понимаю это некое описание объема программы. Дак вот у меня там почти все нули, т.е. моих художест/квадратиков еще крайне мало.... До этого на FBD рисовал(давно правда уже), когда проверял программу в контроллере - там можно было посмотреть загрузку ПЛК...он отдыхал по сути. Т.е. у меня, как мне кажется, не тот объем данных, чтобы закончились ресурсы процессора. По ощущению - это именно некий програмный баг. Только устранить его способом, который описал Валенок, у меня не получилось.
P.S. Если создать новую программу и в нее вставить ТОЛЬКО присваивание х=у, то его тоже не опустить ниже определенной области на экране...

Andy86-j
13.11.2019, 09:37
я ни чего не писал ни про компиляцию ни про ресурсы процессора, я говорю про интерпретатор, есть какие то же разумные рамки в программировании холстов, какой смысл что то кодить в "жопе мира" когда не охватываешь что находиться в верхнем левом углу холста

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

Пример с одним единственным присваиванием написал лишь как комментарий к вашим словам "ну конечно есть, процессор же выполняет машинный код а не художества в виде квадратиков, на все эти линии связи отводится определенный объем памяти под ссылки с одного элемента к другому, случается так что он заканчивается". В том плане, что объем памяти в данном случае совсем не причем. Я сомневаюсь, что белое пустое поле занимает какой-то объем памяти...

Rednaxel
13.11.2019, 12:43
... Хотя изначально вопрос то был в другом - есть ли ограничения по размещения блоков в CFC. Судя по всему оно все таки есть.
Подтверждаю: есть такое ограничение. При чем судя по всему никто из нас здесь с ним не сталкивался.
И о чем это говорит по-вашему?

Я считаю что как раз сказалось отсутствие системного подхода + чересчур длинные имена переменных съели все место.
Кроме того, вот эту булевскую логику и/или/если однозначно лучше всего писать на ST: будет гораздо компактнее и нагляднее, ну после некоторой растяжки мозгов конечно ;)
Например, на вскидку, не вдаваясь в подробности вашей задачи, вот этот блок открытие байпасного клапана
(откачка камеры фор насосом) почему бы для пробы не переписать на ST?
Да в конце концов, если поджимает время, выделить эту часть простым копированием в отдельный блок на том же CFC.

Ну а если возможности все это переделывать сейчас нет, остается только компактнее все упаковывать, переменные подсократить может быть.
Как то так. Надеюсь помог :)

YuriBel
13.11.2019, 17:01
Также подтверждаю, ограничение по размеру холста есть, я на него натыкался самолично. Расстраиваться по этому поводу бессмысленно, ждать, что что-то изменится - тем более бессмысленно, поэтому нужно "понять и простить". И двигаться дальше, например, разбив всю программу на несколько фрагментов, каждый из которых создать в виде собственного POU, или... в общем вариантов много.

a_gricaj
13.11.2019, 17:39
Здравствуйте, подскажите пж такой вопрос - с точки зрения экономии времени цикла ПЛК и размера кода как лучше:

Например:
A,B:bool;

1. A:=B;
или
2. If A<>B Then A:=B;End_if;

СПС

Rednaxel
13.11.2019, 18:32
Здравствуйте, подскажите пж такой вопрос - с точки зрения экономии времени цикла ПЛК и размера кода как лучше:
СПС

Скорее Вы уважаемый сотрете всю клавиатуру набирая код, прежде чем это заметно повлияет на время выполнения вашей программы ;)
Ну если конечно не будете пытатся "загонять ПЛК в угол" какими-нибудь циклами или загружая его интенсивными сетевыми опросами.
Так что не парьтесь на эту тему, пишите как Вам удобнее, лижь бы задача решалась, а оптимизировать будете когда уже "руку набъете".

P.S. Надеюсь Вы понимаете что результат выполнения вариантов в Вашем примере не всегда одинаков?

a_gricaj
13.11.2019, 18:50
Скорее Вы уважаемый сотрете всю клавиатуру набирая код, прежде чем это заметно повлияет на время выполнения вашей программы ;)
Ну если конечно не будете пытатся "загонять ПЛК в угол" какими-нибудь циклами или загружая его интенсивными сетевыми опросами.
Так что не парьтесь на эту тему, пишите как Вам удобнее, лижь бы задача решалась, а оптимизировать будете когда уже "руку набъете".

P.S. Надеюсь Вы понимаете что результат выполнения вариантов в Вашем примере не всегда одинаков?

Например: типовая задача управление эл. двигателем - использую один FB c разными областями памяти, таких двигателей 100 шт. "клавиатура не стерлась", а время цикла выросло.....
Нет, не понимаю, поясните , почему результат выполнения вариантов в моем примере не всегда одинаков....

capzap
13.11.2019, 19:13
Здравствуйте, подскажите пж такой вопрос - с точки зрения экономии времени цикла ПЛК и размера кода как лучше:

Например:
A,B:bool;

1. A:=B;
или
2. If A<>B Then A:=B;End_if;

СПС

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

a_gricaj
13.11.2019, 19:48
вот, что получилось:

LD B //A:=B;
ST A

LD A //If A<>B Then A:=B;End_if;
NE B
NOT

JMPC else1_0

LD B
ST A

else1_0:
end1_0:

получается, что "If A<>B Then A:=B;End_if;" - плохо, и код больше, и если "A<>B" так еще плюс две операции, я правильно понял?

sasav
15.11.2019, 21:58
Ребята, проясните плз. Пару линий написал на сименсе. Но в целом работаю на микроконтроллерах.
Пришлось восстанавливать оборудование сделанное другими. Оно на ПЛК110 + МВ110 + ИП320.
В принципе особо вопросов не возникло и сам контроллер работает.
Завязка возникла с ИП320.
Здесь 2 нюанса. Не знаю насколько важных. ПЛК остался старый, а ИП заменили на новый и сейчас ИП320[М01].
Я сделал ПЛК мастером, а МВ110 и ИП320 слэйвом и помадил на один шнурок.
МВ110 работает как часы. Вопросов нет.
ИП тоже, в принципе работает. Только одну хрень не догоняю.
===
У меня есть уставка температуры, которая задаётся с ИП.
Я не нашёл, каким образом задать там начальное значение.
Я его задаю в ПЛК и делаю его RETAIN.
Но в цикле работы с панелью, оно берётся с панели и затирается!
Мне бы сделать его register input/ output, при связи с панелью, но такого регистра я не вижу.
Не могу понять - мне что в конфигураторе плк делать 2 регистра с одним адресом или как?
Мне надо чтобы оператор панели видел к примеру "50" и мог изменить на 55. Условно. А он видет 0.
В сименсе там просто зеркало делается. Там вообще я операцию связи с панелью не выполняю.
Просто указываю по каждому тегу вид операции. Например время обновления. Причём могу указать "по изменению" или "по появлению".
То есть если в данный момент моя температура не видна на экране, то она и передаваться в панель не будет.
Этим обеспечивается максимальная пропускная способность шины. Загрузку я могу посмотреть прямо в работе.

Rednaxel
15.11.2019, 23:18
........
У меня есть уставка температуры, которая задаётся с ИП.
Я не нашёл, каким образом задать там начальное значение.
Я его задаю в ПЛК и делаю его RETAIN.

Понимаю Ваше непонимание после Siemens ;)

Но здесь все немного по другому. Просто сделайте панель мастером. Она будет хранить ваши Retain, доверьтесь ей, она так задумана.

Если есть возможность, посадите ее на отдельную линию RS485 или RS232 - так будет проще в плане диагностики.

Естественно это будет у Вас отдельная ветка в конфигурации ПЛК: Modbus (slave) ну или OWEN (slave), или какой там протокол выбираете.
Успехов!

Rednaxel
15.11.2019, 23:58
ИП320 ? )))

А блин! СП3xx имелось ввиду ;)
Слейвом сложнее, я так сразу и не помню как.
Вот и посоветуйте человеку: какой там нюанс?

sasav
16.11.2019, 08:02
Если что-то ответственное - при загрузке [и в периодически в процессе - как решите] проверяете уставки на целостность с восстановлением. Тест простой - хаотичное независимое включение/выключение элементов системы.
Тоже - удачи.

Ребята, я не понял. Наверное криво формулирую вопрос.
Целостность мне сейчас по-барабану. Это уже вопрос следующего порядка. Хотелось бы чтобы она просто работала.
Мастером так мастером, если надо.

Проблемы следующие.
На ИП320 не нашёл как задавать начальное значение. Мало того. Если я задаю границы для этого значения, ИП почему то в начальный момент даже этого не видит.
То есть условно у меня есть уставка температуры она должна быть в пределах 40-60 градусов. Я запускаю проект и ничего не нажимаю на панели. И в цикле связи с панелью ПЛК забирает из панели 0. Что сразу же затирает моё значение.

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

Или если я панель сделаю мастером, то это автоматом произойдёт?

Ясно, что если бы панель была со своей прогой, я бы это на крайняк руками разрулил.

sasav
16.11.2019, 13:48
Это вообще не ее задача (и проблема) вне зависимости от того - мастер она или слейв.
...
Пытаетесь снять урожай до того как засеяли. В таких случаях он обычно не очень

:)
Спасибо. Уже решил аналогичным способом.
Просто в голове некий... диссонанс ... )))

1. Панель оставил слэйвом.
2. В панеле завёл на один адрес 2 переменные с разными именами. 1 на запись - вторую на чтение... ))
3. В цикле обращения к панели, сделал тоже что и Вы.

Проверил - работает...

Хотя, если задумываться, то нюансы могут быть.
Я у себя, когда работаю, ну например в OPC сервере, я несколько типов операций делаю. В частности групповые операции.
Здесь нет подробного описания, непонятно как формируются запросы к панели. Объединяет ли она их? Чётко ли следует сформированному списку адресов? Мешает ли запись с чтением или сначала идёт чтение, а потом запись?

Но для данного проекта, думаю я его закрою. Сейчас устраню замеченные мной нюансы и пускану.
Для данного объекта рюшек не надо. Я запуск производил сидя в луже на табуретке. Шкаф и стены слегка облезли, трубы поржавели, на голову каплет....

:D

Sulfur
17.11.2019, 05:51
sasav
Как делаю я в случае ненулевых значений первоначальных уставок. Панель мастер, ПЛК слейв. В ПЛК пишу проверку требуемых регистров на ноль. В случае если таки ноль, то присваиваю безопасное значение из допустимого диапазона. Проверка (и присванивание если надо) делается только при старте(включении) ПЛК и на работу остальной программы далее не влияет. Очень удобно при отладке. И выручало на ПЛК110 старой серии, где ретайны сваливались, если в ПЛК помирал аккумулятор.

Minarion
18.11.2019, 14:01
Здравствуйте!
Совсем недавно начал изучать синтаксис ST и столкнулся с задачей, с которой не могу разобраться.

Нужно посчитать время, когда входная переменная INPUT имеет значение FALSE за сутки и сколько раз она принимала значение FALSE.
То есть: вход INPUT может принимать значение FALSE много раз за сутки, поэтому нужна сумма временных интервалов, когда INPUT имел значение FALSE и количество значений FALSE, которые будут обнуляться в заданное время (например, в 9:00 ежедневно).

petera
18.11.2019, 15:01
Здравствуйте!
Совсем недавно начал изучать синтаксис ST и столкнулся с задачей, с которой не могу разобраться.

Нужно посчитать время, когда входная переменная INPUT имеет значение FALSE за сутки и сколько раз она принимала значение FALSE.
То есть: вход INPUT может принимать значение FALSE много раз за сутки, поэтому нужна сумма временных интервалов, когда INPUT имел значение FALSE и количество значений FALSE, которые будут обнуляться в заданное время (например, в 9:00 ежедневно).

VAR
INPUT: BOOL;
Count: UDINT; (*сколько раз она принимала значение FALSE*)
SumTimeF: TIME; (*время, когда входная переменная INPUT имеет значение FALSE за сутки*)
CountOld: UDINT; (*За предыдущие сутки*)
SumTimeOld: TIME; (*За предыдущие сутки*)
F_TR: F_TRIG;
delta: TIME; (*Время цикла ПЛК*)
t1: TIME;
prevScanTime: TIME;
ttt: TIME;
init: BOOL;
TON_24h: TON;
END_VAR

(*Время цикла ПЛК*)
t1:=TIME();
IF NOT init THEN (*Первый цикл*)
prevScanTime:=t1;
init:=TRUE;
Count:= Count + BOOL_TO_INT(NOT INPUT);
END_IF
delta := t1 - prevScanTime;
prevScanTime := t1;
(*-------------------*)

F_TR(CLK:= INPUT);
(*Текущие сутки*)
Count:= Count + BOOL_TO_INT(F_TR.Q);
IF NOT INPUT THEN
SumTimeF:= SumTimeF + delta;
END_IF

TON_24h(IN:= NOT TON_24h.Q , PT:=t#24h);
(*За предыдущие сутки*)
IF TON_24h.Q THEN
CountOld:= Count;
SumTimeOld:= SumTimeF;
Count:= 0;
SumTimeF:= t#0ms;
END_IF

rts
18.11.2019, 20:52
Здравствуйте! Подскажите пожалуйста правильно ли я адресую (с учетом всех необходимых выравниваний) регистры в модбас. ПЛК160 (слейв), OP320 (мастер), из ПЛК считываю переменные модуля Statistic. Заранее спасибо!

Sulfur
19.11.2019, 07:30
Слегка изменил вашу программу. Обратите внимание на переменную temp_m.

Andrew_Stranger
19.11.2019, 16:10
TON_24h(IN:= NOT TON_24h.Q , PT:=t#30s);
PT:=t#30s?

rts
19.11.2019, 18:09
Слегка изменил вашу программу. Обратите внимание на переменную temp_m.

Спасибо! А почему надо преобразовать в тип ВОРД? Есть же в режиме слэйв у ПЛК переменная типа ФЛОАТ (Real)? В модуле Statistic переменная температуры тоже REAL?
Показания к сожалению на ОР320 не выводятся, проверить не могу. Пишет на панели "потеря связи". (как после загрузки конфигурации, так и при соединении по RS485 с ПЛК):( Микросхему RS485 и цифровой драйвер к ней пропаял, но не помогло. Что может быть еще?
P.S.Панель рабочая, работает как мастер так и слейв с ПР200 (хотя после загрузки конфигурации тоже пишет "потеря связи").

petera
19.11.2019, 19:38
PT:=t#30s?

Естественно д.б
TON_24h(IN:= NOT TON_24h.Q , PT:=t#24h);
Проверял работу программы и "ускориитель" забыл удалить :(

Sulfur
20.11.2019, 07:47
rts

В модуле Statistic переменная температуры тоже REAL
Да. А перед вывешиванием её в порт для передачи на ОП, она умножается на 10 и преобразуется в ворд.

А почему надо преобразовать в тип ВОРД?
Исходя из задачи. В ОП данный регистр отображает один знак после запятой, смысла гнать туда флоат нет. Поэтому я сделал умножение исходных данных на 10, преобразование в ворд (при нем отбрасывается дробная часть), а в ОП отображение инт с дробной частью в один разряд. Т. е. по факту обратное деление на 10 делается в самой панели.
---
На счет потери связи ОП-ПЛК: согласующие резисторы на шине стоят? С обоих концов? Можно еще покрутить Framing time в настройках порта ПЛК. Где нибудь до 20-50 мс вместо дефолтного нуля.

rts
20.11.2019, 10:28
Да. А перед вывешиванием её в порт для передачи на ОП, она умножается на 10 и преобразуется в ворд.

Исходя из задачи. В ОП данный регистр отображает один знак после запятой, смысла гнать туда флоат нет. Поэтому я сделал умножение исходных данных на 10, преобразование в ворд (при нем отбрасывается дробная часть), а в ОП отображение инт с дробной частью в один разряд. Т. е. по факту обратное деление на 10 делается в самой панели.
Хорошо. Полезная информация буду иметь ввиду.

На счет потери связи ОП-ПЛК: согласующие резисторы на шине стоят? С обоих концов? Можно еще покрутить Framing time в настройках порта ПЛК. Где нибудь до 20-50 мс вместо дефолтного нуля.
Согласующих резисторов нет, но до этого и без них потери связи не было. Просто в один момент стала (панель) писать про потерю связи. Но попробую повесить резисторы и проверить. Framing time посмотрю только как доберусь до ПЛК.
Спасибо за помощь, Sulfur. Отпишусь по результатам.

petera
20.11.2019, 11:09
Спасибо!
Показания к сожалению на ОР320 не выводятся, проверить не могу. Пишет на панели "потеря связи". (как после загрузки конфигурации, так и при соединении по RS485 с ПЛК):( Микросхему RS485 и цифровой драйвер к ней пропаял, но не помогло. Что может быть еще?
P.S.Панель рабочая, работает как мастер так и слейв с ПР200 (хотя после загрузки конфигурации тоже пишет "потеря связи").
Зачем в настройках проекта эту галку включили?
45720

У Вас разве предусмотрены в ПЛК принудительные переходы по экранам панели?
Регистр 3х00 в слейве ПЛК содержит не номера экранов, а "Цикл в микросекундах (0-15 бит)"

Ошибки в адресах
45721

и кол. регистров
45722

rts
20.11.2019, 22:27
Эх... Пока ни наличие согласующих резисторов, ни изменение параметра Framing time не помогли. Потеря связи и все тут!
petera
поправил по Вашему совету настройки ОП, но к сожалению тоже не помогло. За помощь спасибо.
Но решить в чем проблема пока не удается, хотя все таки думаю, что проблема со стороны ПЛК, раз с ПР работает.
Может есть еще варианты, что может быть?

petera
21.11.2019, 09:59
Эх... Пока ни наличие согласующих резисторов, ни изменение параметра Framing time не помогли. Потеря связи и все тут!
petera
поправил по Вашему совету настройки ОП, но к сожалению тоже не помогло. За помощь спасибо.
Но решить в чем проблема пока не удается, хотя все таки думаю, что проблема со стороны ПЛК, раз с ПР работает.
Может есть еще варианты, что может быть?

А кабель для связи панели с ПЛК какой используете? В нем нет обрыва?

rts
21.11.2019, 13:43
А кабель для связи панели с ПЛК какой используете? В нем нет обрыва?
Самодельные оба (и для загрузки, и для связи), из описания на панель брал схемы. Вчера разбирал оба, прозванивал контакты, все норм. К тому же с ПРкой я ими же пользуюсь, комплект один.

petera
21.11.2019, 13:47
Самодельные оба (и для загрузки, и для связи), из описания на панель брал схемы. Вчера разбирал оба, прозванивал контакты, все норм. К тому же с ПРкой я ими же пользуюсь, комплект один.

А Вы уверены, что "В" и "А" в ПРке соответствуют "В" и "А" в ПЛК ?

rts
21.11.2019, 18:57
А Вы уверены, что "В" и "А" в ПРке соответствуют "В" и "А" в ПЛК ?

Да. Раньше же работало и с ПЛК, и с ПР с этим комплектом кабелей. Температуру из модуля Statistics я выводил на ОП320. Все показывало. С ПРкой и сейчас все работает. Просто я не могу понять после какого момента и что могло произойти. В один момент просто сел - и все, потеря связи. Думаю уже может микросхему RS485 поменять и цифровой драйвер? Ну это крайние меры. к тому же не факт что поможет. Сигналы идут дальше на верхнюю плату ПЛК, а там без Э3 не разберешься, что куда!:(

Sulfur
22.11.2019, 06:47
Если имеет место несовпадение опрашиваемых регистров в ОП и ПЛК, то ОП это воспринимает как потерю связи. Т. е. необходимо тщательно проверить соответствие регистров в ПЛК и ОП.

rts
22.11.2019, 09:17
Я конечно перепроверю все еще раз. Но я поправил в ОП все замечания, на которые указал, уважаемый petera. и программу использовал, которую Вы поправили (где преобразование из real в word). и пока проблема с потерей связи с ПЛК не решилась.

!!!topor
22.11.2019, 09:58
Доброе утро!
Прошу Ответить на вот такой вопрос.
Как в Codesys 2.3 на языке CFC задать таймер что бы он считал не миллисекунды, а часы?
Буду очень признателен за советы

petera
22.11.2019, 10:03
Доброе утро!
Прошу Ответить на вот такой вопрос.
Как в Codesys 2.3 на языке CFC задать таймер что бы он считал не миллисекунды, а часы?
Буду очень признателен за советы

Задать таймеру уставку в часах,
TON_24h( PT:=t#24h);

45753

krollcbas
22.11.2019, 10:08
!!!topor,
Есть библиотека SysTime


(*Системное время*)
TimeAndDate.Day :=0;
TimeAndDate.DayOfWeek :=0;
TimeAndDate.dwHighMsec :=0;
Millisecond:=TimeAndDate.dwLowMSecs;
TimeAndDate.dwLowMSecs :=0;
TimeAndDate.Milliseconds :=0;
TimeAndDate.Minute :=0;
Second:=TimeAndDate.Second;
TimeAndDate.Second :=0;
TimeAndDate.Hour :=0;
TimeAndDate.Year :=0;
TimeAndDate.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);

Берем от туда переменную часа и по ее изменению делаем свой каунтер

!!!topor
22.11.2019, 10:16
Спасибо тебе, добрый человек)

Minarion
22.11.2019, 11:23
(CODE)

Спасибо Вам!

MrNobody
23.11.2019, 11:47
Добрый день!
На сайте (https://owen.ru/product/plk110_m02) для ПЛК 110 [M02] указан размер ROM памяти = 6 МБ (Flash).
Правильно ли я понимаю, что эти 6 МБ - это память программ (то есть код программы в проекте ограничен 6 МБ)?
Просто при загрузке программы 1.5 МБ периодически возникает следующая ошибка:
45767
Однако, после попытки повторной записи программа записывается.

Rednaxel
23.11.2019, 19:20
Добрый день!
На сайте (https://owen.ru/product/plk110_m02) для ПЛК 110 [M02] указан размер ROM памяти = 6 МБ (Flash).
Правильно ли я понимаю, что эти 6 МБ - это память программ (то есть код программы в проекте ограничен 6 МБ)?
Просто при загрузке программы 1.5 МБ периодически возникает следующая ошибка:
45767
Однако, после попытки повторной записи программа записывается.

Мистер Никто, назовите полностью модель своего ПЛК. Например: ПЛК110-24.30.Р-М[M02]
P.S. ROM - это вообще-то "Память только для чтения". Полагаю там прошивка самого ПЛК.
В плане пользовательской программы есть 2 модификации:
L - искусственно ограничено до 360 байт
M - 100 кБайт
(по последней букве в модели)

Dmitriy795
25.11.2019, 14:17
Добрый день. Решил для своего диплома выбрать тему "Автоматизации СУ зерносушилки" и реализовать ее в КДС 3.5, но столкнулся со следующим: естественно, у меня нет на руках ничего из аппаратной части, все нужно сделать в режиме эмуляции, отсюда вытекает вопрос: можно ли в кдс3.5 сделать эмуляцию процесса, заменив датчики и ОУ математическими уравнения( скорее всего они будут дифференциальными 1 или 2 порядка)? Если все же нет, то можно ли как-то связать файл MatLaba'а с КДС? Заранее спасибо

Валенок
25.11.2019, 15:17
можно ли
Можно
.....

Dmitriy795
25.11.2019, 16:37
Можно подробнее узнать как именно это делается? Мб спец. библиотеки или что-то другое, в мануале подобного не находил...

lina544
26.11.2019, 02:32
Да все правильно. Спасибо за подсказку.

deletednyas
26.11.2019, 15:46
Всем здравствуйте.
При переносе переменой из локальной в глобальную она перестала определяться и пишет INVALID.16#A8, что это может быть? Тип переменнной Bool.

Rednaxel
26.11.2019, 21:46
Всем здравствуйте.
При переносе переменой из локальной в глобальную она перестала определяться и пишет INVALID.16#A8, что это может быть? Тип переменнной Bool.

Приложите проект свой, что-ли? Посмотрим, что у Вас там за ошибка.

deletednyas
26.11.2019, 23:51
Приложите проект свой, что-ли? Посмотрим, что у Вас там за ошибка.

Вот мой проект. Работаю в режиме эмуляции. Ошибка возникает при открытии клапана смесительной установки. Использую написанные имитаторы для регулирования температуры в объекте, но так как переменная не принимает значение true или false (пишет INVALID.16), имитатор не работает. Помогите, пожалуйста, разобраться, пишу курсовой проект.

4582145822

Sulfur
27.11.2019, 06:52
Модель ПЛК огласите пожалуйста. Не могу подобрать таргет.

KLvodiSmesitelya: BOOL:=FALSE;
Объявленная в Глобал (НЕ в RETAIN) булева переменная по умолчанию FALSE, излишнее указание.
Есть подозрение, что эта переменная объявлена еще и в конфигурации ПЛК на физическом входе. Если это так, то из секции Глобал данное объявление необходимо убрать, т. к. переменные, объявленные в конфигурации уже являются глобальными.

Rednaxel
27.11.2019, 21:09
Модель ПЛК огласите пожалуйста. Не могу подобрать таргет.


А модель здесь никакая: в качестве ПЛК выбрана программная платформа "3S CodeSys SP PLCWinNT V2.4.

Собственно у меня никаких ошибок проект не выдал.
Господин deletednyas : проблема решилась?

Dmitro
27.11.2019, 21:36
Подключил ПЛК110-30 через Ethernet к роутеру, потом вывел в интернет. Контроллер стал доступен из интернета по фиксированному адресу.
Пингуется, лампочки Эзернета светятся, но подключится Codesys'ом к нему не могу...."произошло отключение".... Как быть?
Заранее спасибо

Rednaxel
27.11.2019, 22:09
Подключил ПЛК110-30 через Ethernet к роутеру, потом вывел в интернет. Контроллер стал доступен из интернета по фиксированному адресу.
Пингуется, лампочки Эзернета светятся, но подключится Codesys'ом к нему не могу...."произошло отключение".... Как быть?
Заранее спасибо

В смысле зачем в интернет? Вы из интернета пытаетесь к нему подключится? :eek:

Dmitro
27.11.2019, 22:43
В смысле зачем в интернет? Вы из интернета пытаетесь к нему подключится? :eek:

Да, из интернета, чтоб удаленно заливать-мониторить.

Rednaxel
27.11.2019, 23:18
Да, из интернета, чтоб удаленно заливать-мониторить.

Хотите сказать: у Вас постоянный IP и Вы пробросили на маршрутизаторе порт 1200?
А теперь приглашаете весь интернет порулить Вашим ПЛК?

Нет серьезно: не делайте так!
Если нужен мониторинг: используйте облако Овен. Если уж так нужно заливать через итернет -- настройте VPN.
Без вариантов.

krollcbas
27.11.2019, 23:34
Rednaxel, вы правы как и все теоретики и знатоки общепринятых правил.

Однако выводил я и так как пишете Вы и так как хочет Dmitro. Вот ссылка

(http://lapshinvr.ru/articals/plk-cherez-internet.html)Для VPN если делать по уму, то нужны дорогие устройства типа Microtik
Если настраивать ПК - ПК через сервисы VPN, то это ничем не отличается от Anydesk или Teamviewer, а трудозатрат там порядочно, да и надежность сомнительна.

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

Rednaxel
28.11.2019, 00:04
Rednaxel, вы правы как и все теоретики и знатоки общепринятых правил.
Ошибаетесь Вячеслав: в этом я не теоретик. И VPN мне приходится настраивать по 5-6 раз в год.

Если Ваш ПЛК выставлен голым задом в интернет и его еще никто не взломал, это совсем не значит, что это кому-то сложно сделать. Просто от этого пользы никакой: шантажировать Вас, как в случае взлома RDP затруднительно.
Вы можете гарантировать, что в один прекрасный день (или ночь :-) ) не найдется какой-нибудь умник, который сделает из Вашего ПЛК бота для своих целей? Защиты-то никакой.

Ну если уж так не вмоготу и на Keenetik 4G 35 у.е жалко, поставьте ПК с TeamViewer в одной сети с ПЛК и рулите через него. Чем не бюджетный вариант?

RV9WFJ
28.11.2019, 06:33
Проблема будет не в хакерах а в DDoS на который ПЛК неадекватно отреагиркюует 100%. А какие сложности с OpenVPN? И Microtic не нужен, через него кстати не пошло в одном месте, блокировка на уровне оператора сотовой связи.

Dmitro
28.11.2019, 07:28
Хотите сказать: у Вас постоянный IP и Вы пробросили на маршрутизаторе порт 1200?
А теперь приглашаете весь интернет порулить Вашим ПЛК?

Нет серьезно: не делайте так!
Если нужен мониторинг: используйте облако Овен. Если уж так нужно заливать через итернет -- настройте VPN.
Без вариантов.

Срочно в течение пары дней надо довести проект, а настраивать все по уму некогда. Потенциальными АСУТП хакерами можно пренебречь на пару дней )
Сейчас главная проблема почему codesys не видит контроллера, хотя местные айтишники на обьекте утверждают,
что все проброшено по уму, порт 1200 открыт и пингуется контроллер ок.... Может логи какие-то, где расписана ошибка соединения CDS нормально.

Rednaxel
28.11.2019, 08:24
Потенциальными АСУТП хакерами можно пренебречь на пару дней )

Как Вам угодно, Сударь ;-) Наше дело предостеречь и предложить корректное решение.

Причины отсутствия соединения я вижу 3:
1) Вы просто забыли настроить в ПЛК шлюз. По умолчанию его нет. Как Вы проверяете что ПЛК реально в интернете ?

2) Ваш роутер вместо реального "белого" IP имеет "серый" и вы пытаетесь использовать какой-нибудь DYN-DNS.

3) Ваши Айтишники вообще все напутали. Уверены что пингуется извне именно ПЛК, а не роутер? Чтобы это произошло, нужно кроме порта пробросить на ПЛК еще и ICMP. Вот только не надо сейчас бросаться это исправлять - это лишний риск подвергнуть ПЛК атаке ;-)
Используйте telnet для проверки соединения.

Это кратко. Если по какому-то пункту что-то не ясно -- пишите. И удачи, она Вам понадобится ;-)

Dmitro
29.11.2019, 07:35
Причины отсутствия соединения я вижу 3:
1) Вы просто забыли настроить в ПЛК шлюз. По умолчанию его нет. Как Вы проверяете что ПЛК реально в интернете ?

Гейт, маску, айпи - привел в соответствии с местным роутером.


2) Ваш роутер вместо реального "белого" IP имеет "серый" и вы пытаетесь использовать какой-нибудь DYN-DNS.

Нормальная статика у них...Через DDNS если б он и был разве нельзя подключится?


3) Ваши Айтишники вообще все напутали. Уверены что пингуется извне именно ПЛК, а не роутер? Чтобы это произошло, нужно кроме порта пробросить на ПЛК еще и ICMP. Вот только не надо сейчас бросаться это исправлять - это лишний риск подвергнуть ПЛК атаке ;-)

Айтишники говорят проходит пинг на плк, видят когда я из кодесиса туда стучусь, видят что по порту 1200, но Кодесис отваливается. Про icmp говорят это вообще не при чем. А upnp "вам не нужен".
Правда там в схеме у них кажется еще ай пи телефон висит то ли на том же проводе, то ли через него роутинг.
Еще айтишники все время спрашивают по какому протоколу я туда коннекчусь. Мало им номера порта. Какой там протокол может быть?
Сканер портов подсказывает будто бы 1200 это "scol".

Rednaxel
29.11.2019, 08:54
Айтишники говорят проходит пинг на плк, видят когда я из кодесиса туда стучусь,
видят что по порту 1200, но Кодесис отваливается. Про icmp говорят это вообще не при чем
Меньше слушайте, больше читайте: Возможен ли пинг за маршрутизатором? (https://forum.ixbt.com/topic.cgi?id=7:41440) ;)

Какой результат команды из интернета?
telnet ваш.внешний.айпи.адрес 1200
Кстати, какой маршрутизатор стоит? Чую, здесь пахнет Циской.

UPD: Похоже, здесь указана и проблема и решение (https://owen.ru/forum/showthread.php?t=15798&p=119188&viewfull=1#post119188): нужно настроить параметр Gateway в CodeSYS. Проверьте, и, если не затруднит, поделитесь результатом пожалуйста.

P.S. Там же упоминается упомянутый ICMP, возможно он тоже нужен CodeSys для проверки соединения.

krollcbas
29.11.2019, 11:31
Все намного проще, если не лететь на Марс. Уберите в роутере все настройки безопасности в ноль. ПЛК не любит лезть в интернет и в "трусах", дайте волю чувствам.
Тоже так было. Пинг есть, вижу порт открыт, а не соединяется. Так сделал и все вышло.
Повторюсь. Меня никто не пытался хакнуть, хотя я долго ждал. Оставлял на месяц мигать лампочкой + управлял так с ПЛК розеткой в доме.
Честно оплачивал статический адрес.

Dmitro
29.11.2019, 12:50
https://owen.ru/forum/showthread.php?t=15798&p=119188&viewfull=1#post119188

upd:
кажется нашел причину.

После того как в параметрах связи создали новый Chanel необходимо жмакнуть кнопку GATEWAY и выбрать Connection --> Tcp/Ip и нажать Ok.
Затем уже в окне коммуникационных параметров жмем Ok.

После этого все начинает работать!

В каких "параметрах связи" надо создать channel?

Через gateway тоже пробовал, там по умолчанию channel =0, что это за канал не знаю.

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

!!!topor
29.11.2019, 16:43
Здравствуйте товарищи,
Вот такой вопросик. Как сделать так, чтобы таймер отсчитывал время только когда есть +24 на входе контроллера? А когда сигнал пропадает то значения таймера остаются
Написал вот такую вот программку (при помощи советов добрый людей)
Пытаюсь сделать учет времени работы оборудования. т.е считать сколько времени было включено оборудование.

45869

Когда подаю сигнал на in5, in6, in7 таймеры начинают считать время, однако когда сигналы с in5, in6, in7 исчезают (n5, in6, in7 = false) таймеры продолжают вероломно считать.
Как сделать чтобы при n5, in6, in7 = false таймеры не считали и при этом сохраняли предыдушее значение?

Буду признателен за помощь

melky
29.11.2019, 16:52
На родных элементах никак. тем более вы использовали таймер TP.

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

Rednaxel
29.11.2019, 19:27
Подключил ПЛК110-30
...."произошло отключение"....
Перезагрузить ПЛК не пробовали?
Если в течении минуты после подключения не нажать ОК в окне ***** 1 PLC STARTED или был разрыв соединения, повторно подключится уже не получается именно с таким сообщением.

По пробросу портов сейчас проведу эксперимент, и увидим, что нужно.

Rednaxel
29.11.2019, 20:52
Перезагрузить ПЛК не пробовали?
Если в течении минуты после подключения не нажать ОК в окне ***** 1 PLC STARTED или был разрыв соединения, повторно подключится уже не получается именно с таким сообщением.

По пробросу портов сейчас проведу эксперимент, и увидим, что нужно.

В общем-то с ПЛК110-60 первой серии у меня тоже не получилось: соединение инициализируется, а затем связь обрывается и ПЛК больше к себе не пускает даже иногда по COM портам не зайти. Только выключение на 10 сек помогает.
Дело не в пробросе портов - я его пустил в DMZ, т.е. открыл ВСЕ порты TCP/UDP и ICMP. Мало того, попытка простого соединения telnet на порт 1200 ведет к тому же результату. В логах CodeSys Gateway Server ничего примечательного, ошибка и все.

Думаю нужно искать другой вариант - с этой моделью ПЛК не получится ничего. Могу попробовать на ПЛК100-30[M02], если интересно.

RV9WFJ
30.11.2019, 07:13
Как вариант версию CS попробуйте понизить. У GateWay из CS3.5 SP11 например явные проблемы с соединением из внешних сетей. А если его удалить и поставить GateWay от CS 3.5 SP5 то все начинает работать. Думаю в CS 2.3 могут быть те же проблемы. Причем сносить весь CS вовсе не обязательно, достаточно просто старый GateWay поверх нового накатить.

Pavel Snegirev
30.11.2019, 08:58
Всем здравствуйте. Народ подскажите пожалуйста, ранее никогда подобного не делал. В общем есть ПЛК Овен 110-30K-L, дали задание реализовать на нем всю сигнализацию шкафа управления котлом.У меня возник вопрос о том, как правильно настроить ТРМ 200 по RS 485 с ПЛК, я не понимаю каким образом выводить числовые значения (показания температуры) с ТРМ. Ну и как правильно управлять дискретными выходами входами. Есть блок питания на 24 вольта, при включении к примеру двигателя, через доп.контакты я буду пускать эти самые 24 вольта, но как правильно их подключить в клеймнике контроллера. В общем буду рад вашему совету.
45882

Rednaxel
30.11.2019, 10:44
Как вариант версию CS попробуйте понизить. У GateWay из CS3.5 SP11 например явные проблемы с соединением из внешних сетей. А если его удалить и поставить GateWay от CS 3.5 SP5 то все начинает работать. Думаю в CS 2.3 могут быть те же проблемы. Причем сносить весь CS вовсе не обязательно, достаточно просто старый GateWay поверх нового накатить.


Не знаю как это объяснить, но с утра попробовал с другого ПК и о чудо: соединение установилось .
Достал вчерашний ноутбук - и.... Ошибка связи (#0). Произошло отключение.. Ну и больше уже не подключается ниоткуда, а перезагрузить ПЛК некому.

Но! Версии CodeSys и GateWay СОВПАДАЮТ! CS 2.3.9.41 (Jul 26 2013); GateWay 2.3.9.29 (Jun 20 2013)
Единственная видимая разница в ОС - на ноуте Win7 x64, а на ПК Win10x64.

Смотрю в GateWay есть такая штука как Inspection, наверняка она может прояснить что происходит, но времени разбираться уже нет, да и ПЛК не подвис :(

P.S. ПЛК по-прежнему в DMZ.

Rednaxel
30.11.2019, 10:56
Всем здравствуйте. Народ подскажите пожалуйста, ранее никогда подобного не делал.
45882

Это нормально, мы тут каждый день делаем то, чего раньше не ;)
Изучайте Руководства по Эксплуатации (https://owen.ru/uploads/143/re_trm200_1-ru-20298-1.9.pdf) приборов, изучите схемы (https://owen.ru/uploads/8/shema_podklyucheniya_trm200.png), скачайте и разберите примеры программ (https://owen.ru/forum/showthread.php?t=13588)...

Это ваш путь, за Вас его никто не пройдет ;-)
Когда появятся конкретные вопросы, что-то будет не получаться: спрашивайте, с удовольствием растолкуем. Лучше по одному вопросу/проблеме за раз. Удачи!

Pavel Snegirev
30.11.2019, 13:43
Спасибо) Вам огромное за столь содержательный ответ.

Rednaxel
30.11.2019, 15:40
Спасибо) Вам огромное за столь содержательный ответ.

Мой наставник, когда я просил его все показать и рассказать примерно так же отвечал: "Вот тебе РЭ, РП, схемы, вот есть пример похожий, садись разбирайся. Тогда я подумал: "Вот за@[*#$@... Тебе трудно растолковать?" Но пришлось разбираться самому.
И только теперь я понимаю: он оказал мне неоценимую услугу, научив самому находить ответы на самые заковыристые вопросы. Ну конечно, когда я во что-то совсем упирался, он подсказывал и направлял... Спасибо ему за это.

Обращайтесь ;)

Dmitro
30.11.2019, 16:40
Может нужно использовать подключение по Tcp/Ip level 2 Route чтобы из интернета подключиться к контроллеру?
Но там еще пункт "tagetID" (по умолчанию 0)...
Есть некое англоязычное описание ...
http://www.overdigit.com/data/Products/Software-Installation-and-Configuration_EN.pdf

Там в п.3.2 вроде бы (судя по картинке) нужно все 4 службы пробросить

FTP 21
HTTP (Web browser) 80
Telnet 23
CoDeSys 1200.

Но как-то явно не сказано.

Rednaxel
30.11.2019, 17:59
Может нужно использовать подключение по Tcp/Ip level 2 Route чтобы из интернета подключиться к контроллеру?
Но там еще пункт "tagetID" (по умолчанию 0)...
Не думаю что в этом дело. У меня же получилось подключиться. Один раз :)


Там в п.3.2 вроде бы (судя по картинке) нужно все 4 службы пробросить
FTP 21
HTTP (Web browser) 80
Telnet 23
CoDeSys 1200.
Это описание проброса портов для какого-то итальянского ПЛК с FTP и Web сервером на борту. Бывают такие, но не наш случай.
Еще раз: у нас нет проблемы проброса портов, тут все ясно, как и что. У нас тут глюк ОВЕН ПЛК при подключении к нему через проброшенный порт.
Какая у Вас модель ПЛК полностью и версия прошивки?

Irida
30.11.2019, 18:19
Здравствуйте!
Есть такая задача: у заказчика уже куплен набор оборудования: ПЛК110-32[M02], СП310, модуль ввода МВ110(RS485), шлюз ПМ210 и модем ПМ01. Надо реализовать схему работы на этом оборудовании, с управлением с панели оператора. Параметры читаются с DI и МВ, по авариям должны отправляться SMS ну и в OwenCloud отображаться кое-что. Для СП написана прошивка, где панель - мастер. Можно переписать, хотя и не хочется. Есть подозрение, что будет тупить.
Проблема в том, что у ПЛК 3 порта, кто-то лишний из оборудования. Какие варианты конфигурации возможны? Можно ли подключить на 1 порт ПЛК(мастер) МВ и ПМ слейвом по modbus ascii? Может кто-то решал подобную проблему?

Dmitro
30.11.2019, 23:21
Не думаю что в этом дело. У меня же получилось подключиться. Один раз :)


Это описание проброса портов для какого-то итальянского ПЛК с FTP и Web сервером на борту. Бывают такие, но не наш случай.
Еще раз: у нас нет проблемы проброса портов, тут все ясно, как и что. У нас тут глюк ОВЕН ПЛК при подключении к нему через проброшенный порт.
Какая у Вас модель ПЛК полностью и версия прошивки?

ПЛК110-30, в 2016 году уже стоял, видимо и куплен был не позднее, прошивку не знаю (да и как узнать?). Крайняя прошивка на них 2.16 датируется как раз 2016 годом.
Странно же. Соединяется по прямому кабелю, тоже самое, только "напел" роутер - и - ничего....
Ноутбук Dell с Win7x64 wi-fi, Win10x64 wi-fi...не работает.

Rednaxel
02.12.2019, 00:01
Здравствуйте!
Есть такая задача: у заказчика уже куплен набор оборудования: ПЛК110-32[M02], СП310, модуль ввода МВ110(RS485), шлюз ПМ210 и модем ПМ01. Надо реализовать схему работы на этом оборудовании, с управлением с панели оператора. Параметры читаются с DI и МВ, по авариям должны отправляться SMS ну и в OwenCloud отображаться кое-что. Для СП написана прошивка, где панель - мастер. Можно переписать, хотя и не хочется. Есть подозрение, что будет тупить.
Проблема в том, что у ПЛК 3 порта, кто-то лишний из оборудования. Какие варианты конфигурации возможны? Можно ли подключить на 1 порт ПЛК(мастер) МВ и ПМ слейвом по modbus ascii? Может кто-то решал подобную проблему?

Вроде выглядит все логично. Какие проблемы опрашивать два устройства на одном порту? Хоть 200, если нет особых требований к скорости.
Откуда сомнения? Зачем переписывать?

RV9WFJ
02.12.2019, 07:33
Здравствуйте!
Есть такая задача: у заказчика уже куплен набор оборудования: ПЛК110-32[M02], СП310, модуль ввода МВ110(RS485), шлюз ПМ210 и модем ПМ01. Надо реализовать схему работы на этом оборудовании, с управлением с панели оператора. Параметры читаются с DI и МВ, по авариям должны отправляться SMS ну и в OwenCloud отображаться кое-что. Для СП написана прошивка, где панель - мастер. Можно переписать, хотя и не хочется. Есть подозрение, что будет тупить.
Проблема в том, что у ПЛК 3 порта, кто-то лишний из оборудования. Какие варианты конфигурации возможны? Можно ли подключить на 1 порт ПЛК(мастер) МВ и ПМ слейвом по modbus ascii? Может кто-то решал подобную проблему?
А как ПМ связан с ModBus ASCII? По мне так портов не хватает для нормальной рабгты и без использования библиотек сложно это все будет заставить работать.

Rednaxel
02.12.2019, 08:59
А как ПМ связан с ModBus ASCII? По мне так портов не хватает для нормальной рабгты и без использования библиотек сложно это все будет заставить работать.

Не исключено что могут быть трудности для не очень продвинутого новичка.
Как вариант - модем на RS232.

Linker1989
02.12.2019, 09:21
Здравствуйте имеется ли у кого опыт работы со связкой IRZTG21 и плк 110?
Где почитать про это конфигурирование?

Linker1989
02.12.2019, 09:35
И еще вопрос как считать статусы измерения из модуля МВ210-101.
В инструкции написано что "При возникновении ошибки датчиков при обмене по протоколу ModBus код ошибки передается в
регистре значения."
Т.е Значение (integer) на входе 1 соответствует адресу — 4064.
И в кодесисе я его читаю как registr_input_module?
Верно?

Pavel Snegirev
02.12.2019, 11:36
Всем здравствуйте, народ взял в работу проект, ранее никогда с Овен не работал, взял в целях обучения, но есть свои сроки. В общем суть вопроса такова: есть объявленные конфигурационные переменные, каждая переменная соответствует NO контакту в программе, написанному на LAD. Каким образом можно привязать эти переменные к дискретным входам ПЛК. В руководстве ответов не нашел, видимо что-то недопонял. Заранее спасибо за ответ.
45901

Rednaxel
02.12.2019, 12:02
Всем здравствуйте, народ взял в работу проект, ранее никогда с Овен не работал, взял в целях обучения, но есть свои сроки. В общем суть вопроса такова: есть объявленные конфигурационные переменные, каждая переменная соответствует NO контакту в программе, написанному на LAD. Каким образом можно привязать эти переменные к дискретным входам ПЛК. В руководстве ответов не нашел, видимо что-то недопонял. Заранее спасибо за ответ.
45901

Все просто: перенесите эти переменные из области описания переменных PLC_PRG в конфигурацию ПЛК. Впишите их вместо надписи AT.
Только не дублируйте. При этом они станут глобальными, т.е. будут доступны во всем проекте, что тоже бывает удобно.

Совет: подумайте над сокращением имен переменных для удобства чтения и отладки.

Pavel Snegirev
02.12.2019, 12:12
Скажите пожалуйста, вписывать их в таком виде в место АТ: PLC_PRG.priv_lenty? (если честно не очень понял) Просто в конфигурации три программы, которые используют одинаковые названия. Если их сделать все глобальными, то будет конфликт, изначально проект написан только с использованием конфигурационных переменных. Ну или я что то не правильно понял.

Названия переменных выбирал не я, они уже были в проекте.

A.Simonov
02.12.2019, 12:25
Добрый день.

Проще всего начать знакомство с ПЛК с видео на YouTube (https://www.youtube.com/playlist?list=PL2EcVEe6E9SB4F3WVm-MptpHA5ep0nrq5).
2-ое и 3-е видео - пример по привязке компонентов программы к входам/выходам.

Pavel Snegirev
02.12.2019, 12:26
Скажите, а я могу их прикрутить в таком виде:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR

Pavel Snegirev
02.12.2019, 12:30
Здравствуйте, я смотрел эти видео. Мой вопрос немного в другом, у меня готовый проект, без привязки к входам. В проекте используются конфигурационные переменные, которые никак , как в видео изначально, не прописаны к входам. Данные переменные нельзя делать глобальными, так как в подпрограммах конфигурации используются одноименные названия. Как привязать глобальные переменные к входам я понимаю, но как привязать конфигурационные, не делая их глобальными, я не понял, единственный вариант который я нашел

Скажите, а я могу их прикрутить в таком виде:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR

подойдет ли он?

Sulfur
02.12.2019, 12:34
Pavel Snegirev
Сделайте две дополнительные POU, одна для входных переменных, другая для выходных.
Например TranslateIN и TranslateOUT. В конфигурации ПЛК пропишите физические входа\выхода да хоть так, как они и называются у ПЛК.
45905

Далее.
TranslateIN
<Ваша входная переменная1>:=FDI1;
<Ваша входная переменная2>:=FDI2;
.
.
<Ваша входная переменная_N>:=DI_N;
-----
TranslateOUT
FDO1:=<Ваша вЫходная переменная1>;
.
.
DO_N:=<Ваша вЫходная переменная_N>
------
PLC_PRG

TranslateIN ();
<Ваш код>;
TranslateOUT ();
---


Скажите, а я могу их прикрутить в таком виде:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR
Можно. Но с таким методом запутаться можно легко. Пройденный этап.

Pavel Snegirev
02.12.2019, 12:42
Спасибо большое

A.Simonov
02.12.2019, 12:44
Здравствуйте, я смотрел эти видео. Мой вопрос немного в другом, у меня готовый проект, без привязки к входам. В проекте используются конфигурационные переменные, которые никак , как в видео изначально, не прописаны к входам. Данные переменные нельзя делать глобальными, так как в подпрограммах конфигурации используются одноименные названия. Как привязать глобальные переменные к входам я понимаю, но как привязать конфигурационные, не делая их глобальными, я не понял, единственный вариант который я нашел

Скажите, а я могу их прикрутить в таком виде:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR

подойдет ли он?

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

Pavel Snegirev
02.12.2019, 12:50
спасибо Вам.

Pavel Snegirev
02.12.2019, 12:52
Скажите еще пожалуйста, а при такой вариации:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR

в конфигурации ПЛК нужно что-то прописывать? Хочу для себя разобраться ну и добавить это в копилку нестандартных решений.
45906

Rednaxel
02.12.2019, 12:56
Скажите еще пожалуйста, а при такой вариации:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VAR

в конфигурации ПЛК нужно что-то прописывать? Хочу для себя разобраться ну и добавить это в копилку нестандартных решений.
45906

Неть, Вы должны выбрать что-то одно: или через AT% прописывать, или в конфигурации.

capzap
02.12.2019, 13:06
при такой вариации:

VAR_CONFIG

PLC_PRG. Hugo.loci AT%IX1.0.0 : BOOL;
END_VARпонимаете Вы программист, если Ваш код после многократных и разнообразных проверок будет работать как надо, без ошибок, то его можно оставлять. Но существует одно из правил (https://ru.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself). Представте ситуацию что в разных ПОУ придется считывать один и тот же кaнaл , Вам придется писать этоу строку столько раз сколько нужно будет объявлять, именование в конфигурации делается один раз на весь проект, поэтому не то чтобы это нестандартное решение, а скорее альтернативно-одаренное

Pavel Snegirev
02.12.2019, 13:13
Понял вас, спасибо.

MantisB
02.12.2019, 19:46
Здравствуйте вопрос такой язык используется ST необходимо считать значение с панели тип int и преобразовать его в time причем в секунды . Преобразование типа Int_to_time не работает язык cfc нет желания использовать так как стоит задача именно на ST . На CFC все написал и там работает а на ST конструкция input:=int_to_time(timer); выдает ошибку можно поподробнее рассказать про явное и неявное преобразование типов т.к в в справке по codesys 2.3 написано всего 3 конструкции и что получается в итоге а принцип что требуется ,необходима ли еще переменная для преобразования не сказано прошу прощения за тупой вопрос но синтаксис конструкций не очень ясен .

Sulfur
03.12.2019, 08:20
MantisB
Преобразования xxx_TO_TIME дают результат в миллисекундах.

Irida
03.12.2019, 09:27
Здравствуйте вопрос такой язык используется ST необходимо считать значение с панели тип int и преобразовать его в time причем в секунды . Преобразование типа Int_to_time не работает язык cfc нет желания использовать так как стоит задача именно на ST . На CFC все написал и там работает а на ST конструкция input:=int_to_time(timer); выдает ошибку можно поподробнее рассказать про явное и неявное преобразование типов т.к в в справке по codesys 2.3 написано всего 3 конструкции и что получается в итоге а принцип что требуется ,необходима ли еще переменная для преобразования не сказано прошу прощения за тупой вопрос но синтаксис конструкций не очень ясен .
Долго мучилась с преобразованиями типов, подбешивает зоопарк представлений времени и недостаток функций конвертации.
Выкрутилась так: делаю преобразование:
ttDword := TIME_TO_DWORD(ttTime)/1000; (*без потери разрядности, "/1000" - перевод в секунды*)
ttint := DWORD_TO_INT(ttdw);

Обратно проще:
ttTime := WORD_TO_TIME(ttint*1000);

Pavel Snegirev
03.12.2019, 10:40
Всем здравствуйте, снова я с глупым вопросом. Подскажите пожалуйста, что я не так делаю. Контроллер ОВЕН 110-30 К-Л, не могу понять почему не работает дискретный выход. При подключении к ПЛК нажимаю кнопку, в конфигурации ПЛК, в дискретных выходах появляется синий флажок, на контроллере загорается светодиод, что выход работает, по факту напряжения никакого на нем нет. Подключал по схеме. Выхода обычные, не быстрые. Нужно ли каким-то образом подводить к ним какое нибудь питание, как в работе с быстрыми дискретными выходами? Подключал все по схеме.
4592645927

capzap
03.12.2019, 10:45
...Нужно ли каким-то образом подводить к ним какое нибудь питание...
45927

на схеме же есть питание, которое нужно подводить

Pavel Snegirev
03.12.2019, 10:47
Я это понимаю, но по факту на нем нет ничего. Если судить по той схеме что то должно быть, а по факту нет ничего.Просто может я что то не понимаю, просто ранее никогда не работал с ПЛК, можно сказать прохожу процесс обучения.

Sulfur
03.12.2019, 11:03
На клемму +U1 нужно подать +24V. Это питание выходных каскадов быстрых выходов FDO1..FDO4. Без этого напряжения индикаторы выходов будут светиться, а сами выхода работать не будут.

A.Simonov
03.12.2019, 11:04
Я это понимаю, но по факту на нем нет ничего. Если судить по той схеме что то должно быть, а по факту нет ничего.Просто может я что то не понимаю, просто ранее никогда не работал с ПЛК, можно сказать прохожу процесс обучения.

Добрый день.

Если вы видите, что светодиод выхода активен, то возможно только четыре варианта.

1) Вы не подали напряжение, на выход
Проверьте еще раз, что минус источника напряжения на клемме COM, а плюс - на нагрузке, выход ПЛК так же должен быть на нагрузке, для создания замкнутого контура протекания тока.

2) Выход не исправен.
Уберите всю нагрузку, и прозвоните выход мультиметром, когда светодиод светится - он должен звониться.

3) Вы перепутали клеммы.
Внимательно проверьте к каким клеммам все подключено.

4) Если речь о быстрых выходах (маркируются как FDO), то возможно не подано питание на быстрые выходы, в РЭ есть схема
45928

Pavel Snegirev
03.12.2019, 11:07
Скажите пожалуйста, питание быстрых выходных каскадов распространяется на не быстрые дискретные выхода?

Pavel Snegirev
03.12.2019, 11:08
Спасибо Всем Огромное!!!

Sulfur
03.12.2019, 11:13
Скажите пожалуйста, питание быстрых выходных каскадов распространяется на не быстрые дискретные выхода?
Нет. Остальные выхода DO5..DOxx работают без внешнего питания по логике "открытый коллектор". Т. е. при срабатывании выход "замыкается" на СОМ соответствующей группы.

Irida
03.12.2019, 11:17
Здравствуйте!
Есть такая задача: у заказчика уже куплен набор оборудования: ПЛК110-32[M02], СП310, модуль ввода МВ110(RS485), шлюз ПМ210 и модем ПМ01. Надо реализовать схему работы на этом оборудовании, с управлением с панели оператора. Параметры читаются с DI и МВ, по авариям должны отправляться SMS ну и в OwenCloud отображаться кое-что. Для СП написана прошивка, где панель - мастер. Можно переписать, хотя и не хочется. Есть подозрение, что будет тупить.
Проблема в том, что у ПЛК 3 порта, кто-то лишний из оборудования. Какие варианты конфигурации возможны? Можно ли подключить на 1 порт ПЛК(мастер) МВ и ПМ слейвом по modbus ascii? Может кто-то решал подобную проблему?

Сама спросила, сама ответила))).

Если кому-то интересно - проблема решаема, хоть и на троечку. Подключила на RS485 порт шлюз и модем, заработало. Модем отправляет смс только по авариям (эпизодически), блокирует порт на некоторое время, но облачный сервис в моем случае в основном "шоб було", поэтому если какое-то значение не прочитает, т.к. порт занят - ну и фиг с ним. Для МВ обошлись покупкой преобразователя интерфейсов RS232-RS485.
То есть схема получилась следющая: ПЛК RS232-Debug (slave) - СП310 (Master), ПЛК RS232(Master) - конвертер - МВ(slave), ПЛК RS485(UNM) - модем + RS485(slave) шлюз. Настройки RS485 стандартные (поднялось на 115200, RTU), только для обоих устройств одинаковые, чтобы не было конфликта в мозгах плк на физическом уровне.

Pavel Snegirev
03.12.2019, 14:18
И снова здравствуйте:)
Народ, подскажите пожалуйста. Вывожу температуру с ТРМ 200 по RS485, все бы хорошо но выводиться она в виде 29,0783, примерно как то так. Как округлить показания до целых чисел. Заранее спасибо.

Sulfur
03.12.2019, 14:31
Читаем про TRUNC

Pavel Snegirev
03.12.2019, 14:38
Ок, спасибо. Скажите а где писать код. Переменная задовалась в конфигураторе ПЛК. В списке глобальных переменных ее нет, как вызвать место, где она объявлена?

capzap
03.12.2019, 14:43
Ок, спасибо. Скажите а где писать код. Переменная задовалась в конфигураторе ПЛК. В списке глобальных переменных ее нет, как вызвать место, где она объявлена?

переведите плк в режим онлайн и снова загляните в глобальные переменные

Pavel Snegirev
03.12.2019, 14:44
спасибо вам

Pavel Snegirev
03.12.2019, 15:10
Вы не могли бы конкретным примером расписать округление, не получается у меня. Выдается ошибка. Сама программа написана на LD, заранее спасибо Вам за помощь.

capzap
03.12.2019, 15:15
элемент с EN и далее на ваыбор
REAL_TO_INT(value) или TRUNC(value)

Pavel Snegirev
03.12.2019, 15:38
спасибо вам

MantisB
04.12.2019, 00:06
Здравствуйте новый вопрос как в окне конфигурирование элемента (объекта визуализации ) присвоить ему номер бита в переменной типа BYTE как именно пишется пока что я использую такое PLC_PRG.lamp(2#0001) . просто в справке по этому поводу ничего не сказано а делать отдельный массив из лампочек с переменыйми типа Int нет особого желания так как вроде есть обращение к каждому биту . И если можно есть ли какие ни будь задачники по codesys и автоматизации в целом буду благодарен .

MantisB
04.12.2019, 00:42
Спасибо большое просто с++ не очень получается переползать.CFC ближе язык после мк.

Pavel Snegirev
05.12.2019, 12:08
Здравствуйте, скажите пожалуйста. Как добраться до переменных. Данные переменные задавал в конфигураторе ПЛК. В таблице глобальных переменных их нет, а в ассистенте ввода они есть.
4599645997

capzap
05.12.2019, 12:17
Здравствуйте, скажите пожалуйста. Как добраться до переменных. Данные переменные задавал в конфигураторе ПЛК. В таблице глобальных переменных их нет, а в ассистенте ввода они есть.
4599645997

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

Rednaxel
05.12.2019, 12:22
Здравствуйте, скажите пожалуйста. Как добраться до переменных. Данные переменные задавал в конфигураторе ПЛК. В таблице глобальных переменных их нет, а в ассистенте ввода они есть.
4599645997

Вот в конфигураторе и добраться. Они у вас тоже глобальные, но в таблицу глобальных переменных вы можете поместить другие переменные, не связанные со входами/выходами ПЛК, но которые тоже хотите сделать доступными во всех модулях проекта.
Согласен, не очень удобно получается, но плюсы задания переменных в конфигурации ПЛК перевешивают этот минус.

Rednaxel
05.12.2019, 12:25
интересно, Вам там по рукам линейкой бьют, если чуть в сторону мышку наведете, неужели три дня мучаетесь как это сделать

Что-то я не понял: думаете Павел не может найти то место, где он сам задавал эти переменные? ;-)

capzap
05.12.2019, 12:37
Что-то я не понял: думаете Павел не может найти то место, где он сам задавал эти переменные? ;-)

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

Pavel Snegirev
05.12.2019, 12:45
Я имею ввиду таблицу где бы я мог проводить манипуляции с этими переменными, а по сути этого нет. Очень неудобный интерфейс, если не разу не работал. CodeSys после Portala просто ад. Хотя по сути это дело привычки наверное.

Pavel Snegirev
05.12.2019, 12:45
Спасибо народ что терпите мои глупые вопросы))

Pavel Snegirev
05.12.2019, 12:56
спасибо вам

Rednaxel
05.12.2019, 13:00
Я имею ввиду таблицу где бы я мог проводить манипуляции с этими переменными, а по сути этого нет. Очень неудобный интерфейс, если не разу не работал. CodeSys после Portala просто ад. Хотя по сути это дело привычки наверное.

Дело привычки. Я, например для более-менее больших проектов веду отдельно реестр переменных, вместе со списком задач. Помогает при отладке а также при составлении руководства для Заказчика.


Спасибо народ что терпите мои глупые вопросы))
Это поднимает нашу самооценку :cool:

Pavel Snegirev
05.12.2019, 13:13
Мне такая мысль тоже в голову пришла. Очень хорошая и нужная вещь.

kondor3000
06.12.2019, 17:37
Добрый день всем. Есть в программе панели СП310Р

Перенёс https://owen.ru/forum/showthread.php?t=22915&page=160

Rednaxel
07.12.2019, 09:31
Добрый день всем. Есть в программе панели СП310Р....
Совсем не похоже на вопрос новичка ;)
Думаю с этим лучше сюда (https://owen.ru/forum/showthread.php?t=22915&page=160).

kondor3000
11.12.2019, 17:55
Совсем не похоже на вопрос новичка ;)
Думаю с этим лучше сюда (https://owen.ru/forum/showthread.php?t=22915&page=160).

Оказалось очень похоже на новичка, но помогли разобраться).

Pavel Snegirev
12.12.2019, 08:40
Здравствуйте. Подскажите новичку пожалуйста. Есть ли в Codesys 2.3 возможность быстрого старта при подключение к ПЛК и вывод только одной визуализации для работы оператору, то есть пропустить действия такие как открыть Codesys, потом перейти во вкладку онлайн, потом подключение и старт. Может быть можно сделать быстрый старт и вывод только одной визуализации. Заранее спасибо за ответ.

Pavel Snegirev
12.12.2019, 09:13
Спасибо огромное

Rednaxel
12.12.2019, 09:16
Здравствуйте. Подскажите новичку пожалуйста. Есть ли в Codesys 2.3 возможность быстрого старта при подключение к ПЛК и вывод только одной визуализации для работы оператору, то есть пропустить действия такие как открыть Codesys, потом перейти во вкладку онлайн, потом подключение и старт. Может быть можно сделать быстрый старт и вывод только одной визуализации. Заранее спасибо за ответ.

Я так понимаю, Вы ищете панель визуализации и управления для ПК под Windows, причем бесплатно, правильно?

Pavel Snegirev
12.12.2019, 09:27
:) немного не так, я хочу запускать отдельно окно визуализации при старте проекта в Codesys на ПК. ПК локальный и напрямую, через Ethernet подключен к контроллеру. Визуализация конфигурации происходит в стандартном окне визуализации CodeSys. Я знаю про возможности Codesys HMI, но это не устраивает моего работодателя, имею ввиду условия. Я хотел бы найти способ каким либо образом, может командой из командной строки или еще каким, запускать codesys таким образом, чтобы при запуске она сразу подключалась к ПЛК без лишних действий и выводила на экран мнемосхему визуализации. Ну как то так в общем.

Rednaxel
12.12.2019, 09:48
:) немного не так, я хочу запускать отдельно окно визуализации при старте проекта в Codesys на ПК. ПК локальный и напрямую, через Ethernet подключен к контроллеру. Визуализация конфигурации происходит в стандартном окне визуализации CodeSys. Я знаю про возможности Codesys HMI, но это не устраивает моего работодателя, имею ввиду условия. Я хотел бы найти способ каким либо образом, может командой из командной строки или еще каким, запускать codesys таким образом, чтобы при запуске она сразу подключалась к ПЛК без лишних действий и выводила на экран мнемосхему визуализации. Ну как то так в общем.

Так для для этого и создан CoDeSysHMI. Типа:
CoDeSysHMI.exe" /simulation "C:\MyProject.pro"
Возможно понадобятся еще какие-то опции, почитайте документацию.
Ну да, опять же не бесплатно, а что Вы хотели? Если найдете бесплатный вариант, поделитесь: все такой хотят ;)

Pavel Snegirev
12.12.2019, 16:27
Спасибо Вам

Pavel Snegirev
13.12.2019, 15:13
Всем здравствуйте, народ наверно не в этой теме, но хочу спросить. Смотрите есть шкаф управления в нем стоит 5 ТРМ 200, я их благополучно подключил к контроллеру (RS485), который находиться в этом же шкафу обычным монтажным проводом 0.5 квадрата. Скажите пожалуйста, будет ли это дело нормально работать или нужен какой нить спец провод по типу профибасного. Заранее спасибо вам за ответ.

Pavel Snegirev
13.12.2019, 15:46
Ответили в другой теме. Извиняюсь за беспокойство. Но если не сложно я хотел бы услышать ваше мнение по поводу вопроса.

Sulfur
13.12.2019, 19:56
Pavel Snegirev
Зависит от наполнения шкафа источниками радиочастотных помех. Таковыми являются в основном частотные преобразователи (ПЧ), импульсные блоки питания и реле\контакторы, особенно если работают на индуктивную нагрузку. У меня а практике были проблемы со связью, а спецкабель достать было проблематично. Для решения проблемы использовал кабель КММ (микрофонный), менял прокладку кабелей от ПЧ и предпринимал действия по подавлению обратной ЭДС от индуктивной нагрузки. Помогло.

kondor3000
13.12.2019, 19:57
Всем здравствуйте, народ наверно не в этой теме, но хочу спросить. Смотрите есть шкаф управления в нем стоит 5 ТРМ 200, я их благополучно подключил к контроллеру (RS485), который находиться в этом же шкафу обычным монтажным проводом 0.5 квадрата. Скажите пожалуйста, будет ли это дело нормально работать или нужен какой нить спец провод по типу профибасного. Заранее спасибо вам за ответ.
У меня в заземлённом шкафу соединения RS485 тоже обычным проводом, всё работает. На больших расстояниях, применяю уже витую пару с экраном.

RV9WFJ
14.12.2019, 09:59
Обычный кабель обычно закручиваем и все. Между шкафами и там где ПЧ уже ТехноКИП 485 или что'-то похожее. Главное чтобы скрутка была для 485.

zendo057
15.12.2019, 12:42
Во вкладке онлайн есть загрузка исходных текстов,записать в плк,читать из плк.Вообще для какой цели служит каждая строка.
Почему вопрос.В одном месте прочел что если записать\читать то это будет скомпилированный код и поэтому нужно через загрузку исходных текстов.В другом(в видеоуроке) через записать\читать и все раскроется.как так

Rednaxel
15.12.2019, 15:27
Во вкладке онлайн есть загрузка исходных текстов,записать в плк,читать из плк.Вообще для какой цели служит каждая строка.
Почему вопрос.В одном месте прочел что если записать\читать то это будет скомпилированный код и поэтому нужно через загрузку исходных текстов.В другом(в видеоуроке) через записать\читать и все раскроется.как так

Давайте разберемся:
46187
Когда вы подключаетесь к ПЛК Ваша программа компилируется и загружается в его оперативную память. Но если отключить питание, все изменения пропадут. Чтобы актуальный проект загрузился при включении, нужно выполнить команду "Онлайн / Создание загрузочного проекта". Обратите внимание, что в ПЛК сохраняется бинарный код проекта, редактировать его нельзя.

Теперь, когда Вы передаете ПЛК Заказчику, возможно Вы захотите чтобы его специалисты смогли сами подправить что-нибудь в программе и не тревожили Вас по пустякам ;) Выполните команду "Онлайн / Загрузка исходных текстов". После этого можно будет прочесть проект по команде "Файл / Открыть -- кнопка ПЛК".

Команды "Онлайн / 'Записать файл в ПЛК" и "Онлайн / 'Читать файл из ПЛК" Используются для записи и чтения любых файлов в/из контроллера. Обновление прошивки, например.

Sulfur
15.12.2019, 15:38
Для нормальной работы ПЛК загружать в него исходный текст нет необходимости. Достаточно только скомпилированного кода. Если в ПЛК загружен исходник, то его можно считать, изменить и записать обратно. Если исходника нет, то не имея исходников на компьютере ни считать, ни изменить не получится.

zendo057
15.12.2019, 16:57
Rednaxel Я так понял что если выполнить загрузка исходных текстов,то в память загрузится проект,а если записать в плк то запишется файл хоть с программой хоть с музыкой,можно также и библиотеки,короче как флешка,так?

Rednaxel
15.12.2019, 18:49
Rednaxel Я так понял что если выполнить загрузка исходных текстов,то в память загрузится проект...
Все верно, Sulfur еще подробнее расписал.


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

Pavel Snegirev
16.12.2019, 14:26
Все здравствуйте, народ подскажите пожалуйста. Почему каждый раз при подключении к ПЛК или симуляции постоянно слетает цвет фона таблицы в CodeSys, в визуализации? То есть выставлю фон, сохранюсь, закрою проект. Когда запускаю проект после закрытия фон не сохраняется и становиться желтым.46202

Pavel Snegirev
20.12.2019, 11:21
Здравствуйте. Скажите пожалуйста: каким образовать по клику на кнопку можно реализовать смену мнемосхемы визуализации в Codesys. По типу нажимаю кнопку "Печь№1" и у меня открывается визуализация Pech146295

petera
20.12.2019, 11:39
Здравствуйте. Скажите пожалуйста: каким образовать по клику на кнопку можно реализовать смену мнемосхемы визуализации в Codesys. По типу нажимаю кнопку "Печь№1" и у меня открывается визуализация Pech146295

Создать визуализацию -управляющая панель. На управляющей панели разместить "много кнопочек, которые переходят к другим визуализациям" и другие постоянные элементы. А на других визуализациях разместить элементы "...с необходимой информацией", можно в рамке.
После этого при нажатии на кнопочку перехода на другую визуализацию на экране, а фактически на управляющей панели появится та, перемнная часть, которая будет имитировать открывщееся окно, поверх основного экрана. Для управляющей панели нужно включить галку "На заднем плане". https://owen.ru/forum/showthread.php?t=15470&p=115650&viewfull=1#post115650

Pavel Snegirev
20.12.2019, 11:48
Спасибо Вам за ответ, подскажите пожалуйста еще. Я пишу конфигурацию для диспетчеризации печей. У меня возник вопрос с точки зрения архитектуры. Смотрите как это лучше оформить. Писать программу для каждой печи, как я сейчас делаю. Правильно ли будет это? И по вопросу выполнения. Они все одновременно будут исполняться?46296 Простите за глупый вопрос, просто до конца не понимаю. Только учусь.

kondor3000
20.12.2019, 20:13
Спасибо Вам за ответ, подскажите пожалуйста еще. Я пишу конфигурацию для диспетчеризации печей. У меня возник вопрос с точки зрения архитектуры. Смотрите как это лучше оформить. Писать программу для каждой печи, как я сейчас делаю. Правильно ли будет это? И по вопросу выполнения. Они все одновременно будут исполняться?46296 Простите за глупый вопрос, просто до конца не понимаю. Только учусь.

1) Так не будет работать, должен быть один PRG, а остальные вызываемыми FB ( функциональными блоками), функциями, подпрограммами.
2) Пишите один ФБ, называете его Pech1, второй Pech2 и т. д., а в PRG выбираете элемент, вставляете его и называете его Pech1, Pech2, таким образом основная программа будет по очереди обращаться ко всем ФБ. Если в блоках есть входы и выходы их надо прописать как входы и выходы ( в примере это видно). Тогда при вставке имени элемента все входы и выходы тоже появятся у элемента по порядку их в PRG тоже по порядку надо вставить.
3) Основная программа всегда работает по бесконечному циклу, пройдя все подпрограммы, она вернётся к началу и пойдёт выполнять снова.

Получиться как то так 46303 а в итоге так 46304

Пример написан на языке CFC, а ФБ на ST и CFC

Sulfur
21.12.2019, 16:06
Pavel Snegirev
Писать отдельные POU для ваших девайсов имеет смысл только если алгоритмы разные. Если алгоритмы одинаковые, то пишется один FB, а в PLC_PRG он вызывается нужное количество раз, но с разными именами и входными\выходными переменными.

Andy86-j
21.12.2019, 20:11
Подтверждаю: есть такое ограничение. При чем судя по всему никто из нас здесь с ним не сталкивался.
И о чем это говорит по-вашему?

Я считаю что как раз сказалось отсутствие системного подхода + чересчур длинные имена переменных съели все место.

Да в конце концов, если поджимает время, выделить эту часть простым копированием в отдельный блок на том же CFC.

Ну а если возможности все это переделывать сейчас нет, остается только компактнее все упаковывать, переменные подсократить может быть.
Как то так. Надеюсь помог :)

Также подтверждаю, ограничение по размеру холста есть, я на него натыкался самолично. Расстраиваться по этому поводу бессмысленно, ждать, что что-то изменится - тем более бессмысленно, поэтому нужно "понять и простить". И двигаться дальше, например, разбив всю программу на несколько фрагментов, каждый из которых создать в виде собственного POU, или... в общем вариантов много.
Пусть и запоздалое очень, но спасибо. Написал каждую часть техпроцесса как ФБ. Проверять работоспособность, действительно, легче. Установка уже работает в полурабочем/полутестовом режиме.

Pavel Snegirev
23.12.2019, 09:00
Всем здравствуйте, народ подскажите пожалуйста, сам чет не нашел. Каким образом в CodeSys 2.3 можно вывести текущее время?46333 Заранее спасибо

Я Разобрался))) Извините за беспокойство

turkish945
26.12.2019, 10:38
Всем добра!

Задача - умный дом:
1. Управление котельной, освещением, климатом, сигнализацией и тд - короче дискретные и аналоговые входы/выходы.
2. WEB, если есть встроенная возможность легко и быстро делать web-визуализацию это плюс, но важнее иметь возможность нормального (насколько это возможно на ПЛК) web-программирования, хочу интегрироваться с умным домом от яндекса, поэтому надо написать web-приложение, которое будет поддерживать oauth 2.0 и сможет принимать и обрабатывать post-запросы.
3. Не люблю "интерфейсное программирование", люблю чтобы код был кодом, а не кучей настроек/связей в интерфейсах.

Подскажите, какой лучше выбрать ПЛК/среду под мои требования? 110 с masterscada, 110 с codesys 2.3, или новинку 210 с codesys 3.5?

PS: И да, немаловажный момент - наличие различных библиотек и глючность.

Rednaxel
26.12.2019, 12:29
Всем добра!

Задача - умный дом:
1. Управление котельной, освещением, климатом, сигнализацией и тд - короче дискретные и аналоговые входы/выходы.
2. WEB, если есть встроенная возможность легко и быстро делать web-визуализацию это плюс, но важнее иметь возможность нормального (насколько это возможно на ПЛК) web-программирования, хочу интегрироваться с умным домом от яндекса, поэтому надо написать web-приложение, которое будет поддерживать oauth 2.0 и сможет принимать и обрабатывать post-запросы.
3. Не люблю "интерфейсное программирование", люблю чтобы код был кодом, а не кучей настроек/связей в интерфейсах.

Подскажите, какой лучше выбрать ПЛК/среду под мои требования? 110 с masterscada, 110 с codesys 2.3, или новинку 210 с codesys 3.5?

PS: И да, немаловажный момент - наличие различных библиотек и глючность.

Как раз WEB сервер на ПЛК ОВЕН, насколько я знаю, все еще остается малоиспользуемой/малопроработанной фичей. :) Короче, я бы особо на него не рассчитывал.

Да и стоит ли пытаться объять необъятное, впихнуть невпихуемое? Думаю, чтобы подружить ПЛК с Алисой/Яндексом Вам понадобится посредник типа OpenHAB / Iridium и т.п. к тому же, полагаю Вам ведь не только визуализация, еще и управление на экране нужно? Голосом не очень-то удобно настраивать. На каком девайсе будет это все?

Темой УД занимаюсь не первый день, может что и посоветую, но не думаю что стоит ее здесь обсуждать. Давайте лучше в привет, или отдельную ветку создайте что-ли?

turkish945
26.12.2019, 13:59
Да и стоит ли пытаться объять необъятное, впихнуть невпихуемое? Думаю, чтобы подружить ПЛК с Алисой/Яндексом Вам понадобится посредник типа OpenHAB / Iridium и т.п.
Когда-то давно достаточно плотно работал с электроникой на базе ATMEGA и ST32 и даже на них нет проблемы с web-сервером. Не понимаю, почему на ОВЕНе это должно вызывать сложности....
К тому же, насколько я понял при беглом изучении темы, в ПЛК110 который с мастерскадой уже есть встроенная web-визуализация. Также, судя по инфе на сайте, у ПЛК 210 есть встроенный web-сервер.
На самом деле это может быть звучит громко "связать Алису и ПЛК", а по факту это абсолютно нересурсоемкая задача.



полагаю Вам ведь не только визуализация, еще и управление на экране нужно? Голосом не очень-то удобно настраивать. На каком девайсе будет это все?

Разумеется будет web-морда, да и не всем функционалом требуется управлять голосом. Я так понял на ПЛК это делается (как минимум со скадой), также есть, например, СПК, которые это поддерживают, значит сложностей не должно быть.
Весь web: и морду, и работу с Алисой планирую на одном устройстве. Точнее так, мне требуется 3 контроллера, т.к. есть физическое разделение,поэтому, если вдруг окажется, что на все задачи ресурсов одного ПЛК не достаточно, то морду можно отделить от Алисы. Но я уверен, что этого не потребуется.



Давайте лучше в привет, или отдельную ветку создайте что-ли?

напишу в личку.

Pavel Snegirev
26.12.2019, 14:10
Всем здравствуте. Народ подскажите пожалуйста. Продолжаю изучать codesys 2.3. Такой вопрос, нарисовал прямоугольник. Каким образом можно реализовать на языке ST изменение цвета заливки этого прямоугольника в зависимости от изменения значений целочисленной переменной. Понимаю что нужно использовать IF, но не понимаю как менять цвет прямоугольника, планируется 4 цвета заливки прямоугольника.

Rednaxel
26.12.2019, 21:34
... На самом деле это может быть звучит громко "связать Алису и ПЛК", а по факту это абсолютно нересурсоемкая задача.
....
Дело не в ресурсах. Алиса работает с любыми устройствами УД не напрямую, а через облачный сервис этих устройств.
Т.е. для каждого конкретного поддерживаемого устройства Яндекс совместно с разработчиками данного устройства должен эту связь создать, разработать, понимаете? Самостоятельно, не будучи разработчиком облачного сервиса ОВЕН, Вы этого не сделаете. Никак.

turkish945
27.12.2019, 10:04
Дело не в ресурсах. Алиса работает с любыми устройствами УД не напрямую, а через облачный сервис этих устройств.
Т.е. для каждого конкретного поддерживаемого устройства Яндекс совместно с разработчиками данного устройства должен эту связь создать, разработать, понимаете? Самостоятельно, не будучи разработчиком облачного сервиса ОВЕН, Вы этого не сделаете. Никак.
Конечно, это можно сделать через облачный сервис ОВЕН, чтоб он был промежуточным звеном между Алисой и моими устройствами, но я об этом даже и не мечтаю :)
Я имею в виду более простой вариант - для работы с Алисой нужен любой веб-сервер, в том числе свой, в том числе хоть на ПЛК, главное, чтобы на нем крутилось приложение, поддерживающее oauth и умеющее отдавать определенную инфу на определенные запросы в определенном формате.

Rednaxel
27.12.2019, 21:01
.... любой веб-сервер, в том числе свой, в том числе хоть на ПЛК, главное, чтобы на нем крутилось приложение, поддерживающее oauth и умеющее отдавать определенную инфу на определенные запросы в определенном формате.
Хорошо, допустим в этом есть рациональное зерно, допустим найдется ПЛК, который кроме своих основных функций все это будет поддерживать.
Вполне может быть, что найдется немало людей, которым будет полезно такое приложение...

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

capzap
27.12.2019, 21:16
Вы беретесь написать и отладить его? Да шут с ним, с облаком, хотя бы просто MQTT, например реализовать на ПЛК можете? Уже одно это может пойти в серию.

о чем Вы, он считает что здесь каждый десятый Игорь сысоев

Написать можно все, но хочется кататься на велосипеде, который кто-то другой уже собрал и испытал, попутно набив все шишки :)/

Pavel Snegirev
30.12.2019, 11:55
Спасибо вам))

bovlnsk
06.01.2020, 13:21
Всем привет. Только начал изучать CoDeSys. Делаю автоматизацию для своей квартиры на базе ПЛК160. задача стоит в том чтобы сделать работу кнопки (которая включает и диммирует свет в зале) следующем образом:
1 0дно нажатие - включить свет 1 / выключить свет 1
2 Два нажатия - включить свет 2 / выключить свет 2
3 Три нажатия - выключить свет 1 и 2
4 Долгое нажатие диммирование свет 1
Как то так. нашёл на форуме более менее похожую задачу, но там программа на языке ST, для меня это пока дремучий лес. Пока только в CFC вникаю. Подскажите пожалуйста какими ФБ это сделать? Сделал только диммер, на что ушло 2 дня:)
46558

Rednaxel
06.01.2020, 16:39
Всем привет. Только начал изучать CoDeSys. Делаю автоматизацию для своей квартиры на базе ПЛК160. задача стоит в том чтобы сделать работу кнопки (которая включает и диммирует свет в зале) следующем образом:
46558

Думаю нужны F_Trig -- лучше отпускание кнопки отлавливать, чтобы отличить двойное нажатие от длинного, TON для задания интервалов, счетчик CTU для подсчета нажатий и XOR для переключения. Оформить лучше отдельным ФБ -- на входе будет сигнал от кнопки и 2 интервала времени, на выходе -- BOOL на реле и WORD уровень. Как-то так. Делайте на CFC если в ST пока не получается.

Набросайте хоть что-то, и кидайте сюда, если не получается -- будем советовать и критиковать :)
Бесплатно все сделать за Вас как-то не есть помощь новичку ;)

IMHO впихнуть все в одну кнопку идея гиблая, не приживается такое. У каждого человека свой двойной-тройной клик, не да и ПЛК в зависимости от нагрузки может по разному обработать ваши нажатия. В практике УД обычно делают 2 функции на кнопку вкл/выкл + длинное нажатие.

Анатолий7591
09.01.2020, 13:44
Доброго времени суток всем.
Впервые на этом форуме из-за небольшого вопроса.

Есть программируемое реле ПР-200 с интерфейсной платой ПР-ИП485.
Вопрос такой: в характеристиках платы написано, что она поддерживает 16 устройств.
1. Это программное ограничение по разрядности регистра, или же по нагрузочной способности интерфейсной платы?
2. Если я подключу к интерфейсной плате повторитель RS-485 типа АС5, смогу ли я управлять дополнительно к 16 ещё 32 устройствами, как написано в его характеристике?

Управлять нужно простым реле (включил - выключил) типа RS-30 до 100 штук.

Заранее спасибо за вероятный ответ.

kondor3000
10.01.2020, 00:46
Доброго времени суток всем.
Впервые на этом форуме из-за небольшого вопроса.

Есть программируемое реле ПР-200 с интерфейсной платой ПР-ИП485.
Вопрос такой: в характеристиках платы написано, что она поддерживает 16 устройств.
1. Это программное ограничение по разрядности регистра, или же по нагрузочной способности интерфейсной платы?
2. Если я подключу к интерфейсной плате повторитель RS-485 типа АС5, смогу ли я управлять дополнительно к 16 ещё 32 устройствами, как написано в его характеристике?

Управлять нужно простым реле (включил - выключил) типа RS-30 до 100 штук.

Заранее спасибо за вероятный ответ.

У меня встречный вопрос, вы хотите на интерфейс 485 до 100 реле подключить?

Art86
11.01.2020, 12:54
Добрый день! первый раз работаю с ПЛК овен, с codesys сталкивался на других ПЛК. Необходимо организовать подключение к ПЛК (у меня их два 110 -м и 160-м, к каждому независимо) по Modbus RTU через порт RS 232. Пытаюсь проверить подключаюсь modbus poll ->moxa uport 1150 2-rx,3tx,5gnd ->порт RS232 Овен 7rx,8tx,3gnd (нет кабеля, собрал на коленках). Опрашиваю 2 регистра 4x (по идее одна float переменная, счетчик). Ответы не приходят, timeout error. при переключении на debug port очень редко какие то ответы проскакивали, но его я и не настраивал. Пытался опросить по modbus tcp. connection даже не удается установить. Что не так делаю?466314663246633

krollcbas
11.01.2020, 13:51
Art86, нужно по порядку.

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

Просто прочтя вижу "кашу"
1. Обжали кабель. Какая схема? Просьба выложить
2. По TCP - пингуется хоть? Зачем там такой GATE, выставьте нули. Framing time - 10, скорость поменьше, например 9600.
Добейтесь малого, а потом расширяйте эти Ваши эксперименты
3. Раз уж используете Modbus Pool, используйте и Modbus Slave. Это удобный инструмент. Попробуйте создать отдельно Мастера, отдельно слейв
Все должно работать.

Скорее всего вредит как раз опыт. Если все делать последовательно по инструкциям, обращая внимание на детали - все работает.

Art86
11.01.2020, 14:29
Спасибо за быстрый ответ.
Дело в программе где то походу. Писали на эмуляторе. у нас буквально несколько дней железо и отправляют на объект. Программа вроде работает, она не такая большая и никак вроде не связана с modbus. Пустой проект создали в нем modbus заработал на всех интерфейсах. Будем искать, что не так с программой

Art86
11.01.2020, 15:14
пошли на обед наконец и догадались. когда заливали плк не смогли установить соединение. оказалось таргеты есть новые. вроде тоже 110 и 160, но v2. в проектах поменяли целевые платформы, все залилось и работало вроде, кроме modbus. В общем пересоздали проект на новой целевой и так все работает. 5 часов убили на эксперименты.

sonrec
13.01.2020, 07:17
Доброго! подскажите пожалуйста, как организовать управление освещением одной кнопкой на плк 110, так чтобы при событии на кнопке свет включался, и выключался, но так же если горит свет больше часа, то срабатывал таймер и выключал свет. Сейчас все работает за исключением таймера, хочу его внедрить, но не могу продумать как сбрасывать блок таймера. Программирую с помощью функциональных блоков. заранее спасибо

capzap
13.01.2020, 07:39
Доброго! подскажите пожалуйста, как организовать управление освещением одной кнопкой на плк 110, так чтобы при событии на кнопке свет включался, и выключался, но так же если горит свет больше часа, то срабатывал таймер и выключал свет. Сейчас все работает за исключением таймера, хочу его внедрить, но не могу продумать как сбрасывать блок таймера. Программирую с помощью функциональных блоков. заранее спасибо

библиотека oscat_building, ФБ PULSE_T

Sulfur
13.01.2020, 07:54
sonrec
46644

В архиве файл экспорта этого ФБ, его нужно импортировать в проект.

capzap
13.01.2020, 08:03
sonrec
46644

В архиве файл экспорта этого ФБ, его нужно импортировать в проект.

и что будет если сигнал ON не выключат?

Sulfur
13.01.2020, 08:32
Можно воткнуть R_TRIG между ON и Out в первой строке, а можно подавать именно импульс на вход из основной программы.
Однако данный алгоритм все равно не по ТЗ топикастера, ему надо однокнопочное управление.

Вот исправленный вариант:
46647

Sulfur
13.01.2020, 08:56
Off берется из первой строки в элементе MOVE. Там делается инвертирование состояния Out. Т.к. по умолчанию (при старте программы) Out=false, то первое нажатие переводит Out в true, второе нажатие переводит Out обратно в false. В второй строке производится сброс Out в false принудительно по времени. Кстати, там лучше использовать TON вместо TP, тогда и TRIG1 будет не нужен.

Sulfur
13.01.2020, 09:03
46649
Всё, вот однокнопочное управление.

Sulfur
13.01.2020, 09:40
Вот тут облом-с. Я крепче чая пью только кофе.

Pavel Snegirev
14.01.2020, 10:37
Здравствуйте, подскажите пожалуйста как правильно настроить соединение Ethernet ПЛК со шлюзом МОХА. Имеется ПЛК Овен 110-30[М2] и однопортовый шлюз MOXA MGate MB3170, к которому подключено 5 устройств по RS 485, а именно модуль дискретного ввода 110 и 4 ТРМ200. Как именно в CodeSya 2.3 настроить данное соединение. Сильно не ругайтесь делаю в первый раз.

Pavel Snegirev
14.01.2020, 11:48
Дружище, я понимаю что вопросы глупые, если бы я делал это не один раз я бы вел себя по другому, но к сожалению есть момент который я не очень хорошо понимаю, так как в кодесис я вообще толком никогда не работал, а связан был непосредственно с микроконтроллерами и их спецификой. По этому подскажи пожалуйста, правильно ли я начинаю делать.Документация у меня вся есть.Смотрите, что делаю: добавляю modbus master, далее делать замену интрефейса на Empty, а далее добавляю универсальное модбас устройство, а после: что именно нужно дабавить как элемент. Вот в этой конечной точке у меня ступор. Возможно просто уже голова забита от других задач, которые делаю совместно с этим.

Pavel Snegirev
14.01.2020, 12:02
Moxa уже настроена, настраивал MGet Manager. Я спрашивал именно про содесис

Pavel Snegirev
14.01.2020, 12:27
Спасибо за ваш содержательный ответ.

sonrec
16.01.2020, 12:10
Sulfur спасибо большое!!! буду разбираться что к чему!!! должен буду как земля колхозу. в личку отправил запрос

hayabusa
17.01.2020, 20:23
Здравствуйте! Подскажите пожалуйста CODESYS 2.3 поддерживает эмуляцию файловой системы контроллера? Есть необходимость читать файл из памяти ПЛК, но команда filedir при вызове из браузера ПЛК ничего не показывает, дескриптор, возвращаемый функцией SysfileOpen с аргументами, отвечающими за режим работы (a/w) равен нулю, что значит неудачу. Не ужели работа с файлами возможна только на реальном железе?

capzap
17.01.2020, 20:32
Здравствуйте! Подскажите пожалуйста CODESYS 2.3 поддерживает эмуляцию файловой системы контроллера? Есть необходимость читать файл из памяти ПЛК, но команда filedir при вызове из браузера ПЛК ничего не показывает, дескриптор, возвращаемый функцией SysfileOpen с аргументами, отвечающими за режим работы (a/w) равен нулю, что значит неудачу. Не ужели работа с файлами возможна только на реальном железе?

можно, для этих случаев есть эмулятор контроллера WinPLC

hayabusa
17.01.2020, 21:21
Позвольте уточнить: после установи соотвествующего эмулятора и его настройки CODESYS будет обращаться/ закачивать проект как с настоящим ПЛК? и комнды браузера ПЛК наподобие filedir будут работать?

NIKROTOS
21.01.2020, 09:24
Здравствуйте, в списке библиотек(https://owen.ru/product/codesys_v2/documentation), присутствует информация о библиотеке SysLibCom(описание:Работа с портами RS-485/RS-232). При этом в конфигурации ПЛК, уже присутствуют данные функции. В чём собственно вопрос: обязательно ли использовать библиотеку, или она просто дублирует функции Конфигурации?
Аналогичный вопрос к Библиотекам Modbus, а так-же нужно ли при их использовании, дублировать определение протокола в конфигурации и можно ли обойтись работой с конфигурацией?

Sulfur
21.01.2020, 09:50
Для типовых задач (обмен данных по стандартному протоколу) вполне достаточного возможностей работы с конфигурацией. Если вам нужно "нечто эдакое", то библиотеку.

Linker1989
21.01.2020, 14:17
День добрый, подскажите как реализовать функцию переноса строк в СМС сообщениях? У меня в программе через Concat объединяются две строки. В СМС но они идут сплошным текстом, а хотелось бы чтобы каждая строка начиналась с новой. Есть ли такая возможность?

capzap
21.01.2020, 14:50
День добрый, подскажите как реализовать функцию переноса строк в СМС сообщениях? У меня в программе через Concat объединяются две строки. В СМС но они идут сплошным текстом, а хотелось бы чтобы каждая строка начиналась с новой. Есть ли такая возможность?

'$R$N' вставляйте

akledirs
23.01.2020, 18:01
Подходящей темы не нашел, так что напишу сюда. Уважаемые админы, прошу обратить внимание, что в Codesys 2.3 найдены потенциально опасные уязвимости переполнения буфера в ENI Server еще в октябре 2019. На одном из своих компьютеров обнаружил подозрительную активность службы этого процесса и полез гуглить в чем дело. 3S Software выкатила фиксы. Надо бы обновиться до версии 2.3.9.62. Распространяя старые версии ПО, вы подставляете собственных клиентов под хакерские атаки.