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

In_Da_Cher_A
15.11.2021, 19:10
Здравствуйте.
Начали работу над проектом в среде CoDeSys v2.3 на языке CFC.
Все бы хорошо, но вот места в редакторе вдруг стало мало, а для нормального чтения программы лепить в притык не хочется.
Может быть кто-то знает, как увеличить размеры редактора?
Спасибо.
самое простое на данном этапе - это сделать для однотипных не слишком сложных кусков программы свои пользовательские функциональные блоки и использовать их.

kondor3000
15.11.2021, 19:51
Здравствуйте.
Начали работу над проектом в среде CoDeSys v2.3 на языке CFC.
Все бы хорошо, но вот места в редакторе вдруг стало мало, а для нормального чтения программы лепить в притык не хочется.
Может быть кто-то знает, как увеличить размеры редактора?
Спасибо.

Разделяйте программу на части в виде ФБ (функциональных блоков). ФБ имеют входы и выходы и в программе PLC_ PRG, будут квадратики с названиями ФБ, со входами и выходами и наглядно и удобно. К примеру разбили всю программу на 3 части, в итоге получите 3 квадратика, где видно что приходит и что выходит.
Если много однотипных задач, делаете один ФБ и вызываете его нужное кол-во раз.

Iv_Str_NDT
16.11.2021, 09:52
Большое спасибо всем за ответы. Будем пробовать.

keysansa
17.11.2021, 11:57
Разделяйте программу на части в виде ФБ (функциональных блоков). ФБ имеют входы и выходы и в программе PLC_ PRG, будут квадратики с названиями ФБ, со входами и выходами и наглядно и удобно. К примеру разбили всю программу на 3 части, в итоге получите 3 квадратика, где видно что приходит и что выходит.
Если много однотипных задач, делаете один ФБ и вызываете его нужное кол-во раз.

Добавлю, что если проект более-менее сложный (у меня это начинается от бака с оборгевом и автоматическим наполнением), однотипные задачи так же стоит сгруппировать по функциональным узлам, согласно функциональной схемы. Входы и выходы (как "железнные", так и FB) - во внутренние переменные, и вместо связей использовать их.
Да, теряется вся прелесть CFC, где видно, какой сигнал куда идет, просто линией. Но все равно, при хорошем именовании переменных - читаемость сохраняется даже через год.
CFC хороши для 4-6 элементов И-ИЛИ-НЕ, RS-SR, по моему

keysansa
17.11.2021, 12:07
Где вы прочитали, что я использовал автонастройку ПИД ? В итоге выяснилось, что в реале картину портит дифсоставляющая. Если сделать TV = 0, то ПИД начинает вести себя адекватно.

Я про автонастроку говорил в Post Scriptum. Это было не к вам, а в общем.

keysansa
17.11.2021, 12:17
То что на фото стоит и не меняется.

Раньше пытались лечить по фото, сейчас PID настраивать )
Обычно графики значений от времени надо.

ОлегОлег
17.11.2021, 14:18
Как опледелить давление в вытяжке

keysansa
17.11.2021, 14:19
Как опледелить давление в вытяжке

Датчиком давления.

Soul01
19.11.2021, 09:44
Добрый день. Имеется ПЛК 154АМ, с которого необходимо собирать данные по modbus. Создаю modbus slave и цепляю переменные. Есть ли возможность сделать разрыв в адресах переменных (расположить переменную по определенному адресу)? (для примера: переменная 1 - адрес 0, а следующая за ней в конфигураторе переменная 2 - адрес 100)

kondor3000
19.11.2021, 11:07
Добрый день. Имеется ПЛК 154АМ, с которого необходимо собирать данные по modbus. Создаю modbus slave и цепляю переменные. Есть ли возможность сделать разрыв в адресах переменных (расположить переменную по определенному адресу)? (для примера: переменная 1 - адрес 0, а следующая за ней в конфигураторе переменная 2 - адрес 100)

Можно, только придётся добавить 99 неиспользуемых переменных.
Зачем такие сложности, может проще сделать ПЛК мастером и задавать любые адреса? Хоть с 256.

сосна
19.11.2021, 15:31
Надо было начинать на ST, а не на CFC. ;)

Используйте подпрограммы

Connebis
19.11.2021, 23:36
Появилась задача нужно прочитать/записать информацию используя UDP протокол в codesys v2. Есть примеры для codesys v3, но не подходит для codesys v2. Помогите пожалуйста, может у кого есть пример ?

Я новичок в plc не судите строго, если что-то не так написал.

kondor3000
20.11.2021, 00:18
Появилась задача нужно прочитать/записать информацию используя UDP протокол в codesys v2. Есть примеры для codesys v3, но не подходит для codesys v2. Помогите пожалуйста, может у кого есть пример ?

Я новичок в plc не судите строго, если что-то не так написал.
Здесь есть: 3 Пример сетевого обмена по протоколу UDP через Ethernet. https://owen.ru/forum/showthread.php?t=13588

ЗЫ: А ссылки уже все битые и никому нет дела.
Вот здесь есть тот же пример, в примерах Сетевого обмена
3 Пример сетевого обмена по протоколу UDP через Ethernet https://owen.ru/product/codesys_v2/projects

Connebis
20.11.2021, 05:23
Не очень подходит пример. Контроллер не поддерживает такую опцию. Использую ABB ac500 plc. Очень желательно пример с блоками наподобие, как на фото.



Здесь есть: 3 Пример сетевого обмена по протоколу UDP через Ethernet. https://owen.ru/forum/showthread.php?t=13588

ЗЫ: А ссылки уже все битые и никому нет дела.
Вот здесь есть тот же пример, в примерах Сетевого обмена
3 Пример сетевого обмена по протоколу UDP через Ethernet https://owen.ru/product/codesys_v2/projects

petera
20.11.2021, 09:02
Не очень подходит пример. Контроллер не поддерживает такую опцию. Использую ABB ac500 plc. Очень желательно пример с блоками наподобие, как на фото.

Контроллер АВВ
Тогда зачем Вам форум ОВЕН?
В библиотеке OSCAT codesys_network_121_hf1.lib есть пример
57986

ЗЫ
Посмотреть примеры можно, если открыть библиотеку как проект

ВалераМ
24.11.2021, 05:51
Доброго времени суток, уважаемые форумчане.
Что может быть с контроллером ПЛК160 v2, аналоговые выходы все как один выдают 10мА при любых изменениях, кто то сталкивался?

kondor3000
24.11.2021, 08:21
Доброго времени суток, уважаемые форумчане.
Что может быть с контроллером ПЛК160 v2, аналоговые выходы все как один выдают 10мА при любых изменениях, кто то сталкивался?

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

ВалераМ
25.11.2021, 07:12
Благодарю за оперативность и достаточно полный ответ, по Вашей критике, вполне ясно где и куда копать. Спасибо еще раз. ПЛК накрылся, поэтому разбираться уже не с чем))) Зато впредь буду тщательнее обращать внимание на ньюансы.

Andrey79
25.11.2021, 09:49
День добрый. Нужна помощь, есть ПЛК110-60(М02), есть сервомотор, серводрайвер 90st-m04025. Управление приводом по количеству импульсов, количество импульсов задает оператор, время не меняется до 1 секунды, максимальное количество импульсов не превышает 150. Я новичок в этом деле и не могу подобрать подходящее решение, пишу в LD или CFC. Буду весьма благодарен за разные примеры в решении данного вопроса.

dnk_101
26.11.2021, 12:29
Добрый день! ПЛК110-60(М02) master + панель СП310-Р slave. Запись через 8 bit output module проходит и состояние на панели меняется, а считывание состояния этих бит через 8 bit input module не получается. Регистры заданы в разных universal modbus device, как по мануалу и учебному видео. Подскажите, пожалуйста, что может быть не так.

kondor3000
26.11.2021, 12:35
Добрый день! ПЛК110-60(М02) master + панель СП310-Р slave. Запись через 8 bit output module проходит и состояние на панели меняется, а считывание состояния этих бит через 8 bit input module не получается. Регистры заданы в разных universal modbus device, как по мануалу и учебному видео. Подскажите, пожалуйста, что может быть не так.

Выложили бы скрины настроек, было бы быстрее. А так только гадать, то ли адрес регистра не тот, то ли функция не та, то ли настройки UMD не верны. Ещё возможна неверная настройка UMD для записи, так что выкладывайте оба.

petera
26.11.2021, 12:58
Добрый день! ПЛК110-60(М02) master + панель СП310-Р slave. Запись через 8 bit output module проходит и состояние на панели меняется, а считывание состояния этих бит через 8 bit input module не получается. Регистры заданы в разных universal modbus device, как по мануалу и учебному видео. Подскажите, пожалуйста, что может быть не так.

Замените команду чтения с 0х02(по умолчанию) на 0х01
58072

ЗЫ
Команды (функции) Модбас, которые поддерживает панель
https://owen.ru/forum/attachment.php?attachmentid=12241&d=1394708722

dnk_101
27.11.2021, 12:09
Добрый день! Спасибо, что откликнулись. Выкладываю фото настроек.58087

dnk_101
27.11.2021, 12:13
58088 Не получилось все вместе.5808958090580915809258088

dnk_101
27.11.2021, 12:15
Я полностью следовал мануалу и конечно, менял команды ;-)

dnk_101
27.11.2021, 12:22
Проблема в том, что я не могу получить состояние бита на панели. Пробовал в режиме ПЛК мастер и ПЛК слейв. Управлять битом получается, а получить его состояние - нет. Т.е. переключатель переключается, но я не вижу это в конфигурации. Скрины привожу уже в режиме слейв.

kondor3000
27.11.2021, 12:31
Проблема в том, что я не могу получить состояние бита на панели. Пробовал в режиме ПЛК мастер и ПЛК слейв. Управлять битом получается, а получить его состояние - нет. Т.е. переключатель переключается, но я не вижу это в конфигурации.

Ну вы даёте, в первом вопросе писали ПЛК110-60(М02) master + панель СП310-Р slave.

А скрины выкладываете все наоборот, Панель-мастер + ПЛК-слейв. Вы уж определитесь для начала.
По выложенным скринам почти всё правильно, только нет Порта 485 ВООБЩЕ, его надо добавить в модбас слейв и настроить!!! И как у вас тут что то работает непонятно.58093

dnk_101
27.11.2021, 12:51
Дописал. Извиняюсь. Скрины в режиме слейв.

kondor3000
27.11.2021, 12:56
Дописал. Извиняюсь. Скрины в режиме слейв.
В RS 485 проверьте установку модбас RTU
А теперь заливайте обе программы, подключайте и в онлайн подключении смотрите и управляйте.
Да в режиме панель мастер, должны быть подключены все слейвы прописанные в программе, иначе будет панель тормозить. Лучше на время удалить все кнопки и дисплеи для модулей не подключенных к панели.

dnk_101
27.11.2021, 13:02
Ага, вот так правильно. Не первый раз по кругу переделываю :)58095

dnk_101
27.11.2021, 13:09
При указанных выше настройках, я сейчас просто загружаю на панель 8 индикаторов с переключением и они не работают (только звуковой сигнал)

kondor3000
27.11.2021, 13:20
При указанных выше настройках, я сейчас просто загружаю на панель 8 индикаторов с переключением и они не работают (только звуковой сигнал)

Последнего вложения нет. RTU поставили? В контроллер программу загрузили? Старт включили? Давайте скрины хотя бы 2-3 индикаторов с переключением и скрин онлайн подключения к контроллеру. И как вы определяете, что не работает не понятно.

dnk_101
27.11.2021, 13:30
Что-то не правильно именно в настройках на панели. Устанавливаю режим работы с внутренними регистрами, загружаю и этот индикатор работает. Другие остаются в "подвисшем" состоянии. Что-то не так с одресацией по modbus через порт PLC. Хотя по мануалу первый регистр по первому адресу 0х 0 (нулевой)

kondor3000
27.11.2021, 13:37
Что-то не правильно именно в настройках на панели. Устанавливаю режим работы с внутренними регистрами, загружаю и этот индикатор работает. Другие остаются в "подвисшем" состоянии. Что-то не так с одресацией по modbus через порт PLC. Хотя по мануалу первый регистр по первому адресу 0х 0 (нулевой)

Я бы на вашем месте создал обе новые программы, добавил 1 шт. 8 бит и проверил, по ходу вы запутались уже где мастер где слейв, и заливаете не те программы. Заливайте первым всегда слейв, потом мастера. Не забывайте включать старт. Панель мастер всегда будет тупить, если вы не правильно задаёте адреса. Например во 2 и 3 индикаторе, добавляйте по 1 шт.

dnk_101
27.11.2021, 13:43
Скрин в онлайн.580985809958100

kondor3000
27.11.2021, 13:51
Скрин в онлайн.580985809958100

Нет вложений, вы их загружать забываете наверно. Проверьте ещё раз кабель RS 485. Похоже вы не правильно задаёте адреса битов. Вот скрин58105

dnk_101
28.11.2021, 12:48
Коллеги, спасибо за поддержку. Проблему решил. Не туда проводок подключил.:D58117

Pulet
01.12.2021, 22:43
Здравствуйте.

При написании логики в codesys 2.3 использую язык cfc. Схемы получаются громоздкими, т.к. многократно повторяются однотипные операции. Пробовал использовать макросы, но создать более одного в программе не получается.
Прошу развернуто описать процесс создания нескольких макросов в одной программе.

Cs-Cs
02.12.2021, 09:06
Pulet Надо делать POU, видимо. Делать свой FB под повторяющиеся операции, а его уже в CFC рисовать.
Сам процесс описан в руководстве на программирование CodeSys.

Rednaxel
02.12.2021, 10:39
Здравствуйте.
Пробовал использовать макросы, но создать более одного в программе не получается.
Прошу развернуто описать процесс создания нескольких макросов в одной программе.

Вот не знал, что в CodeSYS есть макросы. Спасибо Pulet - теперь знаю ;-) Может быть вы по аналогии с OWEN Logic хотели их применить, но это типа как в Word - туда просто включаются пункты меню для автоматизация каких-то часто повторяющихся задач.
Вам нужно, как правильно заметил Cs-Cs ПКМ по POU в дереве проекта - Добавить объект --> Функциональный блок или функция.

DIPHENHYDRAMINE
02.12.2021, 19:18
Всем привет!
есть вопрос... помогите пожалуйста....
переменная "А" тип INT изменяется -32767...0...32767-> -32767...0...32767.... и т.д.... т.е на выходе "пила" (это счетчик)
как ее преобразовать в DWORD чтобы считало от 0... и далшьше...??

kondor3000
02.12.2021, 20:19
Всем привет!
есть вопрос... помогите пожалуйста....
переменная "А" тип INT изменяется -32767...0...32767-> -32767...0...32767.... и т.д.... т.е на выходе "пила" (это счетчик)
как ее преобразовать в DWORD чтобы считало от 0... и далшьше...??

Так объявите её как DWORD, будет от 0 до 4 миллиардов считать.
Можно сделать переменную тип DINT, будет +-2миллиарда считать.
Преобразовать просто, INT_TO_DWORD или INT_TO_DINT, только может не всё так просто, смотря как и где она используется.

petera
02.12.2021, 20:21
Всем привет!
есть вопрос... помогите пожалуйста....
переменная "А" тип INT изменяется -32767...0...32767-> -32767...0...32767.... и т.д.... т.е на выходе "пила" (это счетчик)
как ее преобразовать в DWORD чтобы считало от 0... и далшьше...??
Прибавь константу 32767
B:= А + 32767;


VAR
B: DWORD;
A: INT;
END_VAR
B:= A + 32767;

Только зачем в DWORD преобразовывать если будет от 0 до 65534?
Достаточно WORD


ЗЫ. Поправочка
Может Вы в исходных данных ошиблись?
Диапазон INT от -32768 до 32767

B:= A + 32768; ?

Сергей0308
02.12.2021, 20:28
А, если объявить(преобразовать) в UINT, разве не будет показывать диапазон 0-65535 ?

kondor3000
02.12.2021, 20:32
А, если объявить(преобразовать) в UINT, разве не будет показывать диапазон 0-65535 ?!

И в UINT и WORD будет показывать диапазон 0-65535.

petera
02.12.2021, 20:34
А, если объявить(преобразовать) в UINT, разве не будет показывать диапазон 0-65535 ?


И в UINT и WORD будет показывать диапазон 0-65535.

Не будет
INT_TO_WORD(A) просто отбросит знак
т.е.
INT_TO_WORD(-32767) = 32767
ЗЫ.
Я ошибся
INT_TO_WORD(-32768) = 32768

INT_TO_WORD(-32767) = 32769
INT_TO_WORD(-32766) = 32770
INT_TO_WORD(-32765) = 32771
...........................................
INT_TO_WORD(-1) = 65535
INT_TO_WORD(0) = 0
INT_TO_WORD(1) = 1
........................................
INT_TO_WORD(32767) = 32767

Не та пила будет.

Сергей0308
02.12.2021, 21:02
Не будет
INT_TO_WORD(A) просто отбросит знак
т.е.
INT_TO_WORD(-32767) = 32767
ЗЫ.
Я ошибся
INT_TO_WORD(-32768) = 32768

INT_TO_WORD(-32767) = 32769
INT_TO_WORD(-32766) = 32770
INT_TO_WORD(-32765) = 32771
...........................................
INT_TO_WORD(-1) = 65535
INT_TO_WORD(0) = 0
INT_TO_WORD(1) = 1
........................................
INT_TO_WORD(32767) = 32767

Не та пила будет.

В инте отрицательные числа передаются(обычно) в дополнительном коде в диапазоне 32768-65535, "мозги" это отображают как "-32768" - "-1"!

kondor3000
02.12.2021, 21:04
Не та пила будет.

Так он сам просил от 0 и дальше. Ну досчитает если WORD до 65535 и опять с 0 пойдёт.

DIPHENHYDRAMINE
02.12.2021, 21:08
Так он сам просил от 0 и дальше. Ну досчитает если WORD до 65535 и опять с 0 пойдёт.
пила не нужна... нужно о 0 и до.. 4 млд достаточно будет.... 65535 мало....

DIPHENHYDRAMINE
02.12.2021, 21:10
Так объявите её как DWORD, будет от 0 до 4 миллиардов считать.
Можно сделать переменную тип DINT, будет +-2миллиарда считать.
Преобразовать просто, INT_TO_DWORD или INT_TO_DINT, только может не всё так просто, смотря как и где она используется.
это не возможно.... это физичиский вход модуля МВ11016ДН

DIPHENHYDRAMINE
02.12.2021, 21:17
переменная в конфигураторе объявленна типа WORD и в мануале она она WORD
58183

но работает как INT

petera
02.12.2021, 21:26
пила не нужна... нужно о 0 и до.. 4 млд достаточно будет.... 65535 мало....

Тогда вообще непонятна задача
Откуда брать 4 млд?

Диапазон данных с модуля от 0 до 65535! Как остальные миллиарды получаются?

petera
02.12.2021, 21:29
переменная в конфигураторе объявленна типа WORD и в мануале она она WORD
58183

но работает как INT

Если объявлена как WORD, то не может отображаться как -32768 ... 32767. Только от 0 до 65535.
Темните что-то!
Код покажите, где используется переменная

Наверняка переменная объявлена кроме онфигурации еще и в самой программе, причем как INT, типа ручками прописали в самой программе A AT%IW7.5.1.0 :INT

DIPHENHYDRAMINE
02.12.2021, 21:33
Если объявлена как WORD, то не может отображаться как -32768 ... 32767. Только от 0 до 65535.
Темните что-то!
Код покажите, где используется переменная

так я покзал.... счтитает от -32767 до +32767

это факт... сам не понимаю почему

Сергей0308
02.12.2021, 21:33
Видимо он хочет чтобы считало до 4 миллиардов с хвостиком, можно объявить переменную UDINT и к значению счётчика каждый раз при переполнении добавлять 65536!

DIPHENHYDRAMINE
02.12.2021, 21:39
58184
как то так....

petera
02.12.2021, 21:40
так я покзал.... счтитает от -32767 до +32767

это факт... сам не понимаю почему

Кода - нет.
Наверняка переменная объявлена кроме конфигурации еще и в самой программе, причем как INT, типа ручками прописали в самой программе A AT%IW7.5.1.0 :INT

Pulet
02.12.2021, 21:48
Вот не знал, что в CodeSYS есть макросы. Спасибо Pulet - теперь знаю ;-) Может быть вы по аналогии с OWEN Logic хотели их применить, но это типа как в Word - туда просто включаются пункты меню для автоматизация каких-то часто повторяющихся задач.
Вам нужно, как правильно заметил Cs-Cs ПКМ по POU в дереве проекта - Добавить объект --> Функциональный блок или функция.

Данную информацию находил на форумах. Только как потом к этому функциональному блоку обратится из основной программы?

DIPHENHYDRAMINE
02.12.2021, 21:49
Кода - нет.
Наверняка переменная объявлена кроме конфигурации еще и в самой программе, причем как INT, типа ручками прописали в самой программе A AT%IW7.5.1.0 :INT
58185вот проект

petera
02.12.2021, 21:52
Когда приведете в порядок формат переменной из модуля MV16D_1_DI_COUNT;

VAR
CTN: UDINT;
MV_COUNT_NEW: WORD;
MV_COUNT_OLD: WORD;
END_VAR


MV_COUNT_NEW:= MV16D_1_DI_COUNT;
IF MV_COUNT_NEW <> MV_COUNT_OLD THEN
CTN:= CTN + MV_COUNT_NEW;
MV_COUNT_OLD:= MV_COUNT_NEW;
END_IF

дрю
03.12.2021, 10:26
Как перенести проект с одного компа на другой?
Первый раз столкнулся с такой проблемой. Создал проект на одном компе_сохранил. После скопировал на флешку, перенёс на другой комп, открываю: ОШИБКА ЧТЕНИЯ ИНФОРМАЦИИ ЦЕЛЕВОЙ ПЛАТФОРМЫ_оШИБКА ПРИ ЧТЕНИИ КОНФИГУРАЦИИ ПЛК!_фАИЛ ОПИСАНИИЯ МОДУЛЯ ''MODULE.ROOT'' НЕ НАЙДЕН. иЗМЕНИТЬ КОНФИГУРАЦИЮ ДИРЕКТОРИИ? в результате проект открывается с пустой конфигурацией ПЛК. Я открыл проект на первой машине и сознательно сохранил его на флешк, переписал по новой в второй комп, тоже самое. Как исправить ситуацию?

дрю
03.12.2021, 10:33
Дополнение, с флешки на первой машине (где был создан проект) сам проект открывается без проблем

Sulfur
03.12.2021, 10:33
дрю

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

дрю
03.12.2021, 10:35
Сейчас проверю таргет т.к такой ПЛК я на нем не обкатывал, спасибо, не подумал.

дрю
03.12.2021, 10:53
Ну так и есть, на версию 2 таргет не был установлен

Dmitriy_Oleynikov
03.12.2021, 18:04
Добрый день! Помогите пожалуйста, прислали два файла default.prg и default.chk , необходимо срочно обновить проект контроллера ПЛК160, а я с овеном совсем не знаком, как это сделать??? Выручайте

kondor3000
03.12.2021, 19:17
Добрый день! Помогите пожалуйста, прислали два файла default.prg и default.chk , необходимо срочно обновить проект контроллера ПЛК160, а я с овеном совсем не знаком, как это сделать??? Выручайте

Вы рискуете угробить ПЛК, не зная даже азов работы. Вообще то проект ( в виде проекта Codesys ) заливается в ПЛК с помощью программы Codesys 2.3, таргетов на ПЛК и библиотек. Всё это скачивается с сайта Овен бесплатно.
С помощью этих файлов ( default.prg и default.chk ) в принципе можно залить проект, но надо иметь приличные знания по теме. И не каждый даже опытный возьмётся и то в исключительных случаях.
В вашем случае кирпич обеспечен, не скупитесь и обратитесь к программисту. Попробуйте лучше новый айфон перепрограммировать, результат будет такой же.

Dmitriy_Oleynikov
03.12.2021, 21:26
Проблема в том что наш объект удален от цивилизации, с овеном не кто не работал, работали с сименсом, треем, аленбредлей, а с овеном нет. А обновить по необходимо, т.к. прислали обновления где изменили аналоговый выход, в замен згоревшему. Читал руководство и пока понял что загрузить по можно имея весь проект, после его компиляции.

kondor3000
03.12.2021, 21:51
Проблема в том что наш объект удален от цивилизации, с овеном не кто не работал, работали с сименсом, треем, аленбредлей, а с овеном нет. А обновить по необходимо, т.к. прислали обновления где изменили аналоговый выход, в замен згоревшему. Читал руководство и пока понял что загрузить по можно имея весь проект, после его компиляции.

Попросите прислать исходник вместо этих файлов. Поставьте программу и залейте проект как положено, с помощью исходника. Риска никакого. Как и что делать выложено на ютубе в обучающих видео от Овен. Ну или по руководству. Обязательно поставить таргет соответствующий вашему новому ПЛК и таргету в исходнике.
До заливки программы, можете потренироваться, составив простенькую программку. Подключиться онлайн и посмотреть как, что работает.

Dmitriy_Oleynikov
03.12.2021, 22:12
Большое спасибо за помощь,я понял что без исходников очень проблемно установить ПО, завтра запрошу исходник или подробную инструкцию как установить ПО, хотя за исходники большое сомнение что вышлют.

Sulfur
04.12.2021, 07:25
Dmitriy_Oleynikov
А готовый запрограммированный ПЛК могут выслать? Есть предположение, что издержки такого решения будут ниже, чем при неудачном "программировании" на месте.

CyberEnot
04.12.2021, 09:02
Здравствуйте коллеги, мне понадобилось сделать листинг программы , но она переносится в файл в формате А4 , а необходимо в формате А3, хотя все настройки установленны правельно, как я понял необходим фрейм файл, может есть у кого?

mobicomtat
11.12.2021, 07:35
Программа для ПЛК 110 м2 написана на ST решил подключить к ней функциональный блок написанный тоже на ST. Он вызывается но блок не исполняется. Вызвал тот же самый блок из программы на FBD все работает отлично. В чем может быть проблема?

kondor3000
11.12.2021, 12:33
Программа для ПЛК 110 м2 написана на ST решил подключить к ней функциональный блок написанный тоже на ST. Он вызывается но блок не исполняется. Вызвал тот же самый блок из программы на FBD все работает отлично. В чем может быть проблема?

Пока только один ответ есть, объявленные внутренние переменные, такие же как в основной программе. Если переменные одинаковые, то внутренние имеют приоритет.
На FBD программа наверно новая, либо переменные не повторяются, поэтому всё работает.
Если бы забыли объявить блок, компиляция бы не прошла.

mobicomtat
11.12.2021, 14:38
Кривых рук не исключаю. Вот скрины упрощенного варианта.5830158302

petera
11.12.2021, 14:53
Кривых рук не исключаю. Вот скрины упрощенного варианта.5830158302

Не верно в принципе, т.к. ФБ не вызывается на выполнение!
Вызов экземпляра
q2: rty;
выглядит как
q2();
Например
58303

Или
58304

или
58305

mobicomtat
11.12.2021, 14:57
Спасибо. Получилось.

kondor3000
11.12.2021, 15:05
Кривых рук не исключаю. Вот скрины упрощенного варианта.5830158302
А где вызов вашего ФБ, в программе?

q2(w1:= , w2=> );
И чтобы не путаться, объявляйте блок с таким же именем как имя ФБ, например ( rty:rty; можно добавить индекс, если блоков много rty1:rty; ) и вставлять в программу будет проще по F2

Ильнур
13.12.2021, 16:09
Добрый день!
Не получается преобразовать переменную типа DWORD (значение 549959687) в тип REAL. Не подскажите как лучше сделать? Мне необходимо преобразовать число 549959687 типа DWORD в 5499596,87 типа REAL.

saii
13.12.2021, 16:27
Добрый день!
Не получается преобразовать переменную типа DWORD (значение 549959687) в тип REAL. Не подскажите как лучше сделать? Мне необходимо преобразовать число 549959687 типа DWORD в 5499596,87 типа REAL.
Разделить его на 100.0 или REAL#100

kondor3000
13.12.2021, 18:38
Разделить его на 100.0 или REAL#100

Не получится ничего с таким числом, REAL представляется в экспоненциальном виде с 6 знаками после запятой, а надо 8 или 9 знаков.
Вот что получается 58331


Добрый день!
Не получается преобразовать переменную типа DWORD (значение 549959687) в тип REAL. Не подскажите как лучше сделать? Мне необходимо преобразовать число 549959687 типа DWORD в 5499596,87 типа REAL.

Если очень надо, то придётся переводить REAL в STRING по отдельности целую и дробную часть, а потом два STRING склеивать.
Либо перевести DWORD в STRING и вставить в него точку или запятую. Так например: 58336

saii
13.12.2021, 20:04
Не получится ничего с таким числом, REAL представляется в экспоненциальном виде с 6 знаками после запятой, а надо 8 или 9 знаков.

Если очень надо, то придётся переводить REAL в STRING по отдельности целую и дробную часть, а потом два STRING склеивать. По другому наверное никак.

Согласен, не посмотрел на размер числа :(

W1nn1ep00h
14.12.2021, 00:59
Вопрос по блоку -VALVE_REG_NO_POS из библиотеки Regulators. Не имея концевиков, как будет работать блок при постоянном включении контроллера ПЛК110[М2] минимум на месяца 2. У него же будет ошибка по реальному открытию задвижки и то, что насчитает себе блок. как уйти от этой ошибки рассогласования между реальным положением задвижки и то, что насчитает блок?
Также возникает ошибка связи на модуле аналогового ввода и ПЛК, какие самые распостранненые?

Ильнур
14.12.2021, 12:37
Не получится ничего с таким числом, REAL представляется в экспоненциальном виде с 6 знаками после запятой, а надо 8 или 9 знаков.
Вот что получается 58331



Если очень надо, то придётся переводить REAL в STRING по отдельности целую и дробную часть, а потом два STRING склеивать.
Либо перевести DWORD в STRING и вставить в него точку или запятую. Так например: 58336

Спасибо. Я тоже думал с переводом в строку попробовать. А в codesys случайно нет таких функции как atof (преобразует строку в double)?

kondor3000
14.12.2021, 13:44
Спасибо. Я тоже думал с переводом в строку попробовать. А в codesys случайно нет таких функции как atof (преобразует строку в double)?

В Сodesys 2.3 нет. Был бы LREAL поддержан, проблем бы не было.

ingener4
15.12.2021, 12:38
Добрый день. Помогите пожалуйста разобраться, написала светофор в codesys 2.3, но при компиляции выдает ошибку, не пойму что не так. Если кто готов помочь, напишите свою почту, я скину файл.

In_Da_Cher_A
15.12.2021, 12:52
но при компиляции выдает ошибку, не пойму что не так.так что за ошибка то?

ingener4
15.12.2021, 13:44
Ошибка 4336. PLC_PRG(2) Необходимо выражение на входе блока

petera
15.12.2021, 14:04
Ошибка 4336. PLC_PRG(2) Необходимо выражение на входе блока


Добрый день. Помогите пожалуйста разобраться, написала светофор в codesys 2.3, но при компиляции выдает ошибку, не пойму что не так. Если кто готов помочь, напишите свою почту, я скину файл.

Справа, внизу, после кнопки "Отправить сообщение", есть кнопка "Расширенный режим"
Как только включишь, сможешь прикреплять к сообщению вложения
- либо кнопочка со скрепкой на панели инструментов
- либо внизу "дополнительные опции"--> кнопка "Управление вложениями"

ingener4
15.12.2021, 15:25
Спасибо, вложила

A.Simonov
15.12.2021, 15:31
Спасибо, вложила

Добрый день.

Если пошевелить на холсту LIGHT1 то можно увидеть, что не все выходы подключены.

https://owen.ru/forum/attachment.php?attachmentid=58377&stc=1&d=1639571572

ingener4
15.12.2021, 15:54
точно, заработал))) спасибо большое

A.Simonov
15.12.2021, 16:00
точно, заработал))) спасибо большое

Еще обратите внимание на цифры возле каждого блока. Они идут не попорядку.
На таком маленьком проекте это может быть незаметно, но на больших проектах это может давать неожиданные результаты, чтобы сделать все по порядку, нужно сделать так:
https://owen.ru/forum/attachment.php?attachmentid=58378&stc=1&d=1639573202

ingener4
15.12.2021, 17:28
Исправила) еще вопрос. Не совсем понимаю,по идеи кнопка ON должна была включать светофор после 7 циклов его работы.но он работает без остановки. Даже когда ставлю TRUE на его отключение, он продолжает мигать

kondor3000
15.12.2021, 18:27
Исправила) еще вопрос. Не совсем понимаю,по идеи кнопка ON должна была включать светофор после 7 циклов его работы.но он работает без остановки. Даже когда ставлю TRUE на его отключение, он продолжает мигать

Это вам препод что ли ошибок наделал?

Есть ещё несколько ошибок. Блок у вас запускается сам и не останавливается, надо исправить TRUE на START. В первом блоке цифры 1 и 3 надо исправить на 2 и 2, тогда начинаться будет с 2 жёлтых. На скрине 2 ошибки
58380
И ещё Кнопка должна менять цвет, в настройках кнопки обычный цвет выбрать красный, тревожный салатовый.
Совсем он не остановится, в блоке End стоит пауза 10 сек.

Dmitri11
19.12.2021, 07:48
Проект, открываемый на другом компьютере, теряет целевую платформу. Как выполнить экспорт проекта на другой компьютер?

In_Da_Cher_A
19.12.2021, 08:47
Проект, открываемый на другом компьютере, теряет целевую платформу. Как выполнить экспорт проекта на другой компьютер?

это не проект теряет таргет, это CDS установленный на другом компьютере не имеет установленных в программу таргетов целевых платформ.
Вы тупо поставили CDS, а таргеты контроллеров не установили, у вамс "пустая программа" вот у вас и "теряется" целевая платформа - CDS просто не знает конфигурации неизвестного для неё контроллера.
Установите таргеты контроллеров в CDS - как? смотрите в мануале
Следующим вопросом вероятно будет "Проект, открываемый на другом компьютере, теряет библиотеки. Как выполнить экспорт библиотек на другой компьютер?" :)

Dmitri11
19.12.2021, 10:22
У меня диск из комплекта ПЛК154. Установил CoDeSys и таргеты на ПЛК154, ПЛК110 (пункты меню установщика). Сохраняю проекты в своих папках. Но простая работа с проектами изменяет содержимое папок 3S Software. Перенос содержимого 4-х папок, имеющих отношение к целевой платформе (всплывающее окно "Опции") , не дает результат. Возможно завтра я выполню экспорт проекта *.exp и перенесу его на портативный компьютер (работа на объектах предприятия). К чему такая сложность?

kondor3000
19.12.2021, 11:22
У меня диск из комплекта ПЛК154. Установил CoDeSys и таргеты на ПЛК154, ПЛК110 (пункты меню установщика). Сохраняю проекты в своих папках. Но простая работа с проектами изменяет содержимое папок 3S Software. Перенос содержимого 4-х папок, имеющих отношение к целевой платформе (всплывающее окно "Опции") , не дает результат. Возможно завтра я выполню экспорт проекта *.exp и перенесу его на портативный компьютер (работа на объектах предприятия). К чему такая сложность?

Никаких сложностей нет, я открываю любой свой проект или скачанный чужой без проблем, на любом компьютере. У вас что то не так установлено. Что не так, надо разобраться. Может переустановить таргеты. Проверить папку таргетов по умолчанию.
Если ругается на библиотеки, проверьте папку библиотек по умолчанию. Если добавляли свой путь к папкам, удалите его.
Проект можно переносить как сам по себе, так и со всеми созданными доп. файлами. В таком случае проект будет соответствовать записанному в ПЛК.
И помните, что даже дополнительная компиляция и сохранение изменяют программу, хотя внутри ничего не менялось.

In_Da_Cher_A
19.12.2021, 16:26
У меня диск из комплекта ПЛК154. Установил CoDeSys и таргеты на ПЛК154, ПЛК110 (пункты меню установщика). Сохраняю проекты в своих папках. Но простая работа с проектами изменяет содержимое папок 3S Software. Перенос содержимого 4-х папок, имеющих отношение к целевой платформе (всплывающее окно "Опции") , не дает результат. Возможно завтра я выполню экспорт проекта *.exp и перенесу его на портативный компьютер (работа на объектах предприятия). К чему такая сложность?
честно говоря - ничего не понял, какая-то непонятная суета с содержимым папок и тоже недоумеваю к чему такая сложность?
первое что вы должны научиться делать - это уметь установить нужный вам таргет и библиотеку.
если вы этого не умеете, то и возня с содержимым папок вам не поможет и она совершенно не нужна, потому как на другом компьютере кто-то может изменить путь как папкам по-умолчанию на то, как ему удобно и вы опять столкнётесь проблемами и ненужными телодвижениями.

Если вы уж так упёрлись, что хотите всё равно сделать по-своему, то не надо игнорировать моё пожелание наконец-то RTFM
там вы нашли бы такой момент, как "сохранение конфигурационных файлов в проекте"
но это поможет только наполовину
нужные вам библиотеки или отбельные блоки никто за вас сохранять не будет, и рано или поздно вы наступите на эти грабли

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

Dmitri11
21.12.2021, 06:10
поэтому ноутбук как рабочий инструмент должен быть настроен самостоятельно для полноценной работы

То есть допускается использование виртуальных каналов RS-232 (Windows NT ... Windows 10 ?). Конвертер (адаптер) интерфейсов и настройки? Здесь у меня связь с контроллером не получилась.

In_Da_Cher_A
21.12.2021, 19:03
То есть допускается использование виртуальных каналов RS-232 (Windows NT ... Windows 10 ?). Конвертер (адаптер) интерфейсов и настройки? Здесь у меня связь с контроллером не получилась.ничего не понял, какой вин энти, какие виртуалы, почему такие выводы и о чём они вообще.....что-то мне кажется мы с вами в разных измерениях находимся. почитайте мануалы поработайте с программами, с железом....удачи

SlavikP
22.12.2021, 04:24
Тоже мало что понял, но у меня Codesys живет в виртуалке, использую дешевый кетайские переходники usb на базе чипов ch340 и PL2303.
Связка работает без нареканий, с железом связь есть.

Dmitri11
22.12.2021, 22:06
Можно ли использовать адаптер USB/RS-232? Кто-нибудь пробовал? Для какой ОС? Я так понимаю режим UART асинхронный, подойдет простой (полноценный не нужен) адаптер. Но скорость обмена?
(У меня ПЛК с проектом остался на максимальной скорости аппаратного порта и не отвечает через адаптер. Экспериментировать не хочется.)
...

Спасибо за полезный ответ ардуинщику (ARDUINO). Куплю адаптер на CH340 (полноценное изделие) ~ 170 рублей.

keysansa
22.12.2021, 22:16
Проект, открываемый на другом компьютере, теряет целевую платформу. Как выполнить экспорт проекта на другой компьютер?

Для переноса проекта на другой компьютер, лучше использовать не копирование, а архивирование-восстановление проекта. Тогда ничего не теряется.

keysansa
22.12.2021, 22:20
Можно ли использовать адаптер USB/RS-232? Кто-нибудь пробовал? Для какой ОС? Я так понимаю режим UART асинхронный, подойдет простой (полноценный не нужен) адаптер. Но скорость обмена?
...

Спасибо за полезный ответ ардуинщику (ARDUINO). Куплю адаптер на CH340 (полноценное изделие) ~ 170 рублей.
Можно. Но при переносе проекта, если не хотите лишних манипуляций именно в проекте - при установке драйверов на новом компе, в свойствах COM установите ему тот же порт.

Dmitri11
24.12.2021, 19:37
Можно. Но при переносе проекта, если не хотите лишних манипуляций именно в проекте - при установке драйверов на новом компе, в свойствах COM установите ему тот же порт.

... да, эти параметры (фрейма) обмена сохраняет ПЛК.

kondor3000
26.12.2021, 11:05
Другой вопрос. Зачем всё так усложнять? Годятся ли CoDeSys (IoT) и Owen Logic (на Windows 10) для промышленных изделий?

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

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

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

Newcomer
29.12.2021, 12:32
Добрый день

Переменная PC1 объявлена в ФБ M_PID. Пытаюсь построить временной график этой переменной, задаю ее как M_PID.PC1. График не строится. В чем причина ?

Евгений Кислов
29.12.2021, 13:41
Добрый день

Переменная PC1 объявлена в ФБ M_PID. Пытаюсь построить временной график этой переменной, задаю ее как M_PID.PC1. График не строится. В чем причина ?

Добрый день.

M_PID - это имя ФБ или его экземпляра?
Экземпляр ФБ вызывается в какой-либо программе?

Если выложите простой проект (в котором будет только ФБ и тренд) - то помочь вам будет проще.

vsa
15.01.2022, 12:21
Пишу программу на языке ST для ПЛК110-24.60.Р-М[М02] в CODESYS V2.3.9.14. Этот мой первый проект на подобном контроллере. До этого всегда писал программы для M221 (TWIDO).
Подскажите, можно ли в CODOSYS сформировать символ (идентификатор) для отдельного бита слова (%MWi). Чтобы в программе не писать типа "TMP.1:=TRUE", а записывать через идентификатор, например, "Р1:=TRUE;" Где P1 это идентификатор TMP.1

kondor3000
15.01.2022, 12:57
Пишу программу на языке ST для ПЛК110-24.60.Р-М[М02] в CODESYS V2.3.9.14. Этот мой первый проект на подобном контроллере. До этого всегда писал программы для M221 (TWIDO).
Подскажите, можно ли в CODOSYS сформировать символ (идентификатор) для отдельного бита слова (%MWi). Чтобы в программе не писать типа "TMP.1:=TRUE", а записывать через идентификатор, например, "Р1:=TRUE;" Где P1 это идентификатор TMP.1

Можно и лучше давать имена всем переменным, в том числе и в конфигурации. Например регистру WORD, даете имя Mask, тогда обращение к битам этой маски будет Mask.0, Mask.1.....Mask.15. И присваивать Mask.0:=TRUE; Mask.1:=FALSE;
Если вам надо, можете присвоить имя каждому биту, например Mask.0:=Avariya1; Mask.1:=Avariya2; и т. д.
и уже присваивать Avariya1:=TRUE; Avariya2:=FALSE;

Евгений Кислов
15.01.2022, 13:08
Пишу программу на языке ST для ПЛК110-24.60.Р-М[М02] в CODESYS V2.3.9.14. Этот мой первый проект на подобном контроллере. До этого всегда писал программы для M221 (TWIDO).
Подскажите, можно ли в CODOSYS сформировать символ (идентификатор) для отдельного бита слова (%MWi). Чтобы в программе не писать типа "TMP.1:=TRUE", а записывать через идентификатор, например, "Р1:=TRUE;" Где P1 это идентификатор TMP.1

Cамое близкое к описанному вами - см. в п. 10.11 (раздел "Битовая адресация через глобальные константы"):
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf

vsa
15.01.2022, 14:07
Можно и лучше давать имена всем переменным, в том числе и в конфигурации. Например регистру WORD, даете имя Mask, тогда обращение к битам этой маски будет Mask.0, Mask.1.....Mask.15. И присваивать Mask.0:=TRUE; Mask.1:=FALSE;
Если вам надо, можете присвоить имя каждому биту, например Mask.0:=Avariya1; Mask.1:=Avariya2; и т. д.
и уже присваивать Avariya1:=TRUE; Avariya2:=FALSE;

Спасибо. но я немного не понял:
"..., например Mask.0:=Avariya1; Mask.1:=Avariya2; и т. д.
и уже присваивать Avariya1:=TRUE; Avariya2:=FALSE;"
Как это работает? А как объявить Avariya1?

Представьте, я управляю автооператорами в гальванике. У автооператора два движения: вертикальное и горизонтальное. Более того, скорости могут быть разные. Имеется слово %MW1:
%MW1.0 - FW min скорость;
%MW1.1 - RV min скорость;
%MW1.2 - горизонтальная Mах скорость;
%MW1.3 - UP min скорость;
%MW1.4 - DOWN min скорость;
%MW1.5 - вертикальная Max скорость;
...
...
и так расписываю до конца слова по двум автооператорам.

И когда пишешь большую программу, бывает тяжело понять, что означает %MW1.4. А если бы была возможность %MW1.4 поставить в соответствие, например, Down_AO1, то это было бы информативнее.
Да и сбрасывать сразу 16 бит записью %MW1:=0 быстрее и компактнее.

vsa
15.01.2022, 14:10
Cамое близкое к описанному вами - см. в п. 10.11 (раздел "Битовая адресация через глобальные константы"):
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf

Спасибо, но что-то не нахожу ответ для себя в разделе "Битовая адресация через глобальные константы". Наверно, сказывается, что я новичок в CODESYS.

capzap
15.01.2022, 14:20
Спасибо, но что-то не нахожу ответ для себя в разделе "Битовая адресация через глобальные константы". Наверно, сказывается, что я новичок в CODESYS.

всё сводится к тому что замените обезличенные .0, .1 и т.д. на TMP.Down_AO и т.п.

kondor3000
15.01.2022, 14:36
Спасибо. но я немного не понял:
"..., например Mask.0:=Avariya1; Mask.1:=Avariya2; и т. д.
и уже присваивать Avariya1:=TRUE; Avariya2:=FALSE;"
Как это работает? А как объявить Avariya1?


Да и сбрасывать сразу 16 бит записью %MW1:=0 быстрее и компактнее.

Да просто объявить
Avariya1: BOOL;
Avariya2: BOOL;
Mask: WORD;
А вот так выглядит имя Mask в конфигурации( она глобальная) и объявление битов в глобальных переменных 58724

vsa
15.01.2022, 14:49
Всем спасибо! Сейчас попробую. Не ожидал, что так быстро на мои вопросы будут отвечать.

vsa
15.01.2022, 15:01
Меня интересуют реальные адреса рабочих слов. У меня в проекте с моей программой будет общаться внешний компьютер через зарезервированные слова. Так я работал с контроллерами M221 (Шнайдер Электрик).
В чем принципиальная разница:
А. Объявляю в секции Global Variables MW_77 AT %MW77: INT; и работаю с переменной MW_77. Например, MW_77:=1;
В. Без объявления работаю %MW77:=1;

kondor3000
15.01.2022, 15:16
Меня интересуют реальные адреса рабочих слов. У меня в проекте с моей программой будет общаться внешний компьютер через зарезервированные слова. Так я работал с контроллерами M221 (Шнайдер Электрик).
В чем принципиальная разница:
А. Объявляю в секции Global Variables MW_77 AT %MW77: INT; и работаю с переменной MW_77. Например, MW_77:=1;
В. Без объявления работаю %MW77:=1;

Я вам выше скрин выложил, по именам обращаться и понятнее и информативнее, %QB12.0.7.0 это и непонятно и не рекомендовано к применению.

Представьте, вы забыли вписать в начале 2 переменных, вы их добавляете и у вас все переменные проекта меняют адреса. А если переменных больше 1000, вам месяц проект переписывать придётся. А по именам вы как обращались к Mask1, так и будете обращаться.

vsa
15.01.2022, 15:45
Я совершенно согласен с вами, что информативнее писать подробнее в названиях переменных. Но сейчас меня интересует принципиальный вопрос. На языке ST оператор %MW71:=1; Будет работать корректно? И к слову %MW71 в дальнейшем может обратится внешний компьютер?
И такое в секции Global Variables MW_71 AT %MW71: INT; имеет тот же результат, если отработать MW_71:=1;?
Это все одно и тоже?
Я переношу программу с одного контроллера (M221) на другой (ОВЕН). Программа большая и муторная по логике. И перевожу с языка IL на ST. Боюсь запутаться.

kondor3000
15.01.2022, 15:53
Я совершенно согласен с вами, что информативнее писать подробнее в названиях переменных. Но сейчас меня интересует принципиальный вопрос. На языке ST оператор %MW71:=1; Будет работать корректно? И к слову %MW71 в дальнейшем может обратится внешний компьютер?
И такое в секции Global Variables MW_71 AT %MW71: INT; имеет тот же результат, если отработать MW_71:=1;?
Это все одно и тоже?
Я переношу программу с одного контроллера (M221) на другой (ОВЕН). Программа большая и муторная по логике. И перевожу с языка IL на ST. Боюсь запутаться.

Ну это легко проверить, создаёте тестовую программу с одной переменной, и в эмуляции проверяете)))

kondor3000
15.01.2022, 16:12
Работает, если адреса в конфигурации и в глобальных совпадают. 58725

Но как по мне проще сразу, вместо АТ вписать MW_71. И в глобальных уже ничего писать не надо))) 58726

vsa
15.01.2022, 16:39
Ваш ответ вверг меня в стопор! Такое ощущение, что я вообще иду не в том направлении. Я занимаюсь этой проблемой всего четыре дня. И, естественно, я многое не улавливаю в этой системе. Я правильно понял, что секция Global Variable необходима чтобы объявлять переменные (я не о входных и выходных) для доступа к ним из любого места программы? А Вы показали Register input module. Зачем? Или Вы эмулировали внешний доступ к внутреннему слов?

И если уж я тут, то помогите. В чем ошибка?:
58727

vsa
15.01.2022, 17:03
Золотые слова.
Осознание начнется после разделения алгоритма и обмена.

Да вот я и зашел на форум для получения консультаций. Когда я программировал ПЛК M221, то там ничего не нужно было делать со словами к которым будет внешнее обращение сторонним устройством (Master) . А здесь, оказывается. нужно каждое такое слово расписать в конфигурации ПЛК? Я правильно понял? Или я все усложняю?
Если мне в программе необходимо зарезервировать 20 слов (16 битных), то недостаточно , разве, объявить их в секции Gllobal_Variables, чтобы компилятор не распределил на этих нужных словах свои переменные?
Подскажите на примере, как прописать слова 70,71, 74, 75, чтобы было к ним возможное обращение внешним компьютером. Компьютер будет читать и записывать данные в эти слова.

kondor3000
15.01.2022, 17:14
Ваш ответ вверг меня в стопор! Такое ощущение, что я вообще иду не в том направлении. Я занимаюсь этой проблемой всего четыре дня. И, естественно, я многое не улавливаю в этой системе. Я правильно понял, что секция Global Variable необходима чтобы объявлять переменные (я не о входных и выходных) для доступа к ним из любого места программы? А Вы показали Register input module. Зачем? Или Вы эмулировали внешний доступ к внутреннему слов?

И если уж я тут, то помогите. В чем ошибка?:
58727
В Global Variable объявляются те переменные, которые не задействованы в обмене. Те которые в конфигурации, нужны для обмена и они тоже глобальные.
И только в конфигурации имеют свои адреса, например %IW7.0.0.1 , %QB12.0.2.0. К ним можно обращаться и по имени и по адресу.
На скрине вы пытаетесь маску WORD, разложить на BYTE, или я не так понимаю.
Я вам писал как маску разложить на биты (BOOL). Либо из битов собрать маску. Только биты могут быть TRUE и FALSE.

vsa
15.01.2022, 17:30
Я понял ваше решение!!!
Постоянно в цикл ПЛК осуществляется
Mask.0:=Avariya1; Mask.1:=Avariya2;
И как только я где-то изменю, например

Avariya1:=TRUE; Avariya2:=FALSE;

То на следующем цикле изменится слово Mask.

Сейчас это внесу к себе в проект.

kondor3000
15.01.2022, 17:41
Я понял ваше решение!!!
Постоянно в цикл ПЛК осуществляется
Mask.0:=Avariya1; Mask.1:=Avariya2;
И как только я где-то изменю, например

Avariya1:=TRUE; Avariya2:=FALSE;

То на следующем цикле изменится слово Mask.

Сейчас это внесу к себе в проект.

Ну в общем правильно, только можно сначала присвоить битам TRUE, а уже потом собрать их в маску и передать. Тогда присвоится в этом цикле.

vsa
15.01.2022, 17:53
kondor3000, спасибо! Все пошло.

А как представлять слова в программе, к которым будет обращение от внешнего компьютера? Я уже задавал подобный вопрос:

Подскажите на примере, как прописать слова 70,71, 74, 75 в проекте, чтобы было к ним возможное обращение внешним компьютером. Компьютер будет читать и записывать данные в эти слова.

kondor3000
15.01.2022, 17:59
kondor3000, спасибо! Все пошло.

А как представлять слова в программе, к которым будет обращение от внешнего компьютера? Я уже задавал подобный вопрос:

Подскажите на примере, как прописать слова 70,71, 74, 75 в проекте, чтобы было к ним возможное обращение внешним компьютером. Компьютер будет читать и записывать данные в эти слова.

Тут опять надо понимать, что вы имеете ввиду. Компьютер может быть локальный рядом с ПЛК или удалённый, подключённый по изернету, на котором установлена Скада например.
На локальном, вы можете подключиться онлайн через Codesys по Debag 232, USB или изернет кабелем прямо к ПЛК. И смотреть обмен и им управлять.
Либо например в ПЛК делаете Модбас слейв, заносите туда нужные регистры, поднимаете на компе Owen OPC Server и читаете, пишите регистры.
Либо на локальном компе установлена Скада, тогда через CodesysGetewayServer и CodesysOPC.02 выводите полную конфигурацию ПЛК на Скаду и передаёте на удалённый. Через Скаду можно читать и записывать все переменные.

vsa
15.01.2022, 18:19
Компьютер установлен в одном шкафу и будет соединен с ПЛК через Ethernet. Мы так традиционно делали в моих прошлых проектах. В компьютере будет работать наша программа написанная на языке Си. Компьютер должен записывать команды ПЛК в слова памяти. А также их читать для анализа ситуации на лини, которой управляет ПЛК.

vsa
16.01.2022, 10:19
Хочу уточнить вопрос. В системе управления необходимо организовать связь компьютера (Master) и ПЛК ОВЕН110-24.60.P[M02] (Slave [Adr=1]). Физическая связь может быть Ethernet, либо RS-485-2 (RS-485-1 занять дополнительными модулями IN и OUT). Как настроить конфигурацию ПЛК, чтобы внешний компьютер по протоколу Modbus RTU мог бы читать и записывать данные в определенные слова памяти ПЛК? Внешний компьютер уже умеет делать квалифицированные запросы по протоколу Modbus RTU. Хотелось бы посмотреть на готовом примере, как прописана подобная конфигурация в ПЛК. Можно дать ссылку на документацию.

kondor3000
16.01.2022, 13:07
Хочу уточнить вопрос. В системе управления необходимо организовать связь компьютера (Master) и ПЛК ОВЕН110-24.60.P[M02] (Slave [Adr=1]). Физическая связь может быть Ethernet, либо RS-485-2 (RS-485-1 занять дополнительными модулями IN и OUT). Как настроить конфигурацию ПЛК, чтобы внешний компьютер по протоколу Modbus RTU мог бы читать и записывать данные в определенные слова памяти ПЛК? Внешний компьютер уже умеет делать квалифицированные запросы по протоколу Modbus RTU. Хотелось бы посмотреть на готовом примере, как прописана подобная конфигурация в ПЛК. Можно дать ссылку на документацию.

Я же вам написал все варианты.
Вот сделал пример по варианту 2. В программе создал Модбас слейв с адресом 1, добавил нужные регистры ( адреса считаются с нулевого), подключение по TCP порт 502. IP контроллера у меня по умолчанию 10.0.6.10.
Вашей программы нет, поэтому поднял на компе Owen OPC Server. IP компа сделал 10.0.6.30, шлюз 10.0.6.1.
Настройки TCP/IP, IP 10.0.6.10 , порт 502, слейв адрес 1, добавил нужные теги, с адресами от 0 до 4.
Функция чтения 0Х03, записи 0Х10, для Coils 0Х01, 0Х0F.
Для Float надо поменять местами регистры. Float из-за выравнивания, сместился с 3 на 4 (чётный) регистр, следите 4 байтные переменные должны быть с чётными адресами.
Всё работает, смотри скрин58742

vsa
16.01.2022, 15:30
Kondor3000, большое спасибо! Погружаюсь в понимание присланного ответа. Но сразу хочу спросить (не ругайтесь сразу за возможную некомпетенцию) , а почему в ПЛК нельзя во время работы обращаться внешним компьютером к любому (!) слову рабочей памяти по сете? Я понял, что в ПЛК ОВЕН нужно описать все регистры, к которым внешний компьютер будет обращаться? (я еще не вникал в ваш скрин) . Я с эти впервые сталкиваюсь за 15 лет работы с контроллерами Modicon M221 (TWIDO) (от компании Schneider Electric). Там было все очень просто. Настроил внешний порт для связи и работай с памятью ПЛК. Еще раз большое спасибо, что не оставляете меня с моими проблемами по освоению ПЛК ОВЕН и CodeSYSY.
Меня очень заинтересовал программа Owen OPC Server, я понял, что можно через нее моделировать общение по сети с программой ПЛК ОВЕН. Я правильно понял? Если это так, то это вообще здорово!

kondor3000
16.01.2022, 16:05
Kondor3000, большое спасибо! Погружаюсь в понимание присланного ответа. Но сразу хочу спросить (не ругайтесь сразу за возможную некомпетенцию) , а почему в ПЛК нельзя во время работы обращаться внешним компьютером к любому (!) слову рабочей памяти по сете? Я понял, что в ПЛК ОВЕН нужно описать все регистры, к которым внешний компьютер будет обращаться? (я еще не вникал в ваш скрин) . Я с эти впервые сталкиваюсь за 15 лет работы с контроллерами Modicon M221 (TWIDO) (от компании Schneider Electric). Там было все очень просто. Настроил внешний порт для связи и работай с памятью ПЛК. Еще раз большое спасибо, что не оставляете меня с моими проблемами по освоению ПЛК ОВЕН и CodeSYSY.
Меня очень заинтересовал программа Owen OPC Server, я понял, что можно через нее моделировать общение по сети с программой ПЛК ОВЕН. Я правильно понял? Если это так, то это вообще здорово!
Моделировать обмен нельзя, можно читать, писать заданные регистры.
Только не с программой, комп соединяется с любым устройством и по TCP/IP, RS485, RS232 по Модбас RTU. В программе Owen OPC Server только настройки адресов и портов задавай. Можно свободно скачать на сайте Овен, из неё и управлять можно ПЛК например.
У меня ПЛК подключён по RS 232 к Codesys, а программа читает, пишет по изернету в локальной сети. Могу Codesys вообще выключить и работать с ПЛК напрямую по изернету.

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

Кстати, в Codesys можно создать визуализацию, и спокойно из неё управлять ПЛК, там можно сделать доступ ко всем регистрам вообще. И нарисовать красиво.

vsa
16.01.2022, 16:54
Подскажите, как можно на языке ST отследить передний фронт появления сигнала на дискретном входе (язык ST)? Имеются ли готовые для этого операторы или нужно этот момент отслеживать чрез свои алгоритмы?

ASo
16.01.2022, 17:06
Через ФБ R_TRIG.

kondor3000
16.01.2022, 17:09
Подскажите, как можно на языке ST отследить передний фронт появления сигнала на дискретном входе (язык ST)? Имеются ли готовые для этого операторы или нужно этот момент отслеживать чрез свои алгоритмы?

Так R_TRIG в биб-ке Standart.lib
R_TRIG(CLK:= , Q=> );

wwtp39
16.01.2022, 21:48
Подскажите, какими методами осуществляется использование одной переменной в разных POU?

kondor3000
17.01.2022, 08:21
Подскажите, какими методами осуществляется использование одной переменной в разных POU?

Переменная объявляется в глобальных или в конфигурации (тоже глобальная) и используйте в любом месте программы, в ФБ, функциях и POU.

vsa
17.01.2022, 15:20
Подскажите, как можно на языке ST выявить первый цикл работы ПЛК? Это мне необходимо для инициализации рабочих переменных после включения ПЛК.

saii
17.01.2022, 16:24
Подскажите, как можно на языке ST выявить первый цикл работы ПЛК? Это мне необходимо для инициализации рабочих переменных после включения ПЛК.


VAR
bFirst : BOOL := TRUE;
END_VAR

IF bFirst THEN
// Инициализация
...

bFirst := FALSE;
END_IF

kondor3000
17.01.2022, 16:28
Подскажите, как можно на языке ST выявить первый цикл работы ПЛК? Это мне необходимо для инициализации рабочих переменных после включения ПЛК.

Flag: BOOL;
_____________________
IF NOT Flag THEN
// Инициализация нужных переменных
Flag:=TRUE;
END_IF

vsa
17.01.2022, 18:11
kondor3000, спасибо. Если несколько раз в программе встречается анализ (Flag) первого цикла ПЛК, то придется следить за тем, где именно осуществлять Flag:=TRUE; Я думал, что имеется готовая функция или системные биты. Еще раз, большое спасибо, что не оставляете мои вопросы без внимания. Вот допишу программу, то начну тормошить форум по поводу настроек конфигурации ПЛК.

Cs-Cs
17.01.2022, 19:41
vsa Можно ещё так вроде бы сделать, как на скриншоте:
58756

W1nn1ep00h
18.01.2022, 10:30
Добрый день. Решил переписать сбор данных с модулей МВ110-224.8А с конфигуратора и перейти на библиотеку из примеров - https://owen.ru/forum/showthread.php?t=13588
Но сразу вопрос, в примере->6 e нас идет считывание параметров типа REAL без индексации(см.рис.1) и перечисление идет с шагом 1 по адресу прибора - 16 + i.
Но в руководстве по параметрам МВ110-8А, в списке оперативных параметров протокола овен идет перечисление по индексам(см.рис.2). Если был бы под рукой модуль и контроллер , то проверил бы, а так возникает вопрос кому верить?
Также возникает вопрос по TimeOut = 50 мс, для опроса каждого индекса по отдельности, это не много ли?
5876158763

kondor3000
18.01.2022, 11:20
Добрый день. Решил переписать сбор данных с модулей МВ110-224.8А с конфигуратора и перейти на библиотеку из примеров - https://owen.ru/forum/showthread.php?t=13588
Но сразу вопрос, в примере->6 e нас идет считывание параметров типа REAL без индексации(см.рис.1) и перечисление идет с шагом 1 по адресу прибора - 16 + i.
Но в руководстве по параметрам МВ110-8А, в списке оперативных параметров протокола овен идет перечисление по индексам(см.рис.2). Если был бы под рукой модуль и контроллер , то проверил бы, а так возникает вопрос кому верить?
Также возникает вопрос по TimeOut = 50 мс, для опроса каждого индекса по отдельности, это не много ли?
5876158763

Оперативные параметры вам не нужны (они не читаются группой, а только по 1), вам нужны регистры измерений, для МВ-1108A это с 0 по 47 регистр. Всего 48 регистров или 96 байт.
Прежде чем перейти к библиотеке, попробуйте мой пример опроса 8А, весь код из 4 строк, в конце первой страницы по ссылке https://owen.ru/forum/showthread.php?t=35094

W1nn1ep00h
18.01.2022, 11:34
Оперативные параметры вам не нужны, вам нужны регистры измерений, для МВ-1108A это с 0 по 47 регистр. Всего 48 регистров или 96 байт.
Прежде чем перейти к библиотеке, попробуйте мой пример опроса 8А, весь код из 4 строк, в конце первой страницы по ссылке https://owen.ru/forum/showthread.php?t=35094

Подождите чтение параметра производится функцией -> OWEN_GET_REAL, в ней есть параметры Name("Имя параметра") и Index("индекс параметра"). При чем тут регистры(я так понимаю, вы про функцию из modbus.lib - MB_RD_HOLD_REGS)?

kondor3000
18.01.2022, 11:39
Подождите чтение параметра производится функцией -> OWEN_GET_REAL, в ней есть параметры Name("Имя параметра") и Index("индекс параметра"). При чем тут регистры(я так понимаю, вы про функцию из modbus.lib - MB_RD_HOLD_REGS)?

Вы хоть поняли, что пример опроса по протоколу Овен, это совсем не Модбас RTU. Оно вам надо? если надо, читайте отличие протокола Овен.

W1nn1ep00h
18.01.2022, 11:54
Вы хоть поняли, что пример опроса по протоколу Овен, это совсем не Модбас RTU. Оно вам надо? если надо, читайте отличие протокола Овен.
Спасибо. Я понял, про что вы. Вы предлагаете свой вариант получения значений, с помощью конфигурации, без пользования библиоткой modbus.lib и считывая все значения. Просто я смотрю уход от стандартной конфигурации и рассматриваю все варианты , какие есть в примерах на форумах. В том числе и по протоколу ОВЕН. Кстати, почему вы так о нем отзываетесь("оно вам надо")?
По сути, вы предлагаете, тоже самое, что считать функцией MB_RD_HOLD_REGS все 48 регистров, но заменив опрос библиотекой, с помощью введения строковых переменных в конфигурацию.

kondor3000
18.01.2022, 12:25
Спасибо. Я понял, про что вы. Вы предлагаете свой вариант получения значений, с помощью конфигурации, без пользования библиоткой modbus.lib и считывая все значения. Просто я смотрю уход от стандартной конфигурации и рассматриваю все варианты , какие есть в примерах на форумах. В том числе и по протоколу ОВЕН. Кстати, почему вы так о нем отзываетесь("оно вам надо")?
По сути, вы предлагаете, тоже самое, что считать функцией MB_RD_HOLD_REGS все 48 регистров, но заменив опрос библиотекой, с помощью введения строковых переменных в конфигурацию.

Я предлагаю попробовать все варианты и ничего не навязываю, когда прочитаете отличия проколов, сами всё поймёте) Лично я потратил бы время с пользой, изучив что нибудь полезное))) А по поводу Стрингов, делал тестирование, естественно на тяжёлой программе с кучей REAL в обмене, у меня получилось, что обмен через библиотеку чуть хуже и менее стабилен. Если сомневаетесь, можете проверить.

W1nn1ep00h
18.01.2022, 17:03
Я предлагаю попробовать все варианты и ничего не навязываю, когда прочитаете отличия проколов, сами всё поймёте) Лично я потратил бы время с пользой, изучив что нибудь полезное))) А по поводу Стрингов, делал тестирование, естественно на тяжёлой программе с кучей REAL в обмене, у меня получилось, что обмен через библиотеку чуть хуже и менее стабилен. Если сомневаетесь, можете проверить.

Спасибо. Еще последний вопрос Polling Time рекомендуемое сколько ставить в конфигурации?

kondor3000
18.01.2022, 17:43
Спасибо. Еще последний вопрос Polling Time рекомендуемое сколько ставить в конфигурации?

У меня в примере стоит 100 мс для МВ8А (быстрее нет смысла), а для МВА-8АС можно 10 мс,
для связи с панелью 10мс везде (UMD для чтения и UMD записи) Скорость естественно 115200, 8N1, RTU

vsa
18.01.2022, 18:41
Приступил к изучению конфигурирования ПЛК. Задача: ПЛК должен быть Slave и по Ethernet соединяется с компьютером (Master). В компьютере стоит готовая программа, умеющая работать с контроллером (Slave) по протоколу Modbus RTU.
Для примера, я сформировал 3 рабочих слова в памяти ввода-вывода контроллера: Rab_Var_0, Rab_Var_1 и Rab_Var_2.
58768
Вопрос: 1. Если внешним компьютером читать эти три регистра, то это адреса 0х00, 0х01 и 0х02?
2. В эти регистры можно записывать и читать данные? Меня насторожило название %QW7..
3. А что делать, если мне требуется 20 - 30 подобных рабочих слов? Может ограничится просто (!) настройкой контроллера на Slave , без распределения рабочих слов в памяти ввода-вывода и осуществлять внешним компьютером запросы к адресам переменных программы? При этом объявить переменные, например, вот так:

VAR_GLOBAL
...
MW15 AT %MW15: WORD; (* Номер последнего пресеченного датчика АО1 *)
MW16 AT %MW16: WORD; (* Номер последнего пресеченного датчика АО1 *)
MW28 AT %MW28: WORD; (* Копирование команд АО в 106 и 108 0-нет 1-да*)
MW31 AT %MW31: WORD; (* Состояние KL1 *)
MW32 AT %MW32: WORD; (* Состояние KL2 *)
MW33 AT %MW33: WORD; (* Состояние KL3 *)
MW60 AT %MW60: TIME; (* Значение времени (в мин) для Состояние KL1 *)
MW62 AT %MW62: TIME; (* Значение времени (в мин) для Состояние KL2 *)
MW64 AT %MW62: TIME; (* Значение времени (в мин) для Состояние KL3 *)
MW70 AT %MW70: WORD; (* Команда для гор. АО1 *)
MW71 AT %MW71: WORD; (* Команда для верт. АО1 *)
MW72 AT %MW72: WORD; (* Текущее состояние АО1 *)
MW73 AT %MW73: WORD; (* Команда для гор. АО2 *)
MW74 AT %MW74: WORD; (* Команда для верт. АО2 *)
MW75 AT %MW75: WORD; (* Текущее состояние АО2 *)
MW77 AT %MW77: WORD; (* Готовность АО1 *)
MW78 AT %MW78: WORD; (* Готовность АО2 *)
...
И делать запросы внешним компьютером слов: например: - %MW62 (0x3E).
Контроллера нет под рукой. Только заказали.
Может у кого-нибудь есть возможность поставить эксперимент на реальном контроллере. Попробуйте, не распределяя рабочие слова в памяти ввода-вывода, внешней программой обратится к какой-нибудь внутренней переменной ПЛК.
У меня в прошлых проектах (совершенно другой контроллер ) такое работало.

vsa
18.01.2022, 19:05
Валенок, не понял вопроса? Мне Slave необходим для связи в внешним компьютером. Я все сделал для этого. Или это не так делается? Я же новичок в этом ПЛК.

vsa
18.01.2022, 23:37
Спасибо за ценные наставления. Обязательно учту. Мне понравилась. А как же все таки с обращением компьютера к внутренним словам программы? Так можно? Или необходимо объявлять слова в памяти ввода-вывода?

vsa
19.01.2022, 08:49
Валенок, Конечно же моя программа не имеет описание рабочих переменных, как я показал на скрине. Я бы и сам помер с такой идентификацией работать. Это я привел для примера.
Тут главная проблема в том, что внешний компьютер много использует рабочих слов из моей программы. И есть даже такое участки памяти моей программы, где компьютер хранит временные значения слов, с которыми я и не работаю.
Вот тут и начались у меня проблемы, как ПЛК ОВЕН должен был описать рабочие переменные для связи с внешним компьютером. Я до этого проекта много лет работал с ПЛК M221 (TWIDO) от Schneider Electric. Так в этих контроллерах, я не описывал никакие рабочие слова для связи с внешним (Mаster) компьютером. Компьютер сам обращался напрямую к моим переменным. Так было просто. А сейчас я перекладываю программу от M221 (IL) на ПЛК ОВЕН (ST). Программа большая, под 4-6 тыс. инструкций IL. И повторюсь, не хотелось бы корректировать сильно программу внешнего компьютера. Для этого я и хотел применить абсолютную адресацию слов.
Под рукой нет контроллера. Я с ним еще ни разу не работал. Так еще раз задаю вопрос. Так можно? Или нет?

In_Da_Cher_A
19.01.2022, 09:57
Так в этих контроллерах, я не описывал никакие рабочие слова для связи с внешним (Mаster) компьютером. Компьютер сам обращался напрямую к моим переменным.скорее всего в тег листе или словаре с переменными тупо стояла галка "доступ по модбас" или "видимость для ОРС", на которую никто не обращает внимания

kondor3000
19.01.2022, 10:43
Напишу про слейв , регистры считаются с 0 адреса, можно добавить хоть 100 хоть 1000 шт. регистров.

Также в Codesys есть свой встроенный Geteway и сервер CodesysOPC.02
Тут встаёт вопрос, сможет ли ваша программа считать данные с CodesysOPC.02 ?

vsa
19.01.2022, 10:47
Программу для ПК и ПЛК разрабатывала одна команда. Мы обговорили регистровый интерфейс взаимодействия - через какие слова будет общение. Я со стороны ПЛК наполнял эти слова значениями, и считывал присланные данные для отработки действий технологического оборудования. А ПК таким образом управлял работой роботизированного комплекса. Если я начну в ПЛК ОВЕН в конфигурационной вкладке подключать слова для взаимодействия, то из будет много! Поэтому я и решил уйти от этого. Просто описать Slave для подключения и пусть компьютер обращается в память ПЛК.
Если это в ПЛК ОВЕН нереально сделать простым способом, то подскажите, как красиво описать в конфигурации большой массив слов 20-40 слов (16 битных).

vsa
19.01.2022, 11:06
kondor3000, у нас нет Скады. Не хотелось бы с этим связывать свой проект. У нас многолетние наработки в области систем управления, как со стороны ПК, так и со стороны ПЛК. Да и сроки поджимают. Я бы не переходил на ОВЕН. Тем более, я еще не видел, как это будет работать в реальных условиях. Мы управляем перемещением роботов (тяжелыми и скоростными) на линии, управляем температурой, работой выпрямителей, и т.п. Наверняка все знают, что в мире производства процессоров происходит какой-то сбой. И наши поставщики контролеров (Шнайдер Электрик) сдвинули сроки поставок ПЛК на июль (!) этого года.

kondor3000
19.01.2022, 11:12
Если это в ПЛК ОВЕН нереально сделать простым способом, то подскажите, как красиво описать в конфигурации большой массив слов 20-40 слов (16 битных).
20-40 это разве массив ? ))) Тут люди по 1000 добавляют)))

Добавьте 20- 40 шт 2 BYTE и дайте им имена, из программы обращайтесь по именам. Адреса будут 0,1,2,3......и т. д.

uncleson
19.01.2022, 13:45
Здравствуйте! Я создал TCP подключение как клиент. Через 300 секунд после отключения кабеля сервер закрывает подключение. Я использую библиотеку CAA NetBase Services и мне, как я это вижу, нужно со стороны клиента закрыть подключение и открыть снова. Для этого я делаю TCPClient.xActiv:=false. Хендлер становится равным нулю. Но xDone этого FB не становится равным true. И при следующем TCPClient.xActiv:=true хендлер остается тем же самым, что при предыдущем подключении. Как можно сбросить Хендлер или возобновить подключение, если того хендлера по которому сейчас обращается FB не существует?
У этой библиотеки нет инструментов типа open или close connection в явном виде, а переписывать все на другой способ долго, и ведь все кроме восстановления связи работает. Спасибо!

kondor3000
19.01.2022, 14:00
Зачем ? Есть 4 BYTE. Меньше тыкать. Вставил 1 штуку, ctrl-c ...

.. нажали ctrl-v, и удерживая и зевая секунд 5..10 получили несколько сотен регистров для слейва. После глянул идентификатор последнего и уточнил сколько конкретно.
Был бы для слейва стринг - вообще дюжина строк и 1К. От конфигурации для слейва ничего больше задания размера области памяти не нужно, и чем больше лопата - тем меньше времени гребсти снег.

В глобальных
XXXX at %QD(*стартового 4 BYTE*) : array [0..yyy] of word; // только 1 (один) %, и всё.
И забыли про конфигурацию напрочь.
И смена платформы - глотнуть пива пока 2 пальца зажали ctrl и v.
.
Человек новичёк в КДC, ему надо 20-40 штук 16 битных переменных (из них несколько масок на 16 бит), зачем ему 32 битные добавлять? Третий раз проект переписывать?
Он вообще проект переносит с другой платформы. Без опыта! И ему программу проще будет увязать по именам переменных. И ещё потом отладить надо! Тем более большая часть уже сделана с Именами
Тут обсуждение идёт 4 день, а дел на 30 сек, даже 40 шт добавить.


Но и эта мутота с регистрами-шмегистрами вообще не упала если вспомнить про структуры. Особенно если делать эквивалентные структуры с другой стороны. А если вдруг всплывет что в КДС2 функ.блок это чистая структура, то можно и фб разместить прям в слейве - это к вопросу как легким движением руки разместить в слейве вообще всё.

Для мастера в конфиге можно делать аналогично но есть скучные нюансы.
А вот тут хотелось бы поподробнее и с примерами. Знаю, ведь не допросишься)))

vsa
19.01.2022, 14:41
Ребята, всем спасибо! Я не ожидал, что хоть кто-то будет меня консультировать! И, главное, все по делу!

vsa
19.01.2022, 19:42
Каким образом можно сохранить значения несколько рабочих слов ПЛК110[M02] после внезапного обесточивания контроллера? Где такие переменные необходимо распределять?

vsa
20.01.2022, 10:56
И опять требуется помощь форума. В программе необходимо установить функциональный блок BLINK (генератор импульсов). Нажимаю F2 (вызываю ассистент вода) и ищу Стандартные блоки:58810
А там нет BLINK. Руками объявляю переменную типом BLINK, а система ругается - "Не известный тип BLINK". Как быть? Как найти функ. блок. BLINK? Использую CoDeSYS V2.3.9.41.

kondor3000
20.01.2022, 10:58
И опять требуется помощь форума. В программе необходимо установить функциональный блок BLINK (генератор импульсов). Нажимаю F2 (вызываю ассистент вода) и ищу Стандартные блоки:58810
А там нет BLINK. Руками объявляю переменную типом BLINK, а система ругается - "Не известный тип BLINK". Как быть? Как найти функ. блок. BLINK? Использую CoDeSYS V2.3.9.41.

Добавить библиотеку Util.lib, через менеджер библиотек.

vsa
20.01.2022, 11:27
kondor3000, спасибо! Нашел Util.lib (она была не подключена) и библиотеку подключил . Отлично все получается. Лампочки заморгали. А мне начинает нравится CoDeSYS!

Николай Суриков
20.01.2022, 11:33
Добавить библиотеку Util.lib, через менеджер библиотек.

И еще надо помнить, что стандартный BLINK содержит ошибку.
Если во время OUT=TRUE перевести IN в FALSE, то OUT останется TRUE.

vsa
20.01.2022, 12:46
Действительно, TRUE осталось после отключения Blink-блока. Пришлось насильно сбрасывать TRUE в FALSE после отключения этого генератора импульсов. Спасибо за эту информацию. Тем более, что у меня данный выход завязан с индикатором "Авария" на лицевой стороне шкафа СУ.

kondor3000
20.01.2022, 13:37
И еще надо помнить, что стандартный BLINK содержит ошибку.
Если во время OUT=TRUE перевести IN в FALSE, то OUT останется TRUE.

Это легко исправляется одним AND


b1:BOOL;
b2:BOOL;
__________________________________________________ __

BLINK1(ENABLE:=b1 , TIMELOW:=t#1s, TIMEHIGH:=t#1s , OUT=>b2 );
b2:=b1 AND b2;

Евгений Кислов
20.01.2022, 13:43
И еще надо помнить, что стандартный BLINK содержит ошибку.
Если во время OUT=TRUE перевести IN в FALSE, то OUT останется TRUE.

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

58819

Citroengsa
20.01.2022, 14:32
Добрый день!
Подскажите пж в чем ошибка? Подключил МК110-220.4К.4Р к ПЛК110-30М по RS-485. Настроил, написал простую программу опроса- не работает. Еще подскажите как файл программы в сообщение вставить? Спасибо!

kondor3000
20.01.2022, 14:37
Добрый день!
Подскажите пж в чем ошибка? Подключил МК110-220.4К.4Р к ПЛК110-30М по RS-485. Настроил, написал простую программу опроса- не работает. Еще подскажите как файл программы в сообщение вставить? Спасибо!

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

vsa
20.01.2022, 17:26
Что-то не корректно у меня работает таймер TON. самопроизвольно перезапускается. Проверяю вез контроллера в эмуляторе. Поясните, что я не правильно делаю:

var
TM0:TON;
PT_TM0:TIME;
Flag:BOOL;
....
Flag := TRUE;
PT_TM0:=T#120ms;
....
IF Flag THEN TM0(IN:=TRUE,PT:=PT_TM0); (* Включаю таймер *)
...
IF TM0.Q THEN
TM0(IN:=FALSE); (* Выключаю таймер *)
Flag:=FALSE; (* Чтобы не запускать тайме снова *)
...

kondor3000
20.01.2022, 17:30
Что-то не корректно у меня работает таймер TON. самопроизвольно перезапускается. Проверяю вез контроллера в эмуляторе. Поясните, что я не правильно делаю:

var
TM0:TON;
PT_TM0:TIME;
Flag:BOOL;
....
Flag := TRUE;
PT_TM0:=T#120ms;
....
IF Flag THEN TM0(IN:=TRUE,PT:=PT_TM0); (* Включаю таймер *)
...
IF TM0.Q THEN
TM0(IN:=FALSE); (* Выключаю таймер *)
Flag:=FALSE; (* Чтобы не запускать тайме снова *)
...

Экземпляр таймера должен быть вызван вне конструкции IF... THEN

vsa
20.01.2022, 17:32
var
TM0:TON;
PT_TM0:TIME;
Flag:BOOL;
....
Flag := TRUE;
PT_TM0:=T#120ms;
....
TM0(IN:=Flag,PT:=PT_TM0); (* Включаю таймер *)
...
IF TM0.Q THEN
Flag:=FALSE; (* Чтобы не запускать тайме снова *)

Так?

kondor3000
20.01.2022, 17:47
var
TM0:TON;
PT_TM0:TIME;
Flag:BOOL;
....
Flag := TRUE;
PT_TM0:=T#120ms;
....
TM0(IN:=Flag,PT:=PT_TM0); (* Включаю таймер *)
...
IF TM0.Q THEN
Flag:=FALSE; (* Чтобы не запускать тайме снова *)

Так?


PT_TM0:=T#120ms;

TM0(PT:=PT_TM0); (* Вызов экземпляра таймера *)

IF Flag THEN TM0.IN:=TRUE; (* Включаю таймер *)
END_IF

IF TM0.Q THEN
TM0.IN:=FALSE; (* Выключаю таймер *)
Flag:=FALSE; (* Чтобы не запускать таймер снова *)
END_IF

vsa
20.01.2022, 18:03
kondor3000, нет слов! Большущее спасибо!

vsa
20.01.2022, 18:21
Валенок, этот таймер многократно включается в зависимости от ситуации на линии. И каждый раз с различной настройкой PT (берется из массива).

vsa
20.01.2022, 18:35
Я это знал, но в программе таймер перезапускался.
Вопрос: как восстановить окно с ошибками? Что-то нажал и теперь я не вижу внизу сообщения по поводу компиляции.
58824

vsa
20.01.2022, 18:50
Валенок, как на счет восстановления окошка с ошибками? Я бы почитал про эту ситуацию, но не знаю где? А тут профильная ветка.

In_Da_Cher_A
20.01.2022, 19:40
Валенок, как на счет восстановления окошка с ошибками? Я бы почитал про эту ситуацию, но не знаю где? А тут профильная ветка."Окно" - "Сообщения" - поставить/снять галку

kondor3000
20.01.2022, 19:41
Валенок, как на счет восстановления окошка с ошибками?

Shift + Esc нажмите.

vsa
20.01.2022, 19:44
А я всю голову сломал. Спасался клавишей F4. Теперь буду знать.

Citroengsa
21.01.2022, 11:27
Вставить проекты можно в расширенном режиме. Проверяйте настройки, больше без проектов и скринов ничего подсказать не получится.
Прикрепил файл проекта. В эмуляторе работает а в реалии - нет. Посмотрите где-то ошибка в конфигурации.Мк 110 работает, связь показывает, с компьютером связывается с контроллером тоже но данные с входа на выход не передает.

ASo
21.01.2022, 11:38
Валенок, как на счет восстановления окошка с ошибками? Я бы почитал про эту ситуацию, но не знаю где? А тут профильная ветка.

<Shift>+<Esc>
10 символов.

In_Da_Cher_A
21.01.2022, 14:14
Посмотрите где-то ошибка в конфигурации.ну и где же она может быть?:) что же написано в мануале на модуль? и что же сделано в конфиге?

Citroengsa
21.01.2022, 14:29
Прикрепил файл проекта. В эмуляторе работает а в реалии - нет. Посмотрите где-то ошибка в конфигурации.Мк 110 работает, связь показывает, с компьютером связывается с контроллером тоже но данные с входа на выход не передает.
изменил регистры у МК110 преобразовал ворд в байт потом упаковал и распаковал. Думал заработает. Но- нет. Подскажите пж. Что не так?

kondor3000
21.01.2022, 14:32
Подключил МК110-220.4К.4Р к ПЛК110-30М по RS-485. Настроил, написал простую программу опроса- не работает.
Прикрепил файл проекта. В эмуляторе работает а в реалии - нет. Посмотрите где-то ошибка в конфигурации.Мк 110 работает, связь показывает, с компьютером связывается с контроллером тоже но данные с входа на выход не передает.
Это не правильно, вы добавили 8 Bit Input, 8 Bit Output и пытаетесь читать биты, которые в другой области памяти.
Вам надо добавить Register Input и Register Output. Это будут маски входа и выхода, назвать их например mask_In и mask_Out. Маску входов надо разложить на биты в программе, например на ST
bit0:= mask_In.0; bit1:= mask_In.1; bit2:= mask_In.2; bit3:= mask_In.3; Далее полученные биты можно отправить например на маску выходов, это так mask_Out.0:=bit0; mask_Out.1:=bit1; и и. д.
В программе на CFC присваивание идёт наоборот mask_In.0 => bit0 ____________ bit0 =>mask_Out.0
Адреса регистров у вас тоже неправильно, 11 и 12 регистры, это адреса в HEX, в десятиричной системе это 17 и 18. Смотри скрин 58838
А в UMD ( Универсал Модбас Девайс) поставить адрес своего модуля и режим Work Mode => Both

Николай Суриков
21.01.2022, 14:38
изменил регистры у МК110 преобразовал ворд в байт потом упаковал и распаковал. Думал заработает. Но- нет. Подскажите пж. Что не так?
Как-то так.

In_Da_Cher_A
21.01.2022, 15:13
изменил регистры у МК110 где же изменил? 11 и 12 остались. а в документации что написано?

ну гляжу старшие товарищи уже насовали в тележку за невнимательность при чтении документации :)

Citroengsa
21.01.2022, 15:15
Как-то так.

загрузил Вашу программу- на выход ПЛК данные с МК110 не передаются.

Citroengsa
21.01.2022, 15:19
где же изменил? 11 и 12 остались. а в документации что написано?

ну гляжу старшие товарищи уже насовали в тележку за невнимательность при чтении документации :)

адреса в десятичном?

Citroengsa
21.01.2022, 15:28
там в хех а там в дес. Да, невнимательность. Спасибо. Чтение из МК110 работает А запись в МК110 не работает все равно.

Citroengsa
21.01.2022, 15:58
Это не правильно, вы добавили 8 Bit Input, 8 Bit Output и пытаетесь читать биты, которые в другой области памяти.
Вам надо добавить Register Input и Register Output. Это будут маски входа и выхода, назвать их например mask_In и mask_Out. Маску входов надо разложить на биты в программе, например на ST
bit0:= mask_In.0; bit1:= mask_In.1; bit2:= mask_In.2; bit3:= mask_In.3; Далее полученные биты можно отправить например на маску выходов, это так mask_Out.0:=bit0; mask_Out.1:=bit1; и и. д.
В программе на CFC присваивание идёт наоборот mask_In.0 => bit0 ____________ bit0 =>mask_Out.0
Адреса регистров у вас тоже неправильно, 11 и 12 регистры, это адреса в HEX, в десятиричной системе это 17 и 18. Смотри скрин 58838
А в UMD ( Универсал Модбас Девайс) поставить адрес своего модуля и режим Work Mode => Both

Спасибо за развернутый ответ но мало что понял. Первый девайс на ПЛК. Буду разбираться. Как сложно в CS!!!

Citroengsa
21.01.2022, 16:06
Если 10-й рег прочитать - что там ?
РЭ, 8.6, про DIPы

десятый регистр (16дес)=32

Citroengsa
21.01.2022, 16:49
10h = 32 ? => упр по сети
Выходы <> входы что ли ?

выходит так. Хотел выходами по сети управлять от ПЛК. Переделал программу. Чтение работает, запись нет. Чего- то я не понимаю опять.

kondor3000
21.01.2022, 16:53
там в хех а там в дес. Да, невнимательность. Спасибо. Чтение из МК110 работает А запись в МК110 не работает все равно.

Для Register Output надо поставить функцию записи 0х10, она по умолчанию 0х06, у вас 0х71

Ну а с точками разобрались)))

vsa
21.01.2022, 19:31
У меня в PROGRAM PLC_PRG вызываются поочередно функционально законченные POU. И некоторые POU используются одни те же константы.
Как объявить глобальные константы (VAR_GLOBAL CONSTANT ) для правильной работы CASE?
....
VAR CONSTANT
Poz_KL_11:INT :=2;
Poz_KL_21:INT:=3;
Poz_KL_31:INT :=4;
Poz_Pult_11: INT:=7;
Poz_Pult_21:INT:=9;
END_VAR
...

IF Down_1 AND DN_1 THEN
CASE MST_1 OF
Poz_KL_11 : KL1:=TRUE; (* ON KL1*)
Poz_KL_21 : KL2:=TRUE; (* ON KL2*)
Poz_KL_31 : KL3:=TRUE; (* ON KL3*)
Poz_Pult_11: Pult.1:=TRUE; (* ON Pult1*)
Poz_Pult_21: Pult.2:=TRUE; (* ON Pult21*)
END_CASE
END_IF

Объявить VAR CONSTANT в текущем POU могу и все работает, но эти константы требуются в других POU. Не понимаю, куда вставлять, чтобы эти константы были видны и другим POU ? Как создать глобальные константы в проекте?

petera
21.01.2022, 19:38
У меня в PROGRAM PLC_PRG вызываются поочередно функционально законченные POU. И некоторые POU используются одни те же константы.
Как объявить глобальные константы (VAR CONSTANT GLOBAL) для правильной работы CASE?
....
VAR CONSTANT
Poz_KL_11:INT :=2;
Poz_KL_21:INT:=3;
Poz_KL_31:INT :=4;
Poz_Pult_11: INT:=7;
Poz_Pult_21:INT:=9;
END_VAR
...

IF Down_1 AND DN_1 THEN
CASE MST_1 OF
Poz_KL_11 : KL1:=TRUE; (* ON KL1*)
Poz_KL_21 : KL2:=TRUE; (* ON KL2*)
Poz_KL_31 : KL3:=TRUE; (* ON KL3*)
Poz_Pult_11: Pult.1:=TRUE; (* ON Pult1*)
Poz_Pult_21: Pult.2:=TRUE; (* ON Pult21*)
END_CASE
END_IF

Объявить VAR CONSTANT в текущем POU могу и все работает, но эти константы требуются в других POU. Не понимаю, куда вставлять, чтобы эти константы были видны и другим POU ? Как создать глобальные константы в проекте?

Вкладка Ресурсы, Глобальные переменные
58846 58848

ЗЫ
Или при объявлении новой переменной в теле программы
58847

vsa
21.01.2022, 19:47
petera, понял Ваш скрин.

petera
21.01.2022, 19:49
petera, эти вкладки я знаю. И как это выглядит?
VAR_GLOBAL
....
VAR CONSTANT GLOBAL
....
END_VAR
END_VAR

Так? НЕ идет.

58849
10 символов

vsa
21.01.2022, 19:56
Извините, поспешил с выводами. Все заработало! Спасибо за урок!

vsa
22.01.2022, 14:24
И опять требуется помощь форума.
Представьте, что в программе имеется переменная, например, PAUSE :

VAR RETAIN
PAUSE: TIME;
END_VAR

И мне необходимо в эту переменную (PAUSE) иногда записывать значение внешним компьютером через регистр ввода. Т.к. тип TIME требует 4 байта, то и регистр ввода тоже должен быть DWORD.
Предлагаю два варианта настроек. Это я сделал для примера.
58857
Первый регистр явно не для типа TIME, а второй 32 бита, как раз для типа TIME.
Подскажите, как правильнее вводить внешним компьютером значение времени (минуты) в рабочее слово программы? И как в 32 битах размещается значение, например, - 4 минуты.
А может имеется конвертор INT->TIME?

ASo
22.01.2022, 14:42
Time==dword.

kondor3000
22.01.2022, 15:05
Первый регистр явно не для типа TIME, а второй 32 бита, как раз для типа TIME.
Подскажите, как правильнее вводить внешним компьютером значение времени (минуты) в рабочее слово программы? И как в 32 битах размещается значение, например, - 4 минуты.
А может имеется конвертор INT->TIME?
Конвертировать можно почти все типы, но желательно соблюдать размерность в байтах. Например INT_TO_WORD

Для времени подходит конвертер DWORD_TO_TIME, и обратно. В DWORD, время в секундах и мили секундах 4 минуты=4*60*1000= 240сек*1000= 240000,
в TIME T#0h4m0s0ms

vsa
22.01.2022, 15:18
kondor3000, спасибо. Буду пробовать. А где Вы такую информацию берете? Подскажите. Я прорыл эту тему, но не смог подобное найти.

kondor3000
22.01.2022, 15:25
kondor3000, спасибо. Буду пробовать. А где Вы такую информацию берете? Подскажите. Я прорыл эту тему, но не смог подобное найти.
Всё есть в справке по F1 , или например можно выделить TIME и нажать F1

vsa
22.01.2022, 15:29
И в продолжении вопроса. А как быть, если внешний компьютер умеет только обмениваться с ПЛК 16-и битными словами. Как умудрится передать 32 бита? Например, %QD7.2.0 (DWORD). Возможно частями? Подскажите, как? Как понять, где адрес младшего WORD, а где старший WORD?

kondor3000
22.01.2022, 15:42
И в продолжении вопроса. А как быть, если внешний компьютер умеет только обмениваться с ПЛК 16-и битными словами. Как умудрится передать 32 бита? Например, %QD7.2.0 (DWORD). Возможно частями? Подскажите, как? Как понять, где адрес младшего WORD, а где старший WORD?

Почему только 16 битными? В слейве есть и 2 байтные и 4 байтные и флоат, выбирайте что надо и передавайте,
в слейве 2 байт 1 регистр, 4 байт 2 регистра, считаете с 0 адреса. Все адреса известны.

В мастере ещё проще, там прямо адрес регистра можно задать в 10-ричном формате.
Если вы флоат прочитали и получили 2.3*e-38, понятно что регистры переставлены.

vsa
22.01.2022, 15:44
Я понял, как это можно сделать. Распределить, например, %QW 7.1.0 и в него записывать "минуты"*60. А при получении в ПЛК умножать еще на 1000 (MW60:=INT_TO_TIME(%QW 7.1.0)*1000 . Все получается! Или так не красиво? Меня же только минуты интересуют.

vsa
22.01.2022, 15:49
Почему только 16 битными? В слейве есть и 2 байтные и 4 байтные и флоат, выбирайте что надо и передавайте,
в слейве 2 байт 1 регистр, 4 байт 2 регистра, считаете с 0 адреса. Все адреса известны.

Вот пример конфигурации:
Modbus
%QW7.1.0
%QD7.2.0

Это 0, 1 и 2 адреса 16-и битных слов? Правильно?

kondor3000
22.01.2022, 15:54
С временем правильно.
Зачем вы опять эти % везде лепите? У вас в слейве первые 2 BYTE - 0 регистр, вторые 2 BYTE - 1 регистр

vsa
22.01.2022, 15:57
С временем правильно.
Зачем вы опять эти % везде лепите? У вас в слейве первые 2 BYTE - 0 регистр, вторые 2 BYTE - 1 регистр

Возможно я ошибаюсь, но я (для примера) распределил два регистра:
58861
А там стоят %QW и %QD. Я и привожу их для примера. Или я что-то не то делаю?

kondor3000
22.01.2022, 17:52
Возможно я ошибаюсь, но я (для примера) распределил два регистра:
58861
А там стоят %QW и %QD. Я и привожу их для примера. Или я что-то не то делаю?

Ну и что, это распределение внутренней памяти ПЛК, вам на неё пофиг. На разных ПЛК могут быть разные буквы.
А вот, что надо помнить, это все 4 байтные переменные должны быть с чётными адресами. 2, 4 , 6, 8, 10.

Если вы добавляете 5 шт 2 байт, то адреса будут с 0 по 4 , а потом поставите 4 байт или флоат, у него будет адрес не 5 как кажется должно быть, а 6.
Чтобы не путаться, лучше добавить 6 шт 2 байт, адреса с 0 по 5, и флоат получится с адресом 6, следующий флоат с адресом 8.

kondor3000
22.01.2022, 23:22
Я понял, как это можно сделать. Распределить, например, %QW 7.1.0 и в него записывать "минуты"*60. А при получении в ПЛК умножать еще на 1000 (MW60:=INT_TO_TIME(%QW 7.1.0)*1000 . Все получается! Или так не красиво? Меня же только минуты интересуют.

Уточнение по поводу расчёта времени из минут.

w : INT:=4 ; (* Время в минутах *)
t1 : TIME ;
t2 : TIME ;
________________________________
t1:=INT_TO_TIME (w *60*1000); (* Расчёт времени - так тоже можно, ограничение 32767 минут *)

t2:=DWORD_TO_TIME ((INT_TO_DWORD (w))*60*1000) ; (* Расчёт времени -со всеми преобразованиями, ограничение 32767 минут *)

vsa
23.01.2022, 09:31
Уточнение по поводу расчёта времени из минут.

w : INT:=4 ; (* Время в минутах *)
t1 : TIME ;
t2 : TIME ;
________________________________
t1:=INT_TO_TIME (w *60*1000); (* Расчёт времени - так тоже можно, ограничение 32767 минут *)

t2:=DWORD_TO_TIME ((INT_TO_DWORD (w))*60*1000) ; (* Расчёт времени -со всеми преобразованиями, ограничение 32767 минут *)


Красиво! Обязательно это буду использовать у себя в программе.

kondor3000
23.01.2022, 11:06
что же так сложно-то
t1 := t#1m * w

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

vsa
23.01.2022, 13:03
Еще раз, всем спасибо за ценный наставления. Программа написана. Пока не трогал сетевые регистры обмена. Отлаживаю в симуляторе. Все получается. На днях должен появится контроллер и модули расширения к нем (ПЛК110-24.60.Р-М[M02], МУ110-24.16Р и МУ110-24.16ДН.). Вот тут я опять начну штурмовать ваш опыт!
Вопрос: каким образом в CoDeSYS можно посмотреть, сколько памяти моя программа заняла в контроллере?

vigorts
23.01.2022, 17:19
Добрый день!
Подскажите пожалуйста аналог Selchgf из OL. На ST не получается, на CFC линий задержек не нашёл. В общем знаний категорически не хватает.

vigorts
23.01.2022, 20:16
Если знаний не хватает не надо искать готовое, нужно разбиратся с базовой частью.
Сформулируйте что хотите ? Принять из кучи то, что поменялось ? Синхронизировать кучу переменных ?

Синхронизировать переменные.

vigorts
23.01.2022, 21:09
Ну, словами опишите - что это

Блок синхронизации. При изменении значения внутренней переменной, в сетевую записывается это же значение и наоборот.

petera
23.01.2022, 21:22
Блок синхронизации. При изменении значения внутренней переменной, в сетевую записывается это же значение и наоборот.

А внутренняя переменная зачем?
Используй в программе сразу сетевую переменную

vigorts
23.01.2022, 21:28
А внутренняя переменная зачем?
Используй в программе сразу сетевую переменную

На ПЛК73 с экрана можно её менять?

vigorts
23.01.2022, 21:33
Всем спасибо!

Citroengsa
24.01.2022, 09:07
Для Register Output надо поставить функцию записи 0х10, она по умолчанию 0х06, у вас 0х71

Ну а с точками разобрались)))

Спасибо большое всем кто не поленился ответить на вопросы и разобраться. Все работает.

kondor3000
24.01.2022, 14:10
Еще раз, всем спасибо за ценный наставления. Программа написана. Пока не трогал сетевые регистры обмена. Отлаживаю в симуляторе. Все получается. На днях должен появится контроллер и модули расширения к нем (ПЛК110-24.60.Р-М[M02], МУ110-24.16Р и МУ110-24.16ДН.). Вот тут я опять начну штурмовать ваш опыт!
Вопрос: каким образом в CoDeSYS можно посмотреть, сколько памяти моя программа заняла в контроллере?

Вам ещё понадобится адаптер интерфейса RS-485/USB (например, ОВЕН АС4 или подобный) с помощью программы «Конфигуратор М110» проверить (изменить адреса МВВ) и протокола. Перезагрузить по питанию МВВ.
С модуля ввода считать маску, разложить её на биты через точку.
С выходов собрать биты в маску и отправить на модуль вывода. Если почитать руководство, даже вопросов не должно возникнуть)
Кстати модуль ввода называется МВ110-24.16ДН, а не МУ.

vsa
24.01.2022, 18:55
Я к этому готов. Правда, ни разу такими операциями не занимался. Это я про конфигуратор. Буду спрашивать. Сейчас рисую принципиальную схему системы управления. Немного не привычно разводить от ПЛК110 и его модулей проводники к клеммникам. Я так и не понял, что это за контакты s/s (5,6). И как я должен воспользоваться контактами GND1 (45) и GND2 (50). Наверно, это для экрана витой пары RS-485?
И еще, у меня в проекте ПЛК, одна из подзадач - управление электроклапанами (вода). Я в своих предыдущих системах нагружал релейный выход контроллера. А тут, как ПЛК110 посмотрит на эту затею? Я на всякий случай поставил разделительное реле.

kondor3000
24.01.2022, 19:19
Я к этому готов. Правда, ни разу такими операциями не занимался. Это я про конфигуратор. Буду спрашивать. Сейчас рисую принципиальную схему системы управления. Немного не привычно разводить от ПЛК110 и его модулей проводники к клеммникам. Я так и не понял, что это за контакты s/s (5,6). И как я должен воспользоваться контактами GND1 (45) и GND2 (50). Наверно, это для экрана витой пары RS-485?
И еще, у меня в проекте ПЛК, одна из подзадач - управление электроклапанами (вода). Я в своих предыдущих системах нагружал релейный выход контроллера. А тут, как ПЛК110 посмотрит на эту затею? Я на всякий случай поставил разделительное реле.

В конфигураторе все просто до безобразия, можете отрыть его офлайн и посмотреть)
Схемы подключения входов, выходов и вообще ПЛК, есть на сайте, в том числе контакты s/s (5,6), а так же можно скачать РЭ https://owen.ru/product/plk110_m02/connection
В разделе МВВ, можно скачать схемы и руководства для МВВ. https://owen.ru/catalog/moduli_vvoda_vivoda
Контакты GND1 (45) и GND2 (50) это экраны витой пары RS-485-1, RS-485-2.

Клапана просто отрываются, закрываются или есть ШИМ ? Параметры реле опять же в руководстве.

vsa
24.01.2022, 19:59
Клапана просто отрываются, закрываются или есть ШИМ ? Параметры реле опять же в руководстве.

Клапаны работают без ШИМ. Подаем 220В - клапан открылся, сняли напряжение - клапан закрылся.

vsa
24.01.2022, 20:05
Схемы подключения входов, выходов и вообще ПЛК, есть на сайте, в том числе контакты s/s (5,6), а так же можно скачать РЭ https://owen.ru/product/plk110_m02/connection


Спасибо! Я понял что такое s/s! Это контакт относительно которого подаются сигналы на входы ПЛК. На моих прежних контроллерах такой контакт обозначался COM.

vsa
24.01.2022, 21:03
Это точно! Я очень благодарен форуму, что за короткое время "въехал" в новое для меня изделие. И оно мне, пока, нравится. Я тут в соседней ветке по частотным преобразователям спросил несколько вопросов, но это "небо и земля" по отношению к вашим ответам. Я до сих пор не понял их ответы. Ничего конкретного. А от их ответов зависит заказывать нам ЧПВ-1 (8 шт.) или нет в ОВЕН. Тем более, что на примете хорошая фирма по изготовлению подобных частотных преобразователей предлагает свою продукцию. Наверно буду у них заказывать.

kondor3000
24.01.2022, 22:12
Это точно! Я очень благодарен форуму, что за короткое время "въехал" в новое для меня изделие. И оно мне, пока, нравится. Я тут в соседней ветке по частотным преобразователям спросил несколько вопросов, но это "небо и земля" по отношению к вашим ответам. Я до сих пор не понял их ответы. Ничего конкретного. А от их ответов зависит заказывать нам ЧПВ-1 (8 шт.) или нет в ОВЕН. Тем более, что на примете хорошая фирма по изготовлению подобных частотных преобразователей предлагает свою продукцию. Наверно буду у них заказывать.

С ПЧВ Овен не работал, агитировать не буду. Смотрел мельком, там всё просто, даже с программируемого реле можно управлять по 485,
нужно всего 3-4 регистра управления и 3 регистра параметров ток, частота и т.д. Есть и видео и примеры и на ПЛК и на ПР.
Сергей0308 очень грамотный и всегда помогает.

Непонятно зачем вам вообще выходы ПЛК использовать?
Да и кнопками просто, старт 1-0, реверс 1-0 переключение через стоп, то есть 0.

vsa
25.01.2022, 09:01
С ПЧВ я работаю с 2005 года. Много проектов было реализовано, где управлялось по RS-485 (Modbus) интерфейсу до 2-8 частотников. Писал функции общения с внутренними регистрами на IL. В первых проектах в программе сам формировал таблицы Modbus под конкретную функцию запроса и ее пересылал ПЧВ. Но с годами эксплуатации наших СУ выявилась неприятная ситуация - выходил из строя порт RS-485 на одном из ПЧВ. И главное, непонятно по какой причине. Все находилось в одном шкафу. Восстановление работоспособности всей системы управления затруднялось удаленностью расположения объекта от нас. Мы по всей стране внедряем свои разработки. И было решено перейти на прямое управление ПЧВ. Всего требовалось три (!) провода для управления ПЧВ: FW, RV и увеличение скорости (заданное значение). Программа ПЛК, в нашем случае, стала проще . А главное, система СУ стала не "убиваемая".

kondor3000
25.01.2022, 09:07
С ПЧВ я работаю с 2005 года. Много проектов было реализовано, где управлялось по RS-485 (Modbus) интерфейсу до 2-8 частотников. Писал функции общения с внутренними регистрами на IL. В первых проектах в программе сам формировал таблицы Modbus под конкретную функцию запроса и ее пересылал ПЧВ. Но с годами эксплуатации наших СУ выявилась неприятная ситуация - выходил из строя порт RS-485 на одном из ПЧВ. И главное, непонятно по какой причине. Все находилось в одном шкафу. Восстановление работоспособности всей системы управления затруднялось удаленностью расположения объекта от нас. Мы по всей стране внедряем свои разработки. И было решено перейти на прямое управление ПЧВ. Всего требовалось три (!) провода для управления ПЧВ: FW, RV и увеличение скорости (заданное значение). Программа ПЛК, в нашем случае, стала проще . А главное, система СУ стала не "убиваемая".
Ну во первых не три провода, а 4 как минимум, общий тоже нужен.
Система может и неубиваемая, а если авария? Как ПЛК узнает и отработает? Двигатель сгорит (коротнёт), фаза отвалится, реле залипнет, да ещё что угодно может быть.

vsa
25.01.2022, 10:43
Вы правы, 4. У меня и 5-й присутствует для аварийной остановки работы двигателя.
Вопрос по ПЛК: а по дискретным входам имеется фильтрация сигнала или мне нужно программно реализовывать ?

vsa
25.01.2022, 13:34
Пишу программные фильтры для некоторых помеховосприимчивых цепей. И столкнулся с интересной (для меня) ситуацией.

TM_Kn_Fw_1:TON;
Kn_Fw_1:BOOL;
Flag_Kn_Fw_1:BOOL;
...
TM_Kn_Fw_1(PT:=T#100ms);
IF NOT Kn_Fw_1 THEN
Flag_Kn_Fw_1:=FALSE;
END_IF
TM_Kn_Fw_1.IN:=Kn_Fw_1;
IF TM_Kn_Fw_1.Q THEN
Flag_Kn_Fw_1:=TRUE;
END_IF
Запускаю. Устанавливаю Kn_Fw_1 в <TRUE>
И вижу, что Flag_Kn_Fw_1 постоянно находится в <FALSE>. Хотя TM_Kn_Fw_1.Q = <TRUE>.
Нигде в программе Flag_Kn_Fw_1не изменяет свое состояние, а только используется в операторах IF.

Всю голову сломал. Т.к. подобные куски программы отлично работали.
И тут я сокращаю размер идентификатора Flag_Kn_Fw_1 до F_Kn_Fw_1. И, о чудо! Все пошло. Неужели в CodeSYS имеются ограничения по длине названий переменных?
Проясните ситуацию. Почему такое может быть?

capzap
25.01.2022, 13:42
Пишу программные фильтры для некоторых помеховосприимчивых цепей. И столкнулся с интересной (для меня) ситуацией.

TM_Kn_Fw_1:TON;
Kn_Fw_1:BOOL;
Flag_Kn_Fw_1:BOOL;
...
TM_Kn_Fw_1(PT:=T#100ms);
IF NOT Kn_Fw_1 THEN
Flag_Kn_Fw_1:=FALSE;
END_IF
TM_Kn_Fw_1.IN:=Kn_Fw_1;
IF TM_Kn_Fw_1.Q THEN
Flag_Kn_Fw_1:=TRUE;
END_IF
Запускаю. Устанавливаю Kn_Fw_1 в <TRUE>
И вижу, что Flag_Kn_Fw_1 постоянно находится в <FALSE>. Хотя TM_Kn_Fw_1.Q = <TRUE>.
Нигде в программе Flag_Kn_Fw_1не изменяет свое состояние, а только используется в операторах IF.

Всю голову сломал. Т.к. подобные куски программы отлично работали.
И тут я сокращаю размер идентификатора Flag_Kn_Fw_1 до F_Kn_Fw_1. И, о чудо! Все пошло. Неужели в CodeSYS имеются ограничения по длине названий переменных?
Проясните ситуацию. Почему такое может быть?
у Вас лимитное подключение к КДС? Не пробовали вместо того, чтоб написать сюда, изменить обратно переменную или сделать более длинное имя и проверить в эмуляторе или на железе?

vsa
25.01.2022, 13:45
У меня пока эмулятор.

kondor3000
25.01.2022, 14:28
Пишу программные фильтры для некоторых помеховосприимчивых цепей. И столкнулся с интересной (для меня) ситуацией.


Есть же фильтры в настройках дискретных входов, измените с 10 до 100 и всё)

vsa
25.01.2022, 14:45
Где можно узнать, что за ошибка появляется при активации эмулятора?
58915

kondor3000
25.01.2022, 15:02
Где можно узнать, что за ошибка появляется при активации эмулятора?
58915

Все ошибки в нижнем окне пишутся, а что это за программа?

vsa
25.01.2022, 15:14
Эта ошибка появляется только при активизации эмулятора! Но как только делаю пуск эмулятору, то ошибка исчезает. А фрагмент программы в #8498. Я воюю с переменными программного фильтра.
А после компиляции внизу вот такое окно
58916

kondor3000
25.01.2022, 15:19
Эта ошибка появляется только при активизации эмулятора! Но как только делаю пуск эмулятору, то ошибка исчезает. А фрагмент программы в #8498. Я воюю с переменными программного фильтра.
А после компиляции внизу вот такое окно
58916

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

capzap
25.01.2022, 15:42
Я воюю с переменными программного фильтра.
может Вам уже пора узнать что существует библиотека oscat.de где можно почерпнуть много нового для себя, включая и фильтрацию всякую

vsa
25.01.2022, 16:12
Валенок, Вы правы. Все перезагрузил и ошибка исчезла.

vsa
25.01.2022, 16:59
Весь день сижу с такой проблемой. Фрагмент программы прикладывается:
58918
Имеется фрагмент в программе (PCL_PRG), где я обрабатываю фильтрами 8 входных сигналов (29-36).
В эмуляторе начинаю подавать сигналы на MODUL_IN.0-MODUL_IN.7. Все работает, кроме блока 45-48
Почему-то строки 45-48 не корректно работают. Переменная Flag_Kn_Rv_1 всегда находится в состоянии FALSE.
Но если закрыть скобками (* ...*) строки 51-54, то все работает.
НО (!) если не блокировать 51-54 и начинаем работать с этим же блоком (MODUL_IN.2 < TRUE>), то этот блок работает и за одно Flag_Kn_Rv_1 переходит в <TRUE>.
Прекрестными ссылками проконтролировал все флаги из этого фрагмента и нигде эти рабочие флаги не изменяются в основной программе.
Не понимаю, что происходит?

kondor3000
25.01.2022, 17:56
Для начала сделайте опять Очистить всё, Компилировать всё.
Если не поможет, сделайте экспорт одного POU (нерабочего функционального блока) и выложите.

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

Вообще, всё это надо было вынести в отдельный ФБ ( фильтр сигналов) и отлаживать будет удобней.