PDA

Просмотр полной версии : разные вопросы новичка



Страницы : 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15

Валенок
25.12.2022, 00:03
Изначально стояла задача вывести на экран номер аварии цифрой, соответственно, если несколько аварий включаются одновременно - на экран выводятся несколько цифр подряд.
64795
Варианты:
1.
Циклически номера текущих аварий прям текстом - это же понятней безликих цифирей
Дин.текст рулит
(Сергей0308 - выше сказал)

2.
Хоцца все сразу : 8 буль.текстов и (2456) в виде "-2-456--" . Даже как-то кошерней. Цифры на своих местах
(распоковать биты в були нужно будет)

3.
Уперся за каким-то именно десятичный (да еще и обратный вид) - да накой степени и квадратики - то ?

функция индус : udint
инпут
маска //аварий
--
if маска.0 then индус := индус + 80000000; end_if //индус не любит человеческих уступов когда много строк
if маска.1 then индус := индус + 7000000; end_if
...
if маска.6 then индус := индус + 20; end_if
if маска.7 then индус := индус + 1; end_if

или по-кодерски


функция неиндус : udint
---
for i := 1 to 8 do
if маска.0 then
неиндус := неиндус * 10 + i;
end_if
маска := маска / 2;
end_for

Dimensy
25.12.2022, 18:41
Изначально стояла задача вывести на экран номер аварии цифрой, соответственно, если несколько аварий включаются одновременно - на экран выводятся несколько цифр подряд. Сходу кроме пошагового умножения на степени 10 ничего не придумал.
Возможно стоит возводить в степень целые, а не флоаты. Тут согласен, попробую.
Кусок проекта во вложении, спасибо за помощь.


Попробуйте так

Сергей0308
25.12.2022, 19:09
Попробуйте так

Посмотрел проект, в смысле, лучше создавать некоторую функционально законченную группу элементов и оформлять в виде макросов, пусть это получится немного избыточно для конкретного случая, но тогда не придётся каждый проект начинать с чистого листа, будет своя библиотека макросов, в смысле на форуме ранее выкладывали целочисленные стеки, в том числе и я! Не хочу искать тему, кому интересно найдёт, мне проще проект с макросом выложить!
Там кстати, применительно к нашему случаю, есть выбор выводимого из макроса разряда стека(диапазон 0-31), в смысле, одного выхода будет достаточно:

64808

64809

Dimensy
25.12.2022, 19:35
Посмотрел проект, в смысле, лучше создавать некоторую функционально законченную группу элементов и оформлять в виде макросов, пусть это получится немного избыточно для конкретного случая, но тогда не придётся каждый проект начинать с чистого листа, будет своя библиотека макросов, в смысле на форуме ранее выкладывали целочисленные стеки, в том числе и я! Не хочу искать тему, кому интересно найдёт, мне проще проект с макросом выложить!
Там кстати, применительно к нашему случаю, есть выбор выводимого из макроса разряда стека(диапазон 0-31), в смысле, одного выхода будет достаточно:

Я думал насчет стека, тем более в менеджере компонентов есть макрос для аварий, но пока в Лоджике не сделали возможность использовать кнопки в программе, такие стеки просматривать неудобно - надо нажать SEL, выбрать номер записи, нажать ENTER - слишком много действий

Сергей0308
25.12.2022, 19:59
Я думал насчет стека, тем более в менеджере компонентов есть макрос для аварий, но пока в Лоджике не сделали возможность использовать кнопки в программе, такие стеки просматривать неудобно - надо нажать SEL, выбрать номер записи, нажать ENTER - слишком много действий

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

Dimensy
25.12.2022, 20:14
Вы создаёте как правило узкоспециализированные макросы для каждого конкретного проекта, для другого проекта их использовать будет проблематично!
Я бы стек выделил в отдельный макрос, всё равно он у Вас присутствует в составе, но не в виде отдельного макроса.
Тогда появилась возможность использовать его в любом проекте, где нужен стек, а не делать заново!
Надеюсь понятно выразил свою мысль?!

Понятно, но я не занимаюсь программированием на постоянной основе и те проекты которые я сделал кардинально отличаются друг от друга, поэтому мне проще узкоспециализированные макросы делать

keysansa
25.12.2022, 20:53
Вы создаёте как правило узкоспециализированные макросы для каждого конкретного проекта, для другого проекта их использовать будет проблематично!
Я бы стек выделил в отдельный макрос, всё равно он у Вас присутствует в составе, но не в виде отдельного макроса.
Тогда появилась возможность использовать его в любом проекте, где нужен стек, а не делать заново!
Надеюсь понятно выразил свою мысль?!

Отличный ответ!

keysansa
25.12.2022, 20:54
Понятно, но я не занимаюсь программированием на постоянной основе и те проекты которые я сделал кардинально отличаются друг от друга, поэтому мне проще узкоспециализированные макросы делать

Может надо тогда прислушаться?

Сергей0308
25.12.2022, 21:50
Понятно, но я не занимаюсь программированием на постоянной основе и те проекты которые я сделал кардинально отличаются друг от друга, поэтому мне проще узкоспециализированные макросы делать

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

АлександрН
26.12.2022, 10:38
Dimensy, cпасибо за проект, по нему сразу понял, где я накосячил в своем макросе. Только триггеры в "маске" заменил на SR, ибо с RS многократное нажатие кнопки "сброс" при висящей аварии забивало весь стек одним значением.
Валенок, Сергей0308 тоже большое спасибо за участие.

melky
26.12.2022, 10:50
Универсальные макросы ведут к затратам ресурсов ПР, но почему-то об этом авторы умалчивают.

sertol64
26.12.2022, 12:36
Здравствуйте! Дайте пожалуйста ссылку на ftp-сервер с версиями OL, хочу откатить - проекты не конвертируются, а дистрибутивы с самого сайта не работают, работает только с последней версией...!ПлиииЗ!

kondor3000
26.12.2022, 12:44
Здравствуйте! Дайте пожалуйста ссылку на ftp-сервер с версиями OL, хочу откатить - проекты не конвертируются, а дистрибутивы с самого сайта не работают, работает только с последней версией...!ПлиииЗ!

http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/Setup/Archive/
Советую поставить отдельно 1.23.301 (открывает все старые .owl ) и 2.2.317 (все новые .owle )

sertol64
26.12.2022, 13:10
http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/Setup/Archive/
Советую поставить отдельно 1.23.301 (открывает все старые .owl ) и 2.2.317 (все новые .owle )
Спасибо за ссылку. У меня и стояла 1.23.301, обновил же (идиот) до 2.2.317...и всё. И главное даже заработала и переконвертировала один проект. Закрыл, вышел, запустил снова OL и ...всё..., дуругие файлы неи конвертирует. И странно то, что дома всё ОК, а на работе всё "швах". Системника вызвать - целая проблема (всё запоролено).....ну это я так....жалуюсь! Спасибо ещё раз!

Евгений5213
30.12.2022, 08:51
Здравствуйте!
Подскажите, кто-нибудь, как создать дополнительный вход в логическую функцию (и, или) не создавая макрос?

Сергей0308
30.12.2022, 09:04
Здравствуйте!
Подскажите, кто-нибудь, как создать дополнительный вход в логическую функцию (и, или) не создавая макрос?

Можно поставить рядом второй такой элемент(функцию)!
Странный вопрос!
Как бы всегда, вплоть до недавнего времени, когда ST добавили и другого выбора не было!

melky
30.12.2022, 12:17
Евгений5213 тут вам не там :)

Traveller
03.01.2023, 13:11
Здравствуйте!
В данный момент только осваиваю эту среду программирования, в принципе почти все понятно и даже работает как нужно, но в одном (мой первый проект :) ) решил ввести дополнительную информационную функцию, подсчет времени работы насоса в одной рабочей сессии и тут я уперся в то что все вроде бы делаю как по "инструкции", беру готовые функциональные модули или макросы, ставлю это в проект, устанавливаю все правильные типы переменных - связи, запускаю эмулятор, сама программа работает, а вот этот блок программы с подсчетом времени вообще ни каких признаков работы не подает, что я делаю не так?
Файл программы прилагается:
64998

petera
03.01.2023, 13:27
Здравствуйте!
В данный момент только осваиваю эту среду программирования, в принципе почти все понятно и даже работает как нужно, но в одном (мой первый проект :) ) решил ввести дополнительную информационную функцию, подсчет времени работы насоса в одной рабочей сессии и тут я уперся в то что все вроде бы делаю как по "инструкции", беру готовые функциональные модули или макросы, ставлю это в проект, устанавливаю все правильные типы переменных - связи, запускаю эмулятор, сама программа работает, а вот этот блок программы с подсчетом времени вообще ни каких признаков работы не подает, что я делаю не так?
Файл программы прилагается:
64998

Файл не смотрел, то скорей всего "блок программы с подсчетом времени вообще ни каких признаков работы не подает" из-за того, что переменная на выходе этого макроса(блока) ни где больше не используется. Сделайте ее энергонезависимой или выведите ее на экран(для ПР200)

Dimensy
03.01.2023, 13:29
Здравствуйте!
В данный момент только осваиваю эту среду программирования, в принципе почти все понятно и даже работает как нужно, но в одном (мой первый проект :) ) решил ввести дополнительную информационную функцию, подсчет времени работы насоса в одной рабочей сессии и тут я уперся в то что все вроде бы делаю как по "инструкции", беру готовые функциональные модули или макросы, ставлю это в проект, устанавливаю все правильные типы переменных - связи, запускаю эмулятор, сама программа работает, а вот этот блок программы с подсчетом времени вообще ни каких признаков работы не подает, что я делаю не так?
Файл программы прилагается:


Вот из-за чего не работает
65000

Traveller
03.01.2023, 13:39
Там ее как поставишь, сразу выпадает предупреждение о циклической ссылке, но тем не менее с ней заработало, хотя я уже и так по моему пробовал, все же делал что то не так.
Как я понимаю эти переменный должны куда то "уходить" :) , а я пытался просто в эмуляторе бегающие циферки увидеть без "подключенного" дисплея... Огромное спасибо! :)

Виталийй
23.01.2023, 15:09
Здравствуйте, проконсультируйте пожалуйста как мне получать данные в Oven Logic в ПР102-24.2416.06.2(или какие компоненты мне использовать в Oven Logic) данные от "Модуля интерфейса ЛИР-915-485-СП2 " через RS485 и выводить их в рабочее поле ПР102.
Была приобретена автоматика вашей фирмы:
-Датчик температуры ДТС 014-50М.B3.25/2 - 2 шт.;
-Нормирующий преобразователь НПТ-1К.00.1.3 - 2 шт.;
-Блок питания БП30Б-Д3-24 - 1 шт.;
-Программируемое реле ПР102-24.2416.06.2 - 1 шт.;
-Информационная программируемая панель оператора ИПП120 - 1 шт.
Данные передаются от оборудования ф.Скб ИС:
- Датчик ЛИР-158Б-1-Т-256-05-ПИ-7 - 1 шт.
​​​​​​​- Трасса для инкрементных энкодеров-РС10(Р)-6-DB9(В)-05 - 1 шт.
- Модуль интерфейса ЛИР-915-485-СП2 - 1 шт.
С Вашей продукцией я работаю впервые,поэтому прошу помочь в данном вопросе.Так же если мне необходимы для работы другие программы,прошу написать их название.

capzap
23.01.2023, 15:21
Была приобретена автоматика вашей фирмы

здесь не внутренний форум работников компании, а таких же пользователе продукции как и Вы. Хотите чтоб ответила конкретно техподдержка, то Вам сюда https://owen.ru/servisnie_centri
А так изучайте работу протокола modbus RTU, ПР будет в качестве мастера, а какие регистры опрашивать это в поддержку СКБ ИС (https://skbis.ru/products/lir-915/file/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%2 0%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D1%81%20R S485%20Modbus%20RTU.pdf)

kondor3000
23.01.2023, 15:26
ПР102, открываете сайт Овен и скачиваете OWEN Logic, руководство, примеры, ссылки на видео https://owen.ru/product/pr102/documentation
Панель оператора ИПП120, тот же OWEN Logic, руководство, примеры, ссылки на видео https://owen.ru/product/ipp120/software
НПТ-1К, открываете и скачиваете конфигуратор НПТ, руководство, видео https://owen.ru/product/npt/documentation_and_software
Руководство на ДТС и БП, открываете своё или тоже скачиваете на сайте и изучаете.

По поводу датчика ЛИР-158Б-1, читаете руководство на датчик или обращаетесь к производителю.

Виталийй
23.01.2023, 15:44
ПР102, открываете сайт Овен и скачиваете OWEN Logic, руководство, примеры, ссылки на видео https://owen.ru/product/pr102/documentation
Панель оператора ИПП120, тот же OWEN Logic, руководство, примеры, ссылки на видео https://owen.ru/product/ipp120/software
НПТ-1К, открываете и скачиваете конфигуратор НПТ, руководство, видео https://owen.ru/product/npt/documentation_and_software
Руководство на ДТС и БП, открываете своё или тоже скачиваете на сайте и изучаете.

По поводу датчика ЛИР-158Б-1, читаете руководство на датчик или обращаетесь к производителю.

Физическое подключение выполнено и все работает для автоматики фирмы Овен.Программа для работы отписана.В том числе по RS 485 для панели ИПП120 и ПР102.
Поэтому и написал совета так как хочу соединить два разных производителя.
Насчет паспорта датчика все прочитано.Пожалуйста поясните как мне выводить данные в Oven Logice.Через сетевые переменные понимаю,а дальше как мне их преобразовать в обороты.Так как данный датчик будет считывать обороты двигателя.

1exan
23.01.2023, 15:48
Так смотрите возможно неправильно выразился.Сейчас попробую расписать.По поводу настройки ПР102 в качестве мастера,это я и так разобрался.В чем мой вопрос:Как мне вывести данные от датчика в программе Oven Logic?или для этого нужна другая программа?По специальности я не программист и поэтому задаю вопросы как есть(и с RS485 я никогда не работал).По схемам подключения все изучено и уже подключено(которое пришло на данный момент).А оборудование от СКБ ИС пока еще не пришло.Поэтому и возник данный вопрос.

У ПР102 должно быть 2 порта RS485 - по одному ПР опрашивает датчики (если ваши приборы имеют такую возможность), по другому - передаёт их для отображения в панели оператора

Виталийй
23.01.2023, 15:48
здесь не внутренний форум работников компании, а таких же пользователе продукции как и Вы. Хотите чтоб ответила конкретно техподдержка, то Вам сюда https://owen.ru/servisnie_centri
А так изучайте работу протокола modbus RTU, ПР будет в качестве мастера, а какие регистры опрашивать это в поддержку СКБ ИС (https://skbis.ru/products/lir-915/file/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%2 0%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8%20%D1%81%20R S485%20Modbus%20RTU.pdf)

Так смотрите возможно неправильно выразился.Сейчас попробую расписать.По поводу настройки ПР102 в качестве мастера,это я и так разобрался.В чем мой вопрос:Как мне вывести данные от датчика в программе Oven Logic?или для этого нужна другая программа?По специальности я не программист и поэтому задаю вопросы как есть(и с RS485 я никогда не работал).По схемам подключения все изучено и уже подключено(которое пришло на данный момент).А оборудование от СКБ ИС пока еще не пришло.Поэтому и возник данный вопрос.С подключением по RS485 от ИПП120 до ПР102 все разобрался(делал эксперименты
в различных ролях :ИПП120 Master,Пр102 Slave соответственно наоборот все работает и есть понимае как работает.

Виталийй
23.01.2023, 15:50
У ПР102 должно быть 2 порта RS485 - по одному ПР опрашивает датчики (если ваши приборы имеют такую возможность), по другому - передаёт их для отображения в панели оператораТак и есть.Меня интересует вывод информации в ПР102 от датчика для дальнейшей трансляции на ИПП120.

kondor3000
23.01.2023, 15:51
Физическое подключение выполнено и все работает для автоматики фирмы Овен.Программа для работы отписана.В том числе по RS 485 для панели ИПП120 и ПР102.
Поэтому и написал совета так как хочу соединить два разных производителя.

Так и задавайте вопрос конкретно, надо подключить ЛИР к ПР102, выкладывайте руководство на датчик ЛИР-158Б-1 и программу к ПР102
или скрин с куском программы и что конкретно не понятно. В чём вопрос то?
Адреса, протокол, скорость, чётность смотрите в руководстве на датчик.

1exan
23.01.2023, 15:52
Так и есть.Меня интересует вывод информации в ПР102 от датчика для дальнейшей трансляции на ИПП120.

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

Виталийй
23.01.2023, 15:55
Показания с датчиков температуры по Дискретным входам беспроблемно считываю.А вот как считать и преобразовать данные датчика в обороты не понимаю.

Sergej_
23.01.2023, 16:02
В Вашей ПР102 два порта, один сделайте мастером и опрашивайте им датчик. Другой порт используйте для связи с панелькой.

Виталийй
23.01.2023, 16:06
[QUOTE=kondor3000;399308]Так и задавайте вопрос конкретно, надо подключить ЛИР к ПР102, выкладывайте руководство на датчик ЛИР-158Б-1 и программу к ПР102
или скрин с куском программы и что конкретно не понятно. В чём вопрос то?
Адреса, протокол, скорость, чётность смотрите в руководстве на датчик.
Все верно необходимо подключить ПР102 к датчику ЛИР.Руководство на датчик сейчас приложу.Программу подкорректирую и приложу, так как проект огромный и он в стадии написания и (прошу не обращать внимание на то что первый слот ПР102 стоит в режиме Slave.А второй слот будет работать в режиме Mastera и как раз к нему будет подключен датчик.)
Все эти настройки я выставил согласно паспорту датчика.Огромное спасибо за ответы и поддержку,я уж подумал что форум этот неживой.


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

kondor3000
23.01.2023, 16:45
Прежде всего надо выяснить некоторые моменты:
1) Вы выложили руководство на ЛИР 195-196, а пишите что у вас ЛИР-158Б-1.
2) В руководстве ничего не сказано про протокол, ПР102 поддерживает Модбас RTU и Модбас ASCII. Надо выяснить какой протокол у ЛИРа.
3) Вы поставили скорость 115200 и 1 стоп бит, но датчик не поддерживает такую скорость и 1 стоп бит.
4) Счётчик 32 разрядный, 32 разрядное целочисленное занимает 2 регистра, а у вас везде по 1 регистру.
5) С битами вообще не понятно, будет ли ПР их читать. У ПР биты наложены на регистры. А в модуле похоже они в отдельной области памяти. Запись битов надо убрать.
6) Адреса регистров у вас не правильные. По руководству адреса 0, 2 и 4 ( все 3 переменных 32 разрядное целочисленное)

1exan
23.01.2023, 16:54
Все верно необходимо подключить ПР102 к датчику ЛИР.Руководство на датчик сейчас приложу.Программу подкорректирую и приложу, так как проект огромный и он в стадии написания и (прошу не обращать внимание на то что первый слот ПР102 стоит в режиме Slave.А второй слот будет работать в режиме Mastera и как раз к нему будет подключен датчик.)
Все эти настройки я выставил согласно паспорту датчика.Огромное спасибо за ответы и поддержку,я уж подумал что форум этот неживой.
https://skbis.ru/products/lir-915/file/Описание%20версии%20с%20RS485%20Modbus%20RTU.pdf65 372
вот программа
https://disk.yandex.ru/d/3Pdwxh6Aike8tQ
Прошу прощения, программу пишу без физического подключения к интерфейсу ЛИР.Так как он еще в процессе доставки находится,так что смогу проверить программу как он придет.
Весь вопрос заключается в месте на сделанном скрине,остальное не рассматривайте углубленно.65373
И так суть проблемы: я не знаю какими функциональными блоками оперировать данную операцию от датчика в самом ПР102.Прочитал все существующие блоки и условия их реализации,но так и не смог выстроить логику.

Если вы получаете с датчика значение оборотов одной переменной, то просто делаете так:
65380

Dimensy
23.01.2023, 18:30
Все верно необходимо подключить ПР102 к датчику ЛИР.Руководство на датчик сейчас приложу.Программу подкорректирую и приложу, так как проект огромный и он в стадии написания и (прошу не обращать внимание на то что первый слот ПР102 стоит в режиме Slave.А второй слот будет работать в режиме Mastera и как раз к нему будет подключен датчик.)
Все эти настройки я выставил согласно паспорту датчика.Огромное спасибо за ответы и поддержку,я уж подумал что форум этот неживой.
https://skbis.ru/products/lir-915/file/Описание%20версии%20с%20RS485%20Modbus%20RTU.pdf65 372
вот программа
https://disk.yandex.ru/d/3Pdwxh6Aike8tQ
Прошу прощения, программу пишу без физического подключения к интерфейсу ЛИР.Так как он еще в процессе доставки находится,так что смогу проверить программу как он придет.
Весь вопрос заключается в месте на сделанном скрине,остальное не рассматривайте углубленно.65373
И так суть проблемы: я не знаю какими функциональными блоками оперировать данную операцию от датчика в самом ПР102.Прочитал все существующие блоки и условия их реализации,но так и не смог выстроить логику.

ЛИР-158 - это энкодер, как я понял, вы его к ПР будете подключать через преобразователь ЛИР-915. И тут одной переменной вы не отделаетесь. Какие данные вам от датчика нужны? ЛИР-915 передает абсолютную, относительную и координату метки. Каждый по два регистра

Виталийй
23.01.2023, 21:00
Прежде всего надо выяснить некоторые моменты:
1) Вы выложили руководство на ЛИР 195-196, а пишите что у вас ЛИР-158Б-1.
2) В руководстве ничего не сказано про протокол, ПР102 поддерживает Модбас RTU и Модбас ASCII. Надо выяснить какой протокол у ЛИРа.
3) Вы поставили скорость 115200 и 1 стоп бит, но датчик не поддерживает такую скорость и 1 стоп бит.
4) Счётчик 32 разрядный, 32 разрядное целочисленное занимает 2 регистра, а у вас везде по 1 регистру.
5) С битами вообще не понятно, будет ли ПР их читать. У ПР биты наложены на регистры. А в модуле похоже они в отдельной области памяти. Запись битов надо убрать.
6) Адреса регистров у вас не правильные. По руководству адреса 0, 2 и 4 ( все 3 переменных 32 разрядное целочисленное)

Спасибо за поддержку.Смотрите вы путаете.У нас по схеме подключения получается:1.Идет датчик он считывает обороты электродвигателя "Датчик ЛИР-158Б-1-Т-256-05-ПИ-7",далее по кабелю "Трасса для инкрементных энкодеров-РС10(Р)-6-DB9(В)-05" мы передаем показания от датчика к "Модулю интерфейса ЛИР-915-485-СП2".А от него в свою очередь передаем данные по RS485 по протоколу Modbus RTU мы передаем данные к ПР102.
Модулю интерфейса ЛИР-915-485-СП2 поддерживает только протокол Modbus RTU это и написано в названии документа и в названии модуля последнее буквы "ЛИР-915-485-СП2" есть обозначение протокола RTU.По вопросу скорости абсолютно согласен с Вами.С остальными моментами буду разбираться.Огромное спасибо Вам за замечания.По скорости я как раз у Вас хотел уточнить потому что смотря на паспорт модуля интерфейса скорость максимальная у нас получается "76.8 Килобайт = 629145.6 Бит", что находится в промежутке скорости у ПР102 между 115200 и 57600.К сожалению на модуль интерфейса Лир-915-485-СП2 другой документации нет,к тому же когда модуль придет его необходимо запрограммировать на связь с ПР102 по адресам.Прошу Вас подсказать какими функциями - макросами мне воспользоваться для этого всего.Так же на данном моменте я не понимаю нужно ли мне записывать показания с (датчика-модуля интерфейса) в ПР102 или нет.Я хочу разобраться - выстроить логическую цепочку,благодаря Вам и Вашим знаниям(потому что я не могу это цепочку выстроить самостоятельно) и когда придет "все оборудования ЛИР" я в реальном времени смогу все проверить и скинуть что получается на данном этапе.

Виталийй
23.01.2023, 21:14
ЛИР-158 - это энкодер, как я понял, вы его к ПР будете подключать через преобразователь ЛИР-915. И тут одной переменной вы не отделаетесь. Какие данные вам от датчика нужны? ЛИР-915 передает абсолютную, относительную и координату метки. Каждый по два регистра

Смотрите к сожалению я не могу точно дать Вам ответ.Смотрите я постараюсь пояснить что необходимо:Допустим ситуацию я запускаю электродвигатель на определенное время и ухожу (допустим 15 минут) и мне необходимо знать минимальные,максимальные обороты за время этой работы,по истечению 15 минут двигатель останавливается.И получается мне нужны максимальные,мин обороты за это время.При этом допустим во время работы этих 15 минут мне необходимо знать какие обороты двигателя в данную секунду на экране.Как я понимаю то это относительные и абсолютные координаты.Если я не прав поправьте меня.

Виталийй
23.01.2023, 21:17
Если вы получаете с датчика значение оборотов одной переменной, то просто делаете так:
65380

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

1exan
24.01.2023, 04:55
Я не понимаю в данный момент сколько мне нужно переменных,не обращайте внимание на этот отрезок,я старался разобраться что получаю в том или ином макросе,не принимайте это за чистую монету.
Поэтому и прошу мне помочь разобраться в данной вопросе,так как не хватает знаний,поэтому я пока на данный момент не понимаю что должно выводится в макросе.
Я пока на данный момент только понимаю что должно выводится на экран ИПП120 именно в этом случае-это обороты двигателя.А как это выполнить я не знаю-прошу Вас направить меня в данной русло.В интернете даже близко подобного к сожалению я не смог найти.

Ну а в технологии то своей вы разбираетесь? Какую информацию выдаёт вам энкодер?

Виталийй
24.01.2023, 08:41
Прежде всего надо выяснить некоторые моменты:
1) Вы выложили руководство на ЛИР 195-196, а пишите что у вас ЛИР-158Б-1.
2) В руководстве ничего не сказано про протокол, ПР102 поддерживает Модбас RTU и Модбас ASCII. Надо выяснить какой протокол у ЛИРа.
3) Вы поставили скорость 115200 и 1 стоп бит, но датчик не поддерживает такую скорость и 1 стоп бит.
4) Счётчик 32 разрядный, 32 разрядное целочисленное занимает 2 регистра, а у вас везде по 1 регистру.
5) С битами вообще не понятно, будет ли ПР их читать. У ПР биты наложены на регистры. А в модуле похоже они в отдельной области памяти. Запись битов надо убрать.
6) Адреса регистров у вас не правильные. По руководству адреса 0, 2 и 4 ( все 3 переменных 32 разрядное целочисленное)

Поправляю с учетом паспорта Лира и Ваших замечаний.65386
5.Пункт не совсем понимаю, что означает "биты наложены на регистры".
я разобрался мне необходимо знать только координату последней нуль метки.Получается мне только нужны регистры 0 и 4.Я правильно понимаю ?у меня будет всего 2 сетевых входных переменных с Модуля ЛИР 915?

Виталийй
24.01.2023, 09:51
Смотрите к сожалению я не могу точно дать Вам ответ.Смотрите я постараюсь пояснить что необходимо:Допустим ситуацию я запускаю электродвигатель на определенное время и ухожу (допустим 15 минут) и мне необходимо знать минимальные,максимальные обороты за время этой работы,по истечению 15 минут двигатель останавливается.И получается мне нужны максимальные,мин обороты за это время.При этом допустим во время работы этих 15 минут мне необходимо знать какие обороты двигателя в данную секунду на экране.Как я понимаю то это относительные и абсолютные координаты.Если я не прав поправьте меня.

Разобрался в моем случае мне необходимо знать только координату последней нуль метки.Абсолютная координата и относительная мне не нужна.

kondor3000
24.01.2023, 10:51
Поправляю с учетом паспорта Лира и Ваших замечаний.65386
5.Пункт не совсем понимаю, что означает "биты наложены на регистры".
я разобрался мне необходимо знать только координату последней нуль метки.Получается мне только нужны регистры 0 и 4.Я правильно понимаю ?у меня будет всего 2 сетевых входных переменных с Модуля ЛИР 915?

По руководству прибора есть регистр с адресом 0 и бит с адресом 0. По уму это разные области пямяти, читаются разными функциями 0х01 и 0х03.
Но в Лоджике вы читаете не бит 0, а регистр 0 с битом 0. Соответственно биты читать не получится.
А координаты последней нуль метки читать по адресу 4 ( 2 регистра, 32 битное целочисленное)

Виталийй
24.01.2023, 11:00
По руководству прибора есть регистр с адресом 0 и бит с адресом 0. По уму это разные области пямяти, читаются разными функциями 0х01 и 0х03.
Но в Лоджике вы читаете не бит 0, а регистр 0 с битом 0. Соответственно биты читать не получится.
А координаты последней нуль метки читать по адресу 4 ( 2 регистра, 32 битное целочисленное)

Я правильно понимаю мне необходима всего дишь одна сетевая переменная, которая будет напрямую выдавать показания- другими словами мне не нужно ничего преобразовывать в пр102 ? и далее напрямую транслировать в ИПП120 эти данные ?

kondor3000
24.01.2023, 11:23
Я правильно понимаю мне необходима всего дишь одна сетевая переменная, которая будет напрямую выдавать показания- другими словами мне не нужно ничего преобразовывать в пр102 ? и далее напрямую транслировать в ИПП120 эти данные ?

Ну да. Похоже что так. Конечно всё надо проверять на реальном датчике.
Хотя скорее всего надо будет разложить 32 битное целочисленное на 2 отдельных регистра и положить в слейв как 2 регистра.
Так можно разобрать и собрать 32 битное целочисленное из 2 регистров, старшего и младшего 65399
При неправильном отображении, поменять их местами.
Либо не разбирать, а принять старший и младший регистр из адресов 4 и 5 и положить их в слейв сразу.

IgorCh86
24.01.2023, 12:44
Добрый день!
Есть ПР100+ПМ210 все это в OWEN Cloud (управление освещением по графику).
Подскажите, пожалуйста:
1) Возможно ли в ОК отображать системное время и время включения/выключения освещения в "удобно-читаемом" виде (12:30, 22.03.2023)? Если это возможно, подскажите как это в OL реализовать?
2) Все та же связка "ПР100+ПМ210". Есть несколько точек освещения...Можно сделать одного Master, а остальные Slave и общаться с ними через ОК? Можно ли будет синхронизировать время на всех ПР в таком случае? Или OPS сервер и SCADA нужна?

Виталийй
24.01.2023, 13:06
Ну да. Похоже что так. Конечно всё надо проверять на реальном датчике.
Хотя скорее всего надо будет разложить 32 битное целочисленное на 2 отдельных регистра и положить в слейв как 2 регистра.
Так можно разобрать и собрать 32 битное целочисленное из 2 регистров, старшего и младшего 65399
При неправильном отображении, поменять их местами.
Либо не разбирать, а принять старший и младший регистр из адресов 4 и 5 и положить их в слейв сразу.

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

kondor3000
24.01.2023, 13:51
Ого.Спасибо огромное за наглядный пример.Попробую разобраться как Вы это сделали и какой принцип работы.
Так смотрите возник вопрос,данные 2 регистра мы получаем от Модуля Лира,все верно ?(другими словами эти две сетевые от него ).Вопрос почему две? если Вы писали выше что,один адрес должен быть 65403
Или вторая сетевая уходит как раз на ИПП?

32 битная переменная занимает 2 регистра, Мастер может прочитать их как 32 битную (адрес 4) или две 16 битных ( адреса 4 и 5). А вот в слейв нельзя положить 32 битную, можно только две 16 битных. Так сделано в Лоджике.
Вам же надо передать эту переменную ещё и в ИП120.

Виталийй
24.01.2023, 13:56
32 битная переменная занимает 2 регистра, Мастер может прочитать их как 32 битную или две 16 битных. А вот в слейв нельзя положить 32 битную, можно только две 16 битных

Я понял.А как сделать их рядом две переменных мне программа не дает сделать адреса рядом 4 и 5?65404
ставить количество регистров по 1 на каждый адрес выходит?65405
Либо я ошибаюсь
По итогу получаю данную программу,но она не работает так как у Вас в примере.
Обратите внимание на настройку ПР второго слота на количество регистров я поставил по 1 на каждый адрес так как,адреса у них рядом 4 и 5.Это верно?

kondor3000
24.01.2023, 14:14
Конечно не работает, вы пытаетесь читать 32 битную как 2 отдельных регистра, а потом ещё и разобрать их на 2, а надо собирать из 2 регистров

Либо читаете как 1 переменную из 2 регистров, и разбираете на 2 регистра.

Виталийй
24.01.2023, 14:18
Конечно не работает, вы пытаетесь читать 32 битную как 2 отдельных регистра, а потом ещё и разобрать их на 2, а надо собирать из 2 регистров

Либо читаете как 1 переменную из 2 регистров, и разбираете на 2 регистра.

Вроде понял.Я запутался когда увидел у Вас две сетевых переменных справа.Получается:порядок слева- направо.Слева у нас данные от ЛИра 32 битные ,а справа данные к ИПП120 2 по 16 бит.Я же не такой Гуру как Вы и так быстро по рисунку не могу что и где.Я же все верно понял?
Получается я совсем не так сделал.
65408
Возник вопрос по 1 слоту Slave
по числу стоп-бит получается тоже должно быть 2 ?65410

kondor3000
24.01.2023, 14:32
Вот так надо 65411
На ИПП ничего не надо менять, 2 стоп бит надо в чтении с ЛИРА, где Мастер у вас

Виталийй
24.01.2023, 14:43
Вот так надо 65411
На ИПП ничего не надо менять, 2 стоп бит надо в чтении с ЛИРА, где Мастер у вас

Понял.Тогда вот этот момент не пойму.С адресами и регистрами.65413
Небольшая поправочка у меня Пр102 оно без экрана.

kondor3000
24.01.2023, 15:02
Понял.Тогда вот этот момент не пойму.С адресами и регистрами.
Небольшая поправочка у меня Пр102 оно без экрана.

Можно читать одну 32 битную, адрес 4, ставите 2 регистра, скрин 65415

Можно как 2 регистра с адресами 4 и 5, ставите 1 регистр, скрин 65416

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

Виталийй
24.01.2023, 15:04
Можно читать одну 32 битную, адрес 4, ставите 2 регистра, скрин 65415

Можно как 2 регистра с адресами 4 и 5, ставите 1 регистр, скрин 65416

Если без экрана то напрямую 2 отдельных регистра отправляете на ИП120.

вот я и не мог понять как вы сделали две переменных с адресами рядом и при этом в 2 регистра.

Сергей0308
24.01.2023, 15:13
Пусть лучше по-человечьи сразу делает, в смысле одну переменную(2 регистра) сразу одним запросом читает(пишет), потом, если надо, делает с ними что хочет!

kondor3000
24.01.2023, 15:29
Не могу понять что мне делать с этим участком куда мне выводить?65417

Вот просто оставляю эти данные в ПР102 и никуда не использую получается?

Всё лишнее сотрите и напрямую соедините. Старший со старшим, младший с младшим. И в слейве переменные должны быть с адресами подряд, например 520 и 521.
ИПП будет читать адрес 520, 2 регистра.

1exan
24.01.2023, 15:32
Разобрался в моем случае мне необходимо знать только координату последней нуль метки.Абсолютная координата и относительная мне не нужна.

А самое интересное, что если вам нужна ЧАСТОТА ВРАЩЕНИЯ двигателя (вала энкодера), то вам само это значение не очень нужно

Виталийй
24.01.2023, 15:34
А самое интересное, что если вам нужна ЧАСТОТА ВРАЩЕНИЯ двигателя (вала энкодера), то вам само это значение не очень нужно

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

kondor3000
24.01.2023, 15:42
То есть вот так.
А смысл тогда был центровой части??Вывод для экрана ПР?которого в моем случае у меня нет?

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

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

Виталийй
24.01.2023, 15:47
Я вам дал все возможные варианты, например если не надо выводить на экран, то переменная может понадобиться просто для отладки. Если старший и младший регистр случайно поменяете. Или на ИП120 отправите не в том порядке.

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

В итоге теперь окончательно каша стала в голове.Я сломался в общем.
По итогу адресация на ИПП. Вот такая как и советовали65421
Спасибо Вам за терпение и обучение меня.

Итог описываю:
Читаю данный от ЛИРА одной сетевой-переменной с адресом 4 и регистром 2.Как на скрине 65423
далеев ПР102 раскладываю на 2 как вы учили, а далее посылаю по отдельности на ИПП двумя переменными?А в ИПП читаю 2 регистрами их ?Все верно

1exan
24.01.2023, 15:50
В итоге теперь окончательно каша стала в голове.Я сломался в общем.
По итогу адресация на ИПП. Вот такая как и советовали65421
Спасибо Вам за терпение и обучение меня.

Вы всё же разберитесь, что такое "Абсолютная координата метки", значение которой вы получаете с датчика, и как она связана с частотой вращения

Виталийй
24.01.2023, 15:52
Вы всё же разберитесь, что такое "Абсолютная координата метки", значение которой вы получаете с датчика, и как она связана с частотой вращения

Насколько я понимаю абсолютная величина - есть угол отклонения от 0 метки,которая при отключении питания сохраняется.Мое понимание на данный момент.Если не прав поправьте

kondor3000
24.01.2023, 16:18
В итоге теперь окончательно каша стала в голове.Я сломался в общем.
По итогу адресация на ИПП. Вот такая как и советовали
Спасибо Вам за терпение и обучение меня.
Итог описываю:
Читаю данный от ЛИРА одной сетевой-переменной с адресом 4 и регистром 2.Как на скрине
далеев ПР102 раскладываю на 2 как вы учили, а далее посылаю по отдельности на ИПП двумя переменными?А в ИПП читаю 2 регистрами их ?Все верно

Ну да, всё верно.
А по поводу каши в голове, вы ещё Codesys2.3 не изучали, 500 страниц талмут, а 3.5 там и на 1500 страниц потянет)))

Виталийй
24.01.2023, 16:22
Ну да, всё верно.
А по поводу каши в голове, вы ещё Codesys2.3 не изучали, 500 страниц талмут)))

Надеюсь что не придется столкнутся.Мельком видел в интернете как с ней работают.Чтобы было понимание это еще только 30-40% нужной программы.Нужно будет написать здесь различные программы управление приводом двигателя + режимы,но там вроде по-проще должно быть.
И еще вопрос весь смысл этого разложения в режиме Slave-который только воспринимает 16 битную переменную.Все верно??

kondor3000
24.01.2023, 18:20
Надеюсь что не придется столкнутся.Мельком видел в интернете как с ней работают.Чтобы было понимание это еще только 30-40% нужной программы.Нужно будет написать здесь различные программы управление приводом двигателя + режимы,но там вроде по-проще должно быть.
И еще вопрос весь смысл этого разложения в режиме Slave-который только воспринимает 16 битную переменную.Все верно??

В данном случае да.
Но вообще при передаче 32 битных переменных и Float тоже, по Модбас меняются местами старший и младший регистры. Иногда их приходится раскладывать и менять местами, для правильного отображения. Так что это хороший опыт и возможно пригодится не раз.
Даже сейчас вы примите перевёрнутую переменную ( или не перевёрнутую, для этого в Мастере есть галка поменять местами регистры) ) и в слейв разложенные регистры надо подсунуть в правильном порядке ( в слейве галка не работает), иначе ИПП не правильно отобразит.

Вот тот же пример, допустим вы приняли число 150000 ( допустим оно правильное), не правильно подставили
регистры в слейв и получили на ИПП число 1240465410, вам останется только поменять регистры местами 65424

Виталийй
25.01.2023, 08:52
В данном случае да.
Но вообще при передаче 32 битных переменных и Float тоже, по Модбас меняются местами старший и младший регистры. Иногда их приходится раскладывать и менять местами, для правильного отображения. Так что это хороший опыт и возможно пригодится не раз.
Даже сейчас вы примите перевёрнутую переменную ( или не перевёрнутую, для этого в Мастере есть галка поменять местами регистры) ) и в слейв разложенные регистры надо подсунуть в правильном порядке ( в слейве галка не работает), иначе ИПП не правильно отобразит.

Вот тот же пример, допустим вы приняли число 150000 ( допустим оно правильное), не правильно подставили
регистры в слейв и получили на ИПП число 1240465410, вам останется только поменять регистры местами 65424

Доброе утро.Вот что получилось,но не совсем понимаю как Вы сделали обратную связь.6542665427
Возник к Вам вопрос соответствия порядка адресов старший-младший:
А именно с Лира у нас идет одна переменная 32 битная с 2 регистрами с адресом 4, согласно паспорту Лира 4-адрес старший,5 - младший.Далее мы передаем на ПР102 и тут раскладываем и передаем на ИПП Адреса старшего регистра 528,младшего 529.Сам вопрос в том что должно быть соответствие по порядку допустим,то есть с Лира сначала идет старший потом младший и должно ли соответствовать передача на ИПП120 что первый адрес старший,после младший или не принципиально?
Как я понял вы поясняли про этот момент насчет галочки.65428

kondor3000
25.01.2023, 09:50
На примере вам объясняю как это работает, не надо всё пихать в свой проект, вы смысл должны понять.
Как придут регистры будет видно только на живом датчике.
Не знаю будет ли работать обратная связь, так как на скрине, возможно придётся вернуться к отдельным регистрам (4 и 5, их читать и записывать без преобразований)
Галочки да, можно переставлять байты и регистры, но только в мастере.

Кстати у вас ошибка, внизу стоит SHR, а надо SHL.

Виталийй
25.01.2023, 11:08
На примере вам объясняю как это работает, не надо всё пихать в свой проект, вы смысл должны понять.
Как придут регистры будет видно только на живом датчике.
Не знаю будет ли работать обратная связь, так как на скрине, возможно придётся вернуться к отдельным регистрам (4 и 5, их читать и записывать без преобразований)
Галочки да, можно переставлять байты и регистры, но только в мастере.

Понял,буду пробовать все варианты когда придет все оборудование Лира.Вы сами какую более правильную версию считаете?
В скором времени будут от меня вопросы о согласовании ПР102 и привода двигателя.Пока попробую сам разобраться.В целом ТЗ такое:написать различные программы работы двигателя- иными словами допустим 15 минут двигатель работает на 10000 об.мин далее не отключаясь уходит на обороты 8000 в течении 30 минут и так далее.Получается различные циклы.

kondor3000
25.01.2023, 11:30
Кстати у вас ошибка, внизу стоит SHR, а надо SHL. Когда поменяете и введёте число, начнёт всё мигать как ёлка. В смысле преобразование мигать будет, как раз из за обратной связи.

Виталийй
25.01.2023, 11:46
Кстати у вас ошибка, внизу стоит SHR, а надо SHL. Когда поменяете и введёте число, начнёт всё мигать как ёлка. В смысле преобразование мигать будет, как раз из за обратной связи.

Спасибо делал по вашим скриншотам,сейчас поправлю.В обоих местах менять на SHL или только на обратной связи?

kondor3000
25.01.2023, 13:05
Спасибо делал по вашим скриншотам,сейчас поправлю.В обоих местах менять на SHL или только на обратной связи?

Мой скрин откройте, их 3 уже выложено. Если бы я делал ошибки, то у меня бы тоже не работало. Я думал вы уже всё протестировали. Если нет, то сохраните отдельно и протестируйте.

Виталийй
25.01.2023, 13:18
Мой любой скрин откройте, их 3 уже выложено. Если бы я делал ошибки, то у меня бы тоже не работало. Я думал вы уже всё протестировали. Если нет, то сохраните отдельно и протестируйте.

Исправил,я Вас так и не понял они могут одновременно работать в одном проекте или нет с одинаковыми переменными?
1.Работа по отдельности65450
2.Работа одновременно 2-х связей прямой и обратной,как раз мигают по очереди.

Вот смотрите почему у меня вопросы возникают - я не понял одни и теже это переменные или нет?Поясните пожалуйста :Описываю слева направо прямую связь.Слева счетчик с ЛИра 32 бит раскладываем его и выводим на ИПП120 разложенные.
Обратная связь:слева-направо мы уже берем разложенные д то есть теперь у нас 2 переменных с ЛИра и выводим на переменную на ИПП.Так ?
65452

kondor3000
25.01.2023, 13:49
Исправил,я Вас так и не понял они могут одновременно работать в одном проекте или нет с одинаковыми переменными?
1.Работа по отдельности65450
2.Работа одновременно 2-х связей прямой и обратной,как раз мигают по очереди.

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

Виталийй
25.01.2023, 14:00
Переменные разные, поэтому пример и работает. Когда нужно писать в ту же переменную используют блок SEL, с задержкой и сравнением или блок из менеджера.
В вашем случае надо добавить блок из менеджера компонентов, смотри скрин 65453

Вот так бы сразу сказали,а то я думал вы на одних переменных сделали два примера:прямая и обратная.Визуально по скрину они одинаковые, поэтому я и спрашивал.Я понимаю что для Вас это очевидно, что переменные нужны были разные,но я же не знал этого.
Итог: в одном проекте я не могу сделать прямую и обратную связь (вместе) на одних переменных,выходит сначала делаю прямую связь если не получается делаю обратную и смотрю значение которые получаются с датчика.
В базе компонентов нашел и добавил данный макрос, проверил работоспособность,но в моем случае он получается не нужен.
Только что я понял,что константа 65535 - это точность энкодера.

kondor3000
25.01.2023, 14:45
Вот так бы сразу сказали,а то я думал вы на одних переменных сделали два примера:прямая и обратная.Визуально по скрину они одинаковые, поэтому я и спрашивал.Я понимаю что для Вас это очевидно, что переменные нужны были разные,но я же не знал этого.
Итог: в одном проекте я не могу сделать прямую и обратную связь (вместе) на одних переменных,выходит сначала делаю прямую связь если не получается делаю обратную и смотрю значение которые получаются с датчика.
В базе компонентов нашел и добавил данный макрос, проверил работоспособность,но в моем случае он получается не нужен.
Только что я понял,что константа 65535 - это точность энкодера.

Такое впечатление, что вы так и не поняли ничего. Вы скрин последний хоть посмотрите. Там всё работает с вашими переменными. И сделайте так.
65535 это максимальное число которое может принять 16 битная переменная ( сетевая), с энкодером это никаким боком.

Посмотрите какие типы данных (в Лоджике - целочисленные, 32 битные UDINT)и какие бывают вообще, 65457
в том числе 16 битные ( в Лоджике сетевые UINT)

Виталийй
25.01.2023, 15:46
Такое впечатление, что вы так и не поняли ничего. Вы скрин последний хоть посмотрите. Там всё работает с вашими переменными. И сделайте так.
65535 это максимальное число которое может принять 16 битная переменная ( сетевая), с энкодером это никаким боком.

Посмотрите какие типы данных (в Лоджике - целочисленные, 32 битные UDINT)и какие бывают вообще, 65457
в том числе 16 битные ( в Лоджике сетевые UINT)

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

ivydy
25.01.2023, 16:14
Здравствуйте. В наличии ИПП120. Возможно ли как-то редактировать системное время и дату с самого экрана?

kondor3000
25.01.2023, 16:29
По поводу моих переменных я сделал как Вы сказали все работает с добавлением указанного вами макроса.


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

Виталийй
25.01.2023, 16:33
И всё таки старший и младший регистр у вас переставлены. Переменная входная и выходная разные. Это не придирки, хочу что бы вы поняли смысл перестановок.

Я ничего против не имею.Я наоборот только за критику,тем более Вы фактически меня обучаете.Хорошо,полностью с Вами согласен,пока данный смысл мне до конца непонятен.

Dimensy
25.01.2023, 16:50
Здравствуйте. В наличии ИПП120. Возможно ли как-то редактировать системное время и дату с самого экрана?

Все есть в инструкции

https://docs.owen.ru/book_img/767/27838.png

RomanKk
25.01.2023, 23:12
Подскажите как реализовать счетчик ошибок. Например хочу знать сколько у меня ошибок, именно общее количество. Есть n булевых переменных, хочу на экран вывести количество сработанных ошибок на данный момент, то есть оно будет динамическое, 1,2,3...n ошибок. То есть, если есть ошибка "+" в счетчик, нет "-" в счетчик. Напрашивается счетчик CTN, но входа там только два на + и -, а как объединить несколько переменных не могу понять.
Спасибо.

Сергей0308
25.01.2023, 23:44
Подскажите как реализовать счетчик ошибок. Например хочу знать сколько у меня ошибок, именно общее количество. Есть n булевых переменных, хочу на экран вывести количество сработанных ошибок на данный момент, то есть оно будет динамическое, 1,2,3...n ошибок. То есть, если есть ошибка "+" в счетчик, нет "-" в счетчик. Напрашивается счетчик CTN, но входа там только два на + и -, а как объединить несколько переменных не могу понять.
Спасибо.

Какой-то очень странный вопрос, в смысле, преобразовать значения булевых переменных в целочисленные значения и сложить разве нельзя?!

Николай Суриков
26.01.2023, 00:39
А сколько аварий?
2, 4, 16, 32, 256?
От количества и решение будет разным.
Если два или четыре, то можно
65478
А если больше, то может почитать статью https://habr.com/ru/post/276957/ и сделать элегантную функцию, которую можно будет выложить на форуме и возможно ее включат в библиотеку макросов.

Валенок
26.01.2023, 09:36
Чего там разного? В развитие от Сергея308:
1. Упаковать в маску
2. Посчитать кол-во битов ней.
Ну 2 маски и сложить два числа.
256)) Вы еще про тыщу аварий скажите в ПР
1-ая функция вообще базовая в принципе т.к. стандартный способ передачи аварий при обменах, 2ая - 4 строчки на ST

1exan
26.01.2023, 09:37
А сколько аварий?
2, 4, 16, 32, 256?
От количества и решение будет разным.
Если два или четыре, то можно
65478
А если больше, то может почитать статью https://habr.com/ru/post/276957/ и сделать элегантную функцию, которую можно будет выложить на форуме и возможно ее включат в библиотеку макросов.

Интересная статья. Плохо, что в ST на ПР логические операции с целочисленными значениями не работают

Валенок
26.01.2023, 10:49
.. Плохо, что в ST на ПР логические операции с целочисленными значениями не работают
Очень плохо. Реально заколебало.
Но применительно к задаче - накой ? Особенно в свете ПР и цикла минимум в 1мс ?
То что в статье потребуется только тогда, когда будете оптимизировать что-то на уровне тактов камня. Нету для ПР таких задач.

А 4 указанные выше мною строчки - это и есть самое первое из статьи:
65487
что в местном варианте:

function cntbit: udint;
var_input
mask : udint;
end_var

while mask <> 0 do
cntbit := cntbit + bool_to_udint(mask.0);
mask := shr(mask,1);
end_while
end_function

Сергей0308
26.01.2023, 11:48
Вот свой вариант сумматора бит в целочисленной переменной могу предложить, ранее у меня был классический:

65489

Он за один цикл мог подсчитать, но если много бит надо считать(более 16) и допускается это сделать не за один цикл, в смысле, если много бит одновременно меняются, то каждый цикл программы макрос обрабатывает по одному биту, короче, тогда можно сделать проще:

65490

Вот проект с макросами: 65491

Виталийй
26.01.2023, 14:03
И всё таки старший и младший регистр у вас переставлены. Переменная входная и выходная разные. И в реальном железе будут глюки. Это не придирки, хочу что бы вы поняли смысл перестановок. Но делали правильно.

Поправил.Ничего не мигает.Стабильно все работает.Выходит все верно ??

kondor3000
26.01.2023, 18:12
Поправил.Ничего не мигает.Стабильно все работает.Выходит все верно ??

Всё верно.

RomanKk
26.01.2023, 22:04
Собственно так и сделал, еще вчера, спустя пару минут после сообщения на форуме. Умные мысли приходят после :-)
65496

Сергей0308
26.01.2023, 22:34
Собственно так и сделал, еще вчера, спустя пару минут после сообщения на форуме. Умные мысли приходят после :-)
65496

Так у Вас всего семь аварий, а макрос для большого количества аварий я придумывал(для подсчёта количества бит в состоянии "1" в целочисленной переменной), впрочем это не помешает его использовать для семи аварий, вот добавил в проект макрос вставки бит, до восьми бит, вам должно хватить, ранее был на 16 бит и все эти макросы с расширением, для этого у них верхний целочисленный вход "Х" и настройки в свойствах макроса:

65498

66026

1exan
27.01.2023, 04:48
Очень плохо. Реально заколебало.
Но применительно к задаче - накой ? Особенно в свете ПР и цикла минимум в 1мс ?
То что в статье потребуется только тогда, когда будете оптимизировать что-то на уровне тактов камня. Нету для ПР таких задач.

А 4 указанные выше мною строчки - это и есть самое первое из статьи:
65487
что в местном варианте:

function cntbit: udint;
var_input
mask : udint;
end_var

while mask <> 0 do
cntbit := cntbit + bool_to_udint(mask.0);
mask := shr(mask,1);
end_while
end_function

Этот вариант тоже интересен (если бы ST в ПР мог делать AND)

65501

Валенок
27.01.2023, 12:43
Этот вариант тоже интересен (если бы ST в ПР мог делать AND)..
Этот вариант интересен для применения именно в ПР или вообще ?

melky
27.01.2023, 13:02
Валенок по идее все штатные функции в ST коде должны работать так же, как и FBD на холсте, и если AND и остальное не может работать с целочисленными так же, то это косяк реализации.

Валенок
27.01.2023, 15:23
melky, то что хотелось бы - и я не против (о чем сказал ранее) - п#2837
Учитывая реальность (нет битовой логики, надеюсь - пока) и применительно к заявленной задаче (посчитать биты), то какой смысл в сложных алгоритмах и тем более на FBD. Чего там выгадывается ? Якобы производительность ? Это в п#2836-то, который на FBD т.к. нет битовых в ST ? )))

2й алгоритм статьи (и в #2843) - стандартный и кошерный, и быстрее лобового цикла в отдельных случаях (типа 8000_0001h). Но :
1. Только для какой задачи для ПР это "быстрее" будет иметь значение ? (говорил в п#2837)
2. Опять же требует битовую логику которой нет
Поэтому я предложил шаг назад - лобовой цикл. как легко реализуемый, понятный и я бы посоревновался по скорости с п#2836.

Смысл вопроса п#2844
Если же в каких-то специфических алгоритмах требуется именно битовая логика и именно в ST, то (как временная мера) несложно организовать соотв. ST-функции (and/or/xor/not) для udint. Что бы дождавшись версии 783 просто выкинуть эти эрзацы и поставить чистые битовые логики.

1exan
27.01.2023, 16:17
Этот вариант интересен для применения именно в ПР или вообще ?

Он вообще интересен своей идеей.
А для ПР будет интересен, когда допилят ST

Сергей0308
27.01.2023, 22:25
Хотеть не вредно, но зачем же организм насиловать ожиданием, в моём макросе как раз по второму варианту подсчитываются единичные биты, единственное различие - подсчёт начинается не с младшего единичного бита, а со старшего, но это же не принципиально(не имеет значения), с какой стороны начинать подсчёт единичных бит!
Короче, к ПР эти методы, с целью ускорения подсчёта не относятся, здесь уже писали как максимально быстро, в смысле, за один цикл ПР можно все единичные биты пересчитать!

melky
28.01.2023, 10:40
вопрос не в хотелках, тут другое, что хотели Овен сделал, но как всегда не до конца. Еще раз для понимания, FBD в приборе давно, AND, OR, NOT, XOR в нем может работать с целочисленными переменными. Запилили ST - эти же блоки не умеют работать с целочисленными.

Для мозгов ПР все равно на чем ему говорят выполнить AND и далее, соответственно проверка уровнем выше, которая хромает.

Сергей0308
28.01.2023, 15:22
вопрос не в хотелках, тут другое, что хотели Овен сделал, но как всегда не до конца. Еще раз для понимания, FBD в приборе давно, AND, OR, NOT, XOR в нем может работать с целочисленными переменными. Запилили ST - эти же блоки не умеют работать с целочисленными.

Для мозгов ПР все равно на чем ему говорят выполнить AND и далее, соответственно проверка уровнем выше, которая хромает.

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

lagutin
30.01.2023, 12:25
Здравствуйте! Сетевая переменная в эмуляции..... Если слот мастер - назначается число 1000000. А если слот слейв - назначаю миллион - ограничивается 16960?? Это как?6556965570

petera
30.01.2023, 12:56
Здравствуйте! Сетевая переменная в эмуляции..... Если слот мастер - назначается число 1000000. А если слот слейв - назначаю миллион - ограничивается 16960?? Это как?6556965570

Потому, что
1 000 000(dec) = F4240(hex) = 1111 0100 0010 0100 0000(bin)

в слейве целочисленная сетевая переменная всего 16 бит. Т.е. от 1111 0100 0010 0100 0000(bin)
остается всего 0100 0010 0100 0000(bin) или 4240(hex), остальное обрезается.
4240(hex) = 16960(dec).

В мастере наверно для сетевой переменно выбрано 2 регистра(32 бита), по этому "обрезания" нет

kondor3000
30.01.2023, 13:09
Здравствуйте! Сетевая переменная в эмуляции..... Если слот мастер - назначается число 1000000. А если слот слейв - назначаю миллион - ограничивается 16960?? Это как?6556965570

А здесь скрин и описание как 32 битную целочисленную переменную разобрать на две 16 битных, передать по сети и и собрать обратно в 32 битную.
Важно правильно собрать переменную из 2 регистров.

https://owen.ru/forum/showthread.php?t=26216&page=280#2795

lagutin
30.01.2023, 14:32
Странно. Везде сетевые переменные одного типа же ведь. И в слейве и в мастере. Там же нет двух типов целочисленных. До этого я как то и не задумывался над этим.... Только сейчас столкнулся с миллионом:rolleyes:.... Пойду штудировать проблему.
Это просто готовый проект мне дали. Там просто один пр200 передает другому входы выходы. Один мастер, другой слейв. Программы одинаковые. И уже делали два таких шкафа. А я решил проверить. И не сработало. А может в "железе" то и работает все?
Они вот там в проекте умножают 4..20 на 50000, чтобы целое сделать, видимо. Но такое целое как раз и не по зубам пр200 оказалось. Почему на 10 не умножить, или на 100 мне не отвечают. А зачем еще на 16 умножают и 4 прибавляют - тоже?? Переделаю я, наверное по ходу все...65574

petera
30.01.2023, 14:50
Странно. Везде сетевые переменные одного типа же ведь. И в слейве и в мастере. Там же нет двух типов целочисленных. До этого я как то и не задумывался над этим.... Только сейчас столкнулся с миллионом:rolleyes:.... Пойду штудировать проблему.]

Это как одного типа?
Вот 16 бит
65575

а вот 32 бита
65576

kondor3000
30.01.2023, 15:23
Странно. Везде сетевые переменные одного типа же ведь. И в слейве и в мастере. Там же нет двух типов целочисленных. До этого я как то и не задумывался над этим.... Только сейчас столкнулся с миллионом:rolleyes:.... Пойду штудировать проблему.
Это просто готовый проект мне дали. Там просто один пр200 передает другому входы выходы. Один мастер, другой слейв. Программы одинаковые. И уже делали два таких шкафа. А я решил проверить. И не сработало. А может в "железе" то и работает все?
Они вот там в проекте умножают 4..20 на 50000, чтобы целое сделать, видимо. Но такое целое как раз и не по зубам пр200 оказалось. Почему на 10 не умножить, или на 100 мне не отвечают. А зачем еще на 16 умножают и 4 прибавляют - тоже?? Переделаю я, наверное по ходу все...65574

Там по ссылке, ещё на 4-5 страниц обсуждений и по поводу Мастера и слейва и по поводу типов переменных.
Умножение на 50 000 видимо перевод 4-20 мА в пределы диапазона датчика.
Умножение на 16 +4 вероятно перевод обратно в шкалу 4-20 мА. На сколько там правильно сделано, надо проверять.

lagutin
30.01.2023, 15:27
Да. Я понял проблему. Буду вникать. Прочитаю все. Спасибо всем.

Виталийй
01.02.2023, 11:53
Здравствуйте,подскажите как сделать поэтапно работу программы с обращением с 4 выходами:
Условия есть 4 выхода К1,К2,К3,К4 с помощью них различными комбинациями мы задаем те или иные параметры.
Пример: Мне необходимо включить 1 клемму на 5 минут,по окончанию 1 этапа мне необходимо включить уже 1 и 2 клемму на 5 минут ,после 1 и 4 так же на 5 минут.Как мне сделать несколькими условиями обращения к одному и тоже выходу.
65630

kondor3000
01.02.2023, 13:09
Здравствуйте,подскажите как сделать поэтапно работу программы с обращением с 4 выходами:
Условия есть 4 выхода К1,К2,К3,К4 с помощью них различными комбинациями мы задаем те или иные параметры.
Пример: Мне необходимо включить 1 клемму на 5 минут,по окончанию 1 этапа мне необходимо включить уже 1 и 2 клемму на 5 минут ,после 1 и 4 так же на 5 минут.Как мне сделать несколькими условиями обращения к одному и тоже выходу.
65630

Знаете как извлекаются биты из маски? Ваша таблица ей полностью соответствует, вот пример 65633
Входом переключаете счётчик по режимам, в зависимости от режима извлекаются биты из маски.
Всего 16 режимов ( с 0 по 15), на 16 счётчик обнуляется.

Если прикрутить таймер на 5 минут, будут переключаться выходы через 5 минут 65634

Виталийй
01.02.2023, 13:54
Знаете как извлекаются биты из маски? Ваша таблица ей полностью соответствует, вот пример 65633
Входом переключаете счётчик по режимам, в зависимости от режима извлекаются биты из маски.
Всего 16 режимов ( с 0 по 15), на 16 счётчик обнуляется.

Если прикрутить таймер на 5 минут, будут переключаться выходы через 5 минут 65634

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

kondor3000
01.02.2023, 14:15
Нет не знаю, попробую разобраться по вашему примеру.
на данный момент я сделал вот так.65635
Остался вопрос по составлению последовательных условий.Чтобы за одним условием автоматически включалось другое.

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

Виталийй
01.02.2023, 14:44
Всё что вы нарисовали можете выкинуть и сделать как на 2 скрине с таймером. Или хотя бы попробуйте, проверьте в работе, там всё само переключается, только 1 раз запустить надо.

Попробовал, получилось, принцип понял.65637
только есть небольшое дополнение в том что нужно.Эти комбинации необходимы не подряд.К примеру за функцией 1 идет функция 4,далее 2 функция.То есть из этих комбинаций мне необходимо составить программу в различных последовательностях функций-т.е еще комбинации этих подпрограмм.

capzap
01.02.2023, 14:50
необходимо включить 1 клемму на 5 минут,по окончанию 1 этапа мне необходимо включить уже 1 и 2 клемму на 5 минут ,после 1 и 4 так же на 5 минут

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

Виталийй
01.02.2023, 15:05
надеюсь понимаете что такая последовательность включений через счетчик не делается

Теперь уже да.

kondor3000
01.02.2023, 15:22
Попробовал, получилось, принцип понял.65637
только есть небольшое дополнение в том что нужно.Эти комбинации необходимы не подряд.К примеру за функцией 1 идет функция 4,далее 2 функция.То есть из этих комбинаций мне необходимо составить программу в различных последовательностях функций-т.е еще комбинации этих подпрограмм.

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

Виталийй
01.02.2023, 16:20
Тогда можно сделать блок, на 16 входах последовательность задать, а на выходе маска будет меняться каждые 5 минут по заданному алгоритму.
И озвучте все сразу ваши хотелки, чтобы не переделывать.

Имеем след.схему.
Имеем 6 различных шп.бабки.
На 1-4 имеем только программы с параметрами FC-00 по FC-07.
На 5-6 имеем только программы с параметрами FC-08 по FC-15.

Сейчас в данном случае нам необходима всего одна программа на шп.бабку №3 т.е нужные нам набор параметров с "FC-00 по FC-07".
Необходима следующая последовательность по порядку:
FC-00 5 мин.
FC-01 5 мин.
FC-02 5 мин.
FC-03 5 мин.
FC-04 5 мин.
FC-05 5 мин.
Приостановка программы на 5 мин.
FC-02 60 мин.
FC-04 10 мин.
FC-05 20 мин.
FC-06 20 мин.
FC-07 70 мин.
Приостановка программы на 8 мин.
Конец программы.
Нв каждом цикле данной этой программы происходит регистрация температуры.

Сергей0308
01.02.2023, 16:24
Здесь выкладывал проект с макросом ПЗУ на 257 ячеек: https://owen.ru/forum/showthread.php?t=37112&page=4
В смысле любые комбинации для 32 выходов(включительно)можно задавать, как придумаете нужные комбинации, останется только их "забить" в ПЗУ!
Если первая комбинация имеет 16 вариантов(состояний), то поместится до 16(включительно) подобных комбинаций(с таким же количеством состояний) и в перспективе можно расширить до 32(включительно) выходов!

Сергей0308
01.02.2023, 18:00
Имеем след.схему.
Имеем 6 различных шп.бабки.
На 1-4 имеем только программы с параметрами FC-00 по FC-07.
На 5-6 имеем только программы с параметрами FC-08 по FC-15.

Сейчас в данном случае нам необходима всего одна программа на шп.бабку №3 т.е нужные нам набор параметров с "FC-00 по FC-07".
Необходима следующая последовательность по порядку:
FC-00 5 мин.
FC-01 5 мин.
FC-02 5 мин.
FC-03 5 мин.
FC-04 5 мин.
FC-05 5 мин.
Приостановка программы на 5 мин.
FC-02 60 мин.
FC-04 10 мин.
FC-05 20 мин.
FC-06 20 мин.
FC-07 70 мин.
Приостановка программы на 8 мин.
Конец программы.
Нв каждом цикле данной этой программы происходит регистрация температуры.

И, не надо выражаться ребусами, в смысле, загадками, напишите ясно, в смысле, приостановка программы, это нулевой шаг, в смысле, все выхода выключены или сохранение состояния преведущего шага? Если второе - просто продляете время преведущего шага, если все выхода выключены, так и напишите - нулевой шаг!
Короче, для этой бабки(№3) требуется всего 13 шагов из 257 возможных в моём макросе ПЗУ!
В каждом шаге назначается не только комбинация включённых выходов, но и продолжительность шага. Для задания продолжительности шага остаётся 28 бит(32-4), с минимальной ступенькой в 5 минут(судя по ТЗ), максимальная уставка может составить 1*342*177*275 минут(более двух с половиной тысяч лет), в смысле, Вам хватит с избытком и можно упростить, в смысле, прямо в минутах задавать уставку времени шага, надеюсь понятно объяснил?

Похожий алгоритм мы делали для светофора: https://owen.ru/forum/showthread.php?t=26216&page=17

Здесь целочисленные мультиплексоры выкладывал: https://owen.ru/forum/showthread.php?t=26216&page=56

Здесь матрицу памяти выкладывал: https://owen.ru/forum/showthread.php?t=26216&page=57
В смысле, она тоже может пригодится при построении подобных алгоритмов.

Вот ещё проект подобный нашёл "Командоаппарат реального времени с маской недели на 32 команды 8 канальный..."
там тоже для каждой команды задаётся уставка времени и комбинация 8 выходов на которые она действует:
https://owen.ru/forum/showthread.php?t=23201&page=16
Можно и меню посмотреть, в смысле, как это всё назначается, тогда и оперативно их можно будет менять!

И здесь в посте#170 таймер: https://owen.ru/forum/showthread.php?t=33720&page=17

Виталийй
03.02.2023, 09:33
И, не надо выражаться ребусами, в смысле, загадками, напишите ясно, в смысле, приостановка программы, это нулевой шаг, в смысле, все выхода выключены или сохранение состояния преведущего шага? Если второе - просто продляете время преведущего шага, если все выхода выключены, так и напишите - нулевой шаг!
Короче, для этой бабки(№3) требуется всего 13 шагов из 257 возможных в моём макросе ПЗУ!
В каждом шаге назначается не только комбинация включённых выходов, но и продолжительность шага. Для задания продолжительности шага остаётся 28 бит(32-4), с минимальной ступенькой в 5 минут(судя по ТЗ), максимальная уставка может составить 1*342*177*275 минут(более двух с половиной тысяч лет), в смысле, Вам хватит с избытком и можно упростить, в смысле, прямо в минутах задавать уставку времени шага, надеюсь понятно объяснил?

Похожий алгоритм мы делали для светофора: https://owen.ru/forum/showthread.php?t=26216&page=17

Здесь целочисленные мультиплексоры выкладывал: https://owen.ru/forum/showthread.php?t=26216&page=56

Здесь матрицу памяти выкладывал: https://owen.ru/forum/showthread.php?t=26216&page=57
В смысле, она тоже может пригодится при построении подобных алгоритмов.

Вот ещё проект подобный нашёл "Командоаппарат реального времени с маской недели на 32 команды 8 канальный..."
там тоже для каждой команды задаётся уставка времени и комбинация 8 выходов на которые она действует:
https://owen.ru/forum/showthread.php?t=23201&page=16
Можно и меню посмотреть, в смысле, как это всё назначается, тогда и оперативно их можно будет менять!

И здесь в посте#170 таймер: https://owen.ru/forum/showthread.php?t=33720&page=17

Тогда не правильно расписал помимо этих 4 выходных клемм-клемм набора оборотов есть еще 2 клеммы на выходе которые управляют вращением вперед 1 клемма,а 2 клемма вращение назад.
получается на выходе 6 клемм.
Получается приостановка программы - получается выключение всех данных 6 выходов.
Спасибо за выданные примеры-программ,буду разбираться в них по мере возможности.
Настройка двигателя сделана так что при 0 положении клемм К1-К4 двигатель будет вращать на 100 об.мин.

kondor3000
03.02.2023, 12:16
Тогда не правильно расписал помимо этих 4 выходных клемм-клемм набора оборотов есть еще 2 клеммы на выходе которые управляют вращением вперед 1 клемма,а 2 клемма вращение назад.
получается на выходе 6 клемм.
Получается приостановка программы - получается выключение всех данных 6 выходов.
Спасибо за выданные примеры-программ,буду разбираться в них по мере возможности.
Настройка двигателя сделана так что при 0 положении клемм К1-К4 двигатель будет вращать на 100 об.мин.

Когда должны включаться режимы вперёд и назад? Есть ли ручной режим и автоматический?

Сергей0308
03.02.2023, 15:14
Тогда не правильно расписал помимо этих 4 выходных клемм-клемм набора оборотов есть еще 2 клеммы на выходе которые управляют вращением вперед 1 клемма,а 2 клемма вращение назад.
получается на выходе 6 клемм.
Получается приостановка программы - получается выключение всех данных 6 выходов.
Спасибо за выданные примеры-программ,буду разбираться в них по мере возможности.
Настройка двигателя сделана так что при 0 положении клемм К1-К4 двигатель будет вращать на 100 об.мин.

Тогда ещё один бит придётся использовать для блокировки включения(или разрешения работы, как Вам удобно) этих выходов "вперёд" и "назад"!
В принципе это ничего не меняет, бит хватает, в смысле на уставку времени шага останется 27 бит(32-5), если использовать одну целочисленную переменную(32 бит) для задания уставок времени шагов и комбинаций 5 выходных сигналов!

Serg290
06.02.2023, 14:50
Добрый день. Кто подскажет. Можно ли через сквозной порт панели Weintek прошивать ПР-200. Если нет то какое решение есть? Для удаленных объектов нужно. Заранее спасибо.

melky
06.02.2023, 15:38
ПР200 шьется через USB, что там у Weintek ?

Serg290
06.02.2023, 16:05
ПР200 шьется через USB, что там у Weintek ?

Да я тут уже почитал. У Weintek есть USB только он служит для другого (как расширение памяти и т.д.). Может есть какой-то выход? Может преобразователи...... ХЗ вообщем...

Dimensy
06.02.2023, 16:39
Добрый день. Кто подскажет. Можно ли через сквозной порт панели Weintek прошивать ПР-200. Если нет то какое решение есть? Для удаленных объектов нужно. Заранее спасибо.

Так, для удаленных объектов у Лоджика мастер тиражирования есть

melky
06.02.2023, 16:45
преобразователь в виде OrangePi, Raspberry но палки в колеса может VPN повставлять...
а так, любой микрокомп с USB портом + запуск пакета socat на нем. Еще вот варик есть это usbhere до 1-но устройства, но не получилось протестить, vpn или что-то мешает.

https://www.virtualhere.com/usb_client_software не удалось пока потестить, что-то мешает прохождению пакетов....

melky
06.02.2023, 16:46
Dimensy если самому шить по удаленке, без передачи проекта, только "удлинение" usb порта по сети.

Serg290
06.02.2023, 16:46
Так, для удаленных объектов у Лоджика мастер тиражирования есть

Так дело в том, что иногда при отладке проекта всё ОК. Ты загружаешь проект в прибор и уезжаешь. Через время, например, вылезает (косяк) или появились новые идеи, замечания и т.д. Приходиться ехать перезаливать проект за 70 км (в одну сторону). Иногда нужно включить онлайн отладку... Здесь мастер тиражирования до одного места. Это проект заказчику можно отдать в таком виде и не более.

Эдуард_Н
16.02.2023, 18:34
У нас ПР200-220.2.2.0 какой таргет выбирать в ОЛ?

Dimensy
16.02.2023, 18:57
У нас ПР200-220.2.2.0 какой таргет выбирать в ОЛ?

ПР200-220.2(4).Х

Эдуард_Н
16.02.2023, 19:00
ПР200-220.2(4).Х

Спасибо, а то что-то с этими новыми версиями ПРок запутался совсем.

verpup
20.02.2023, 10:25
Здравствуйте.
После трех лет использования ПР 200 внутренние часы в нем сбились примерно на 20 минут.
Подскажите, можно ли редактировать системное время с дисплея устройства?
Если нет, может есть какой то костыль, который позволит менять время на ПР200 без подключения к Owen Logik?

kondor3000
20.02.2023, 10:46
Здравствуйте.
После трех лет использования ПР 200 внутренние часы в нем сбились примерно на 20 минут.
Подскажите, можно ли редактировать системное время с дисплея устройства?
Если нет, может есть какой то костыль, который позволит менять время на ПР200 без подключения к Owen Logik?

Руководство читать не пробовали?
Батарейку заменить надо и настроить часы на лицевой панели. Пункт 4.4 и 8.3 руководства https://owen.ru/product/pr200/documentation_and_software

RomanKk
20.02.2023, 23:27
Подскажите вариант сброса счетчика аварий по заданному времени.
Есть счетчик CTN, на который поступают сигналы и когда количество больше n срабатываний, то фиксируется авария.
Сброс этого счетчика или по команде или каждые n часов (минут) времени. Желательно чтобы это указывалось в переменной с экрана. Вот как раз этот кусок нужно реализовать.

Думал вот так, переменную (время) указываю в минутах, например 120 мин, далее умножаю на 60 и на 1000, и это записываю в BLINK
Но тут не совсем правильно, потому что BLINK должен срабатывать по какой-то команде, а желательно чтобы это было по реальных часах, начиная с 00:00 и каждые n часов сброс.

66069

kondor3000
21.02.2023, 00:35
Подскажите вариант сброса счетчика аварий по заданному времени.
Есть счетчик CTN, на который поступают сигналы и когда количество больше n срабатываний, то фиксируется авария.
Сброс этого счетчика или по команде или каждые n часов (минут) времени. Желательно чтобы это указывалось в переменной с экрана. Вот как раз этот кусок нужно реализовать.

Думал вот так, переменную (время) указываю в минутах, например 120 мин, далее умножаю на 60 и на 1000, и это записываю в BLINK
Но тут не совсем правильно, потому что BLINK должен срабатывать по какой-то команде, а желательно чтобы это было по реальных часах, начиная с 00:00 и каждые n часов сброс.

Можно сделать например так, сброс в 0 час 0 мин по времени ПР и далее сброс через каждые, в примере 2 часа 66070
( или 120 мин или 7200 сек или 7200000 ms) переменная с1 ( хоть с экрана) записывается в таймер ТР1.
Можно сбросить и записав в переменную С1 ноль или доп. кнопку через OR на входе счётчика SТN1.

Сергей0308
21.02.2023, 01:21
Мой вариант, при циклическом повторении времени сброса каждые сутки:

66071

66072

66073

Dimensy
21.02.2023, 09:28
Подскажите вариант сброса счетчика аварий по заданному времени.
Есть счетчик CTN, на который поступают сигналы и когда количество больше n срабатываний, то фиксируется авария.
Сброс этого счетчика или по команде или каждые n часов (минут) времени. Желательно чтобы это указывалось в переменной с экрана. Вот как раз этот кусок нужно реализовать.

Думал вот так, переменную (время) указываю в минутах, например 120 мин, далее умножаю на 60 и на 1000, и это записываю в BLINK
Но тут не совсем правильно, потому что BLINK должен срабатывать по какой-то команде, а желательно чтобы это было по реальных часах, начиная с 00:00 и каждые n часов сброс.

Вот делал подобный макрос
66077
Нюанс - макрос работает когда вход сброс активен.

Pvalp
21.02.2023, 14:09
Добрый день.
Возможна ли установка на компьютере одновременно разных версий OWEN LOGIC (например 1.19 и 2.3 версии)?
И их совместное использование?

b-s-a
21.02.2023, 14:18
Господа, я может чего-то не понимаю (институт закончил 20 лет назад), но почему ПИД регулятор (что штатный, что макро) в режиме П-регулирования (Ki=0, Kd=0) выдает весь диапазон управляющих сигналов при Pv меньше Sp (режим нагреватель)? По мне, так логично бы было, чтобы при Pv=Sp на выходе было бы 50%. Имхо, внутри макроса все должно сводиться до диапазона [-1;+1], а перед выходом должно преобразовываться в нужный: pwr = (u+1) * (max-min) / 2 + min. После изучения кода макроса, установил минимальное значение -100 и максимальное +100. Да, теперь П-регулировка стала работать корректно. Но встроенный ПИД-регулятор не позволяет установить минимальную мощность отрицательной. Он вообще пригоден для реального использования?

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

RomanKk
21.02.2023, 14:28
Мой вариант, при циклическом повторении времени сброса каждые сутки:

66071

66072

66073

Можно сохранить в старой версии? У меня 2.2.311, на 2.3 не обновляется, а на сайте не могу найти, чтобы скачать установщик, есть только 2.2.318

Сергей0308
21.02.2023, 15:30
Можно сохранить в старой версии? У меня 2.2.311, на 2.3 не обновляется, а на сайте не могу найти, чтобы скачать установщик, есть только 2.2.318

Не пойму в чём проблема, у Вас мультиплексора нет? Настройки я выложил!
Короче, много раз выкладывал и отдельно и в составе проектов, даже в текущей теме имеется в посте#557:
https://owen.ru/forum/showthread.php?t=26216&page=56

Dimensy
21.02.2023, 15:49
Добрый день.
Возможна ли установка на компьютере одновременно разных версий OWEN LOGIC (например 1.19 и 2.3 версии)?
И их совместное использование?

Можно, просто при установке укажите другую папку, снимите галки с ассоциации файлов и установки ярлыка на рабочем столе (потом вручную добавите), а для второй версии потом вручную сделайте ассоциацию только с *.owle файлами

kondor3000
21.02.2023, 16:48
Можно сохранить в старой версии? У меня 2.2.311, на 2.3 не обновляется, а на сайте не могу найти, чтобы скачать установщик, есть только 2.2.318

Вот тут все версии, 320 последняя в конце. http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/Setup/Archive/

Dimensy
21.02.2023, 18:51
Господа, я может чего-то не понимаю (институт закончил 20 лет назад), но почему ПИД регулятор (что штатный, что макро) в режиме П-регулирования (Ki=0, Kd=0) выдает весь диапазон управляющих сигналов при Pv меньше Sp (режим нагреватель)? По мне, так логично бы было, чтобы при Pv=Sp на выходе было бы 50%. Имхо, внутри макроса все должно сводиться до диапазона [-1;+1], а перед выходом должно преобразовываться в нужный: pwr = (u+1) * (max-min) / 2 + min. После изучения кода макроса, установил минимальное значение -100 и максимальное +100. Да, теперь П-регулировка стала работать корректно. Но встроенный ПИД-регулятор не позволяет установить минимальную мощность отрицательной. Он вообще пригоден для реального использования?

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

Так по формуле Выход = К * дельта Е. Если дельта Е равна нулю, то и выход равен нулю

RomanKk
21.02.2023, 19:09
Спасибо. ;)

b-s-a
21.02.2023, 20:32
Это конечно логично. Но, если ошибка отрицательная, то на выходе опять 0. Т.е. если мы будем управлять рулями ракеты, то при отклонении влево, все будет ОК, а при отклонении вправо она повернуть направо не сможет.

Имхо, дурдом какой-то.

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

movyster
27.02.2023, 20:50
Добрый день. Можно ли и как вводить с экрана время с ФБ CLOCK ?

movyster
27.02.2023, 20:53
уточню: с экрана ПР200

kondor3000
27.02.2023, 20:58
уточню: с экрана ПР200
Если вы про таймеры TON, TP, TOF, то:
переменную записываете в ФБ с помощью Write To FB. Записывать надо в ms, или в секундах и умножать на 1000.
Переменную ставите на экран и меняете.

Если вы про ФБ ClockWeek, то там просто 4 переменных к блоку, Час On - Off, Мин On - Off, эти же переменные выносите на экран.

movyster
27.02.2023, 23:00
Извините, не совсем понял , возможно сам неточно написал или туплю. Задача-классический таймер: периодически замыкать и размыкать реле в выбранное пользователем время суток на экране ПР200. Хотел использовать ФБ CLOCK , но не нашел возможность как на его входы записать переменные ( часы, минуты). Могу только вручную в свойствах ФБ менять время.

kondor3000
27.02.2023, 23:14
Извините, не совсем понял , возможно сам неточно написал или туплю. Задача-классический таймер: периодически замыкать и размыкать реле в выбранное пользователем время суток на экране ПР200. Хотел использовать ФБ CLOCK , но не нашел возможность как на его входы записать переменные ( часы, минуты). Могу только вручную в свойствах ФБ менять время.

Не знаю вашего блока Clock,
пишу про блок ClockWeek из менеджера компонентов, на скрине переменные показаны стрелками, 66210
которые надо поместить на экран. С экрана время можно изменять. Блок включает и выключает нагрузку в заданное время.
При желании можно вынести и задавать с экрана ещё и дни недели.

movyster
27.02.2023, 23:42
Спасибо за новую для меня инф-цию, завтра поразбираюсь ! Я имел ввиду ФБ CLOCK из библиотеки компонентов

kondor3000
27.02.2023, 23:49
Спасибо за новую для меня инф-цию, завтра поразбираюсь ! Я имел ввиду ФБ CLOCK из библиотеки компонентов

В этом блоке, если не ошибаюсь, нельзя менять время с экрана никак, только в самой программе, совершенно бестолковый макрос(точнее время задаётся 1 раз при программировании)
Забудьте про него и делайте по скрину. 66212

ksaxx
28.02.2023, 11:03
Здравствуйте!
Просьба сильно не пинать, т.к. начинающий.
Прошу совета в следующем:
Есть устройство у которого значение параметра (давление) хранится в определенном регистре в формате udint.
Каким образом формат udint преобразовать в читаемый OWEN Logic?
Т.е. вывести значение этого самого давления на дисплей?

kondor3000
28.02.2023, 12:58
Здравствуйте!
Просьба сильно не пинать, т.к. начинающий.
Прошу совета в следующем:
Есть устройство у которого значение параметра (давление) хранится в определенном регистре в формате udint.
Каким образом формат udint преобразовать в читаемый OWEN Logic?
Т.е. вывести значение этого самого давления на дисплей?

Какие проблемы udint (32 битная целочисленная) и в Лоджике используется, только передаётся по сети 16 битными регистрами. См. скрин 66218
Соответственно надо прочитать 2 регистра и сложить их в одну 32 битную переменную. При неправильном отображении переставить регистры.
А затем вывести переменную на дисплей.
При чём ПР - мастер может прочитать целочисленную из 2 регистров, а вот в слейве придётся собрать.

По F1 в Лоджике можно открыть справку и прочитать, в том числе о типах переменных и выводе на экран.

1exan
28.02.2023, 13:10
Здравствуйте!
Просьба сильно не пинать, т.к. начинающий.
Прошу совета в следующем:
Есть устройство у которого значение параметра (давление) хранится в определенном регистре в формате udint.
Каким образом формат udint преобразовать в читаемый OWEN Logic?
Т.е. вывести значение этого самого давления на дисплей?

Обязательно уточните, что там именно udint (и только неотрицательные значения), иначе в OL нужно будет сделать ещё несколько дополнительных движений

ksaxx
28.02.2023, 13:50
Благодарю за ответ!

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

ksaxx
28.02.2023, 13:51
Спасибо за ответ!
Значения не должны быть отрицательные, контроль и управление избыточным давлением.

Сергей0308
28.02.2023, 14:00
Благодарю за ответ!

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


Спасибо за ответ!
Значения не должны быть отрицательные, контроль и управление избыточным давлением.

Если ПР инициатор сетевого обмена, то, для вашего случая, ничего дополнительно делать не надо! В смысле, ПР в этом режиме поддерживает передачу по сети и отображение переменных с данным типом данных!

66221

ksaxx
01.03.2023, 01:46
Большое спасибо!
Пока для меня работа по сети темный лес.
подскажите пожалуйста, как полученные данные преобразовать в значение физ. величины? Т.е. а ХХХ, ХХ МПа?
Из исходных данных:
Регистр 4.0: 2 (Метод регулировки по давлению)
Регистр 4.1: уставка давления подачи МПа (целое без знака)

Сергей0308
01.03.2023, 06:35
Большое спасибо!
Пока для меня работа по сети темный лес.
подскажите пожалуйста, как полученные данные преобразовать в значение физ. величины? Т.е. а ХХХ, ХХ МПа?
Из исходных данных:
Регистр 4.0: 2 (Метод регулировки по давлению)
Регистр 4.1: уставка давления подачи МПа (целое без знака)

Это устройство имеет название и РЭ, откуда Вы информацию черпаете(в день по чайной ложке) или это военная тайна, в смысле, чтобы получать целочисленным значением с точностью до сотых долей МПа, устройство должно передавать значение в умноженном на сто(Х100) виде, подобно как в ТРМ-ах, иначе никак! Ваше устройство так делает?

ksaxx
01.03.2023, 13:52
Добрый день!
Ответил в ЛС.

movyster
01.03.2023, 19:40
В этом блоке, если не ошибаюсь, нельзя менять время с экрана никак, только в самой программе, совершенно бестолковый макрос(точнее время задаётся 1 раз при программировании)
Забудьте про него и делайте по скрину. 66212

Хороший макрос по описанию, но у меня из менеджера компонентов какой-то другой, нежели у вас ( по виду) скачивается и похоже некорректно работает.66243 Есть ли альтернатива, где брать проверенные макросы?

kondor3000
01.03.2023, 21:44
Хороший макрос по описанию, но у меня из менеджера компонентов какой-то другой, нежели у вас ( по виду) скачивается и похоже некорректно работает. Есть ли альтернатива, где брать проверенные макросы?

Их там 2 штуки, один как у меня, второй как у вас))) И оба работают.
Просто надо внимательней быть и проверять то, что нарисовали.
Вы неправильно поставили переменные на вашем скрине, на часе On у вас стоят минуты Off. Поэтому и не работает.

Traveller
06.03.2023, 14:43
Здравствуйте!
Может задам немного глупый вопрос, но тем не менее.
В общем сделал не сложную программку слежение за расходом от теплосчетчика, к ней прикрутил макрос "журнала событий", в принципе все Ок, все работает как нужно. но при индикации времени и даты событий не отображаются незначащие нули и запись выглядит как то не очень т.е. весьма пустовато :) Это можно как ни будь исправить? Что бы незначащие нули тоже индицировались?

kondor3000
06.03.2023, 14:50
Здравствуйте!
Может задам немного глупый вопрос, но тем не менее.
В общем сделал не сложную программку слежение за расходом от теплосчетчика, к ней прикрутил макрос "журнала событий", в принципе все Ок, все работает как нужно. но при индикации времени и даты событий не отображаются незначащие нули и запись выглядит как то не очень т.е. весьма пустовато :) Это можно как ни будь исправить? Что бы незначащие нули тоже индицировались?

Вот Макрос заполнения 0 пустых мест 66350 66351 Дни и месяцы так же.

Traveller
06.03.2023, 15:35
Вот Макрос заполнения 0 пустых мест 66350 66351 Дни и месяцы так же. К году прибавьте 2000.Ок! Спасибо, чёт сам не догадался :)

RomanKk
08.03.2023, 19:45
Подскажите как лучше сделать следующее.
Есть поворотный переключатель 0-1 и кнопка без фиксации. Поворотный переключатель имеет контакты NO и NC, через NO идет питание 220В на вентиляторы через два контактора (приток и витяжка), через NC идет сигнал 24В на DO1 ПР200. В положении 0 на входе DO1 = 1, в написанном сценарии это значит что вентиляторы выключены. Как только переключается в положение 1, значит обрабатывается сценарий работы вентиляторов, они запускаются через DO1 и DO2 на соответствующие контакторы КМ1 и КМ2. Это режим номальных оборотов вентилятора, то есть напрямую 220В. Есть еще два контактора КМ3 и КМ4 (NO/NC), которые используются для переключения режимов работы, через контакт NC идет тот же сигнал 220В, а через NO проходит 220В через регулятор оборотов. По умолчанию эти контакторы выключены, то есть используется контакт NC. Такой способ переклчюения режимов с использованием обычных тиристорных регуляторов, чтобы вручную не крутить обороты :) Для переключения режимов используется кнопка без фиксации с контактом NO. Когда нажать кнопку, на DI2 поступает сигнал 24В и должно произойти переключение режимов через DO8. Надеюсь понятно описал.

Задачка следующая, требуется чтобы при нажатии кнопки происходило переключение режимов при выклчюенных вентиляторах. Кажется так будет безопасней. То есть когда вентиляторы включены и работают на номинальных оборотах, а в это время кнопкой запускается "тихий режим", то на 1-2 сек должны выключится выходы DO1 и DO2, которые в данный момент используются, и потом повторно включится. Повторное нажатие кнопки, то есть возврат к номинальным оборотам, также должен происходить без нагрузки на вентиляторах.

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

Сергей0308
08.03.2023, 20:21
Подскажите как лучше сделать следующее.
Есть поворотный переключатель 0-1 и кнопка без фиксации. Поворотный переключатель имеет контакты NO и NC, через NO идет питание 220В на вентиляторы через два контактора (приток и витяжка), через NC идет сигнал 24В на DO1 ПР200. В положении 0 на входе DO1 = 1, в написанном сценарии это значит что вентиляторы выключены. Как только переключается в положение 1, значит обрабатывается сценарий работы вентиляторов, они запускаются через DO1 и DO2 на соответствующие контакторы КМ1 и КМ2. Это режим номальных оборотов вентилятора, то есть напрямую 220В. Есть еще два контактора КМ3 и КМ4 (NO/NC), которые используются для переключения режимов работы, через контакт NC идет тот же сигнал 220В, а через NO проходит 220В через регулятор оборотов. По умолчанию эти контакторы выключены, то есть используется контакт NC. Такой способ переклчюения режимов с использованием обычных тиристорных регуляторов, чтобы вручную не крутить обороты :) Для переключения режимов используется кнопка без фиксации с контактом NO. Когда нажать кнопку, на DI2 поступает сигнал 24В и должно произойти переключение режимов через DO8. Надеюсь понятно описал.

Задачка следующая, требуется чтобы при нажатии кнопки происходило переключение режимов при выклчюенных вентиляторах. Кажется так будет безопасней. То есть когда вентиляторы включены и работают на номинальных оборотах, а в это время кнопкой запускается "тихий режим", то на 1-2 сек должны выключится выходы DO1 и DO2, которые в данный момент используются, и потом повторно включится. Повторное нажатие кнопки, то есть возврат к номинальным оборотам, также должен происходить без нагрузки на вентиляторах.

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

А зачем ненужные пускатели, в смысле, может одного достаточно из КМ3-КМ4 и ненужные контакты убрать, стоящий последовательно с регулятором, в смысле, кто придумал это недоразумение?!
И, зачем шунтировать регулятор, может просто вывести его на полные обороты?
У ПР200 как раз два аналоговых выхода, хватит чтобы отдельно регулировать каждый вентилятор, в качестве регулятора ТТР с ФИМ подойдёт:
https://owen.ru/product/hd_xx44va_hd_xx2210u_i_hd_xx25la/price
Раньше вообще копейки стоили, в смысле, менее тысячи, сейчас подорожали в несколько раз!
Так, как раз лучше будет, как хуже сделать Вы почему-то без подсказок знаете!

RomanKk
08.03.2023, 22:29
Потому что на КМ1-КМ2 висит еще другое оборудование, которое не связано с регулятором оборотов, которое просто запускается вместе с вентиляторами и выключается когда какой-то вентилятор останавливается. Сейчас схема такая, что после КМ1-КМ2 стоят регуляторы и дальше на вентиляторы. Так и работает, но регулировать обороты, если вдруг захотелось тише, нужно было вручную. Хотя по хорошему можно вообще без регулятора использовать, номинальных оборотов как раз хватает на нужный поток воздуха. То есть с DO на контактор и потом на вентиляторы. Но регуляторы были куплены еще в самом начале, поэтому решил сделать переключение режимов на ночь по графику, чтобы ночью тише работали вентиляторы. Собственно поэтому добавил в схему КМ3-КМ4, которые как раз и будут перекидывать между 220В напрямую и через регулятор, где будет установлены обороты на нужное количество. Например 100% и 50% оборотов, обычный и тихий режим, все.

Конечно что можно было сделать иначе, и каждый знает как лучше, но изначально сделано так, потом чуть-чуть изменил схему и все. Может выглядит странно, но все же. Чтобы не переделывать половину щитка и заново переписывать сценарий, проще докупить 2 контактора. Но это уже не по теме, вопрос в другом, как это записать в программе.

Сергей0308
08.03.2023, 23:43
Потому что на КМ1-КМ2 висит еще другое оборудование, которое не связано с регулятором оборотов, которое просто запускается вместе с вентиляторами и выключается когда какой-то вентилятор останавливается. Сейчас схема такая, что после КМ1-КМ2 стоят регуляторы и дальше на вентиляторы. Так и работает, но регулировать обороты, если вдруг захотелось тише, нужно было вручную. Хотя по хорошему можно вообще без регулятора использовать, номинальных оборотов как раз хватает на нужный поток воздуха. То есть с DO на контактор и потом на вентиляторы. Но регуляторы были куплены еще в самом начале, поэтому решил сделать переключение режимов на ночь по графику, чтобы ночью тише работали вентиляторы. Собственно поэтому добавил в схему КМ3-КМ4, которые как раз и будут перекидывать между 220В напрямую и через регулятор, где будет установлены обороты на нужное количество. Например 100% и 50% оборотов, обычный и тихий режим, все.

Конечно что можно было сделать иначе, и каждый знает как лучше, но изначально сделано так, потом чуть-чуть изменил схему и все. Может выглядит странно, но все же. Чтобы не переделывать половину щитка и заново переписывать сценарий, проще докупить 2 контактора. Но это уже не по теме, вопрос в другом, как это записать в программе.

В этом и вопрос был, почему Вы на одни пускатели навешиваете несколько функций, в смысле, на КМ1-КМ2, Вы кстати об этом сами сказали, а на другие КМ3-КМ4 , не хотите возложить очевидные функции, в смысле, их катушки подключены параллейно, логично использовать один пускатель для обеих вентиляторов, тем более, если хватает контактов.
Про КМ1-КМ2 я вообще ничего не говорил!
Я уже повторяюсь, какую роль играет контакт, подключенный последовательно с регулятором?

RomanKk
09.03.2023, 02:35
Не по теме, но все же... раз уж хотите. Схем нет, по памяти напишу.

КМ1 / КМ2 используются для управления вентиляторами (приток/вытяжка). Контакторы модульные, то есть имеют по 2 контакта (NO). На один контакт подключен вентилятор, на второй привод заслонки, то есть они запускаются вместе. Контактор управляется командой на DO1/DO2 (приток/вытяжка). Питание идет от автомата на поворотный переключатель (0-1) на NO контакт и дальше на контакты тех самых контакторов КМ1 / КМ2. На том же переключателе через контакт NC идет 24В на DI1. В положении "0" вентиляторы и программа на ПР не запущена. Как только повернуть в положение "1" будет подана команда на запуск вентиляторов, и если все ок, то катушки контакторов сработают и через контакты пойдет питание на вентиляторы и заслонки.

Тиристорные регуляторы оборотов стояли после контакторов КМ1 / КМ2, то есть на каждый вентилятор отдельный регулятор. Изначально было куплено 2 шт, потому что думал что придется регулировать обороты по разному чтобы выровнять объемы, на одном вентиляторе больше, на другом меньше. По факту получилось что на номинальных оборотах все ок, примерно с 5% запасом чем требуемый расход воздуха. Но регуляторы так и остались подклчюены.

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

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

Как уже писал, по факту регуляторы и не нужны, но раз они есть, то решил применить их для "Тихого режима", чтобы в ночное время вентилятроры работали на пониженых оборотах. Придумал такую схему, использовать контактор с NO / NC контактами, который грубо говоря будет перекидывать "линии" между регулятором и напрямую. Контакторы такие же модульные на 2 контакта.

Почему так? Может в принципе ничего бы и не произошло, но если убрать контакт после регулятора, то получится что в обычном режиме 220В будет идти и на регулятор и напрямую. Получится что с одной стороны регулятор "режет" обороты на выходе, но на тот же контакт с обратной стороны поступает 220В "чистых". Думаю вы именно о таком варианте пишете (картинка), и вообще можно один контактор с NC контактами для этого использовать. Но я не спец во всех тонкостях электрики, поэтому что в итоге было бы с оборотами и вредно ли это для вентилятора или регулятора, не могу сказать. Может регулятор сгорел бы... Потому что на регуляторе есть четкое обозначение куда подключать фазу, а куда выход на мотор. Поэтому решил что питание на вентилятор будет или напрямую или через регулятор. То есть при срабатывании КМ3-КМ4 условно происходит "переключение линий".

В общем такая картина.

Вернемся все же к сути вопроса :) Как записать программу вот этого "переключения линий", но чтобы на 1-2 секунды питание на вентиляторах "обрывалось". Хотя может этого и не нужно, и ничего страшного не произойдет если просто включать КМ3/КМ4 во время работы вентиляторов. Допустим работаю они напрямую без регулятора и тут происходит переключение на регулятор, вредно это или нет, или вообще не будет заметно? Или все же это переключение лучше делать без нагрузки?

66377

Dimensy
09.03.2023, 08:11
Вернемся все же к сути вопроса :) Как записать программу вот этого "переключения линий", но чтобы на 1-2 секунды питание на вентиляторах "обрывалось". Хотя может этого и не нужно, и ничего страшного не произойдет если просто включать КМ3/КМ4 во время работы вентиляторов. Допустим работаю они напрямую без регулятора и тут происходит переключение на регулятор, вредно это или нет, или вообще не будет заметно? Или все же это переключение лучше делать без нагрузки?


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

66379

LOM
09.03.2023, 12:11
Как раз вопрос новичка - на скрине обведен красным кусок программы, который почему то не выполняется ни в симуляторе, ни в онлайн отладке, ни в железке. Будто просто картинка. Понять не могу почему
66381

petera
09.03.2023, 12:15
Как раз вопрос новичка - на скрине обведен красным кусок программы, который почему то не выполняется ни в симуляторе, ни в онлайн отладке, ни в железке. Будто просто картинка. Понять не могу почему
66381

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

LOM
09.03.2023, 12:19
Сто раз писали, если в цепочке вычислений конечная переменная ( у Вас "Какая тем??") ни где не используется, то вся цепочка не выполняется
Сделайте переменную хотя бы энергонезависимой.

Все, разобрался. Забыл к экрану ее привязать :confused:

TaPX
10.03.2023, 16:36
Спасибо почитаю, если есть варианты на сокет вообще было бы шикарно, у меня уже http и WS подняты

Добрый вечер. У вас получилось реализовать эту свою идею?

Ivan-vo
14.03.2023, 16:17
День добрый. Помогите новичку или натолкните на решение, нужен счетчик импульсов на пр200 с заданием на каком импульсе остановиться и индикацией колчества прошедших импульсов и кнопка сброса для начала нового цикла.
С готовыми макросами Овен как то не могу сообразить как это реализовать. Счет вывод все просто а вот как задать остановку на определенном импульсе так как у счетчика CT нету сброса. Количество импульсов может быть 100 и 3000. Желательна запись в память.
Заранее спасибо.

1exan
14.03.2023, 16:30
День добрый. Помогите новичку или натолкните на решение, нужен счетчик импульсов на пр200 с заданием на каком импульсе остановиться и индикацией колчества прошедших импульсов и кнопка сброса для начала нового цикла.
С готовыми макросами Овен как то не могу сообразить как это реализовать. Счет вывод все просто а вот как задать остановку на определенном импульсе так как у счетчика CT нету сброса. Количество импульсов может быть 100 и 3000. Желательна запись в память.
Заранее спасибо.

А у CTN есть сброс (в CTU нельзя поменять уставку)

Dimensy
14.03.2023, 16:34
День добрый. Помогите новичку или натолкните на решение, нужен счетчик импульсов на пр200 с заданием на каком импульсе остановиться и индикацией колчества прошедших импульсов и кнопка сброса для начала нового цикла.
С готовыми макросами Овен как то не могу сообразить как это реализовать. Счет вывод все просто а вот как задать остановку на определенном импульсе так как у счетчика CT нету сброса. Количество импульсов может быть 100 и 3000. Желательна запись в память.
Заранее спасибо.

Вот так

66500

movyster
14.03.2023, 20:04
Добрый день ! Не посоветуете схему с FB или готовый макрос, которые бы позволяли с экрана ПР200 выбирать его выходные реле ( Q1-Q8) для замыкания/размыкания ? Интересует вариант, когда выбирать можно от одного до 8 реле одновременно

Dimensy
14.03.2023, 20:24
Добрый день ! Не посоветуете схему с FB или готовый макрос, которые бы позволяли с экрана ПР200 выбирать его выходные реле ( Q1-Q8) для замыкания/размыкания ? Интересует вариант, когда выбирать можно от одного до 8 реле одновременно

А можно поподробнее. Просто на экране выбрать какое реле замкнуть или где-то в схеме перенаправить сигнал на нужное реле?
Если второе, то эту тему можно покурить https://owen.ru/forum/showthread.php?t=37426

kondor3000
14.03.2023, 23:08
Добрый день ! Не посоветуете схему с FB или готовый макрос, которые бы позволяли с экрана ПР200 выбирать его выходные реле ( Q1-Q8) для замыкания/размыкания ? Интересует вариант, когда выбирать можно от одного до 8 реле одновременно

Да всё просто, ставите на экране например, 8 штук управление булевыми переменными, настройки как на скрине, 66520
привязываете к переменным нажимая квадратик в конце строки, переменные подключаете к выходам реле. Включено реле 1, выключено 0.
Редактирование ставите ДА. На экране выбираете и управляете любым выходом реле.

movyster
14.03.2023, 23:25
А можно поподробнее. Просто на экране выбрать какое реле замкнуть или где-то в схеме перенаправить сигнал на нужное реле?
Если второе, то эту тему можно покурить https://owen.ru/forum/showthread.php?t=37426

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

movyster
14.03.2023, 23:27
Да всё просто, ставите на экране например, 8 штук управление булевыми переменными, настройки как на скрине, 66520
привязываете к переменным нажимая квадратик в конце строки, переменные подключаете к выходам реле. Включено реле 1, выключено 0.
Редактирование ставите ДА. На экране выбираете и управляете любым выходом реле.

Отлично, спасибо !

In_Da_Cher_A
17.03.2023, 00:57
не могу понять к чему это относится - к реле или к лоджику
может кто лучше знает и то и то
что-то типа "вотчдог по питанию" или "ресет по питанию" - есть такое в этом приборе?
могу я отследить программно (!) грубо говоря первый старт?

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

1exan
17.03.2023, 05:54
не могу понять к чему это относится - к реле или к лоджику
может кто лучше знает и то и то
что-то типа "вотчдог по питанию" или "ресет по питанию" - есть такое в этом приборе?
могу я отследить программно (!) грубо говоря первый старт?

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

Если первый по включению питания - стандартно, константа "1" на RTRIG/
Если первый раз после загрузки программы - то примерно то-же, но с энергонезависимой булевой переменной.

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

Dimensy
17.03.2023, 05:58
не могу понять к чему это относится - к реле или к лоджику
может кто лучше знает и то и то
что-то типа "вотчдог по питанию" или "ресет по питанию" - есть такое в этом приборе?
могу я отследить программно (!) грубо говоря первый старт?

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

Программно отследить можно так

66569

Длительность импульса указана в руководстве по эксплуатации ПР. Например, вот https://docs.owen.ru/product/pr103/897/61377#topic-61379

In_Da_Cher_A
17.03.2023, 07:02
Длительность импульса указана в руководстве по эксплуатации ПР. Например, вот https://docs.owen.ru/product/pr103/897/61377#topic-61379ага, понял, спасибо
а то на сайте почему-то оперируют термином "время обновления"
а в кратком РЭ на входах, этого параметра - не указано (мне надо было 102 реле)
и ещё оказывается длительность импульса они отделяют от времени "реакции"на изменение входа - это ещё некая величина, добавляемая к импульсу....очень становится интересно

Т.к. "железных" быстрых входов нет, то параметры быстродействия входов, очевидно, будут определяться величиной программного циклану вот и получается - к 2 мс импульса надо прибавить допустим 50 мс обработки, ведь я не смогу обработать последующие 25 импульсов по 2 мс, я буду занят реакцией на первый и остальные просто постучаться на вход и уйдут
тогда честнее было бы указывать "минимальная длительность единичного импульса"


Программно отследить можно такможет я слишком заморачиваюсь, но имхо хотелось бы иметь какую-то "системную" переменную, которая после включения и загрузки самого ядра, выдаёт Тру. Технология требует некий начальный режим "самопроверки" и типа если Тру, то запускаемся, а если Фалсе, то сливаемся в исходное. Вот я и не могу понять - ведь если сам прибор будет в ауте при загрузке операционки, то он никак не сможет "правильно" выдать Тру или Фалсе по выходу? То есть требуется некий БИОС, который проверяет исправность реле и даёт разрешение на дальнейшую загрузку ОС нашей ПР, а потом уже типа загружается и выполняется программа управления. Что-то типа такого, как я понимаю требование "самодиагностики аппаратуры"

Если первый по включению питания - стандартно, константа "1" на RTRIG/
Если первый раз после загрузки программы - то примерно то-же, но с энергонезависимой булевой переменной.в чём разница - после включения и после загрузки программы?
ведь константа "1" на RTRIG - это и есть "после загрузки программы? или я что-то путаю

1exan
17.03.2023, 07:11
ага, понял, спасибо
а то на сайте почему-то оперируют термином "время обновления"
а в кратком РЭ на входах, этого параметра - не указано (мне надо было 102 реле)
и ещё оказывается длительность импульса они отделяют от времени "реакции"на изменение входа - это ещё некая величина, добавляемая к импульсу....очень становится интересно

может я слишком заморачиваюсь, но имхо хотелось бы иметь какую-то "системную" переменную, которая после включения и загрузки самого ядра, выдаёт Тру. Технология требует некий начальный режим "самопроверки" и типа если Тру, то запускаемся, а если Фалсе, то сливаемся в исходное. Вот я и не могу понять - ведь если сам прибор будет в ауте при загрузке операционки, то он никак не сможет "правильно" выдать Тру или Фалсе по выходу? То есть требуется некий БИОС, который проверяет исправность реле и даёт разрешение на дальнейшую загрузку ОС нашей ПР, а потом уже типа загружается и выполняется программа управления. Что-то типа такого, как я понимаю требование "самодиагностики аппаратуры"
в чём разница - после включения и после загрузки программы?
ведь константа "1" на RTRIG - это и есть "после загрузки программы? или я что-то путаю

Если обнаружится неисправность, то ПР так и пишет на экране (если может), что-то типа "Программа LOGIC: повреждена"
Если загруженная пользовательская программа начала выполняться, значит ПР считает, что у него всё хорошо.

1exan
17.03.2023, 07:13
После включения - это КАЖДЫЙ раз после подачи питания
После загрузки - это ЕДИНСТВЕННЫЙ раз после прошивки программы

In_Da_Cher_A
17.03.2023, 07:15
Если обнаружится неисправность, то ПР так и пишет на экране (если может), что-то типа "Программа LOGIC: повреждена"102 реле без экрана. И внешний экран я получается никак не могу использовать, ведь работа с внешний экраном выполняется в программе, которая не загрузится?

In_Da_Cher_A
17.03.2023, 07:18
После включения - это КАЖДЫЙ раз после подачи питания
После загрузки - это ЕДИНСТВЕННЫЙ раз после прошивки программы
ага понял, небольшая путаница в терминах "загрузка"

1exan
17.03.2023, 07:19
102 реле без экрана. И внешний экран я получается никак не могу использовать, ведь работа с внешний экраном выполняется в программе, которая не загрузится?

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

In_Da_Cher_A
17.03.2023, 07:21
Если обнаружится неисправность, то ПР так и пишет на экране (если может), что-то типа "Программа LOGIC: повреждена"
Если загруженная пользовательская программа начала выполняться, значит ПР считает, что у него всё хорошо.попытаюсь достучаться до заказчика, который хочет получить какую-то ПРЕДпрограмму, до исполнения загруженной пользовательской
спасибо

In_Da_Cher_A
17.03.2023, 07:26
В любом случае при системных неисправностях ваша программа не будет запущенавот вот! и реле не сможет это никак "сказать", допустим, максимум как я понимаю - лампочка либо красная будет, либо зелёная....хоть второй прибор ставь, который по цвету светодиода будет сообщать - самодиагностика Ок или Плохо всё.:D

1exan
17.03.2023, 07:47
вот вот! и реле не сможет это никак "сказать", допустим, максимум как я понимаю - лампочка либо красная будет, либо зелёная....хоть второй прибор ставь, который по цвету светодиода будет сообщать - самодиагностика Ок или Плохо всё.:D

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

ProRus
17.03.2023, 12:53
Здравствуйте, Уважаемые!

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

Пример:
Устройства подключены к выходам Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8.
Последовательность включения Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8.
Пауза между включениями = 1 сек.
Время включения:
Q1 = 10 сек.,
Q2 = 20 сек.,
Q3 = 30 сек.,
Q4 =40 сек.,
Q5 = 50 сек.,
Q6 = 60 сек.,
Q7 = 70 сек.,
Q8 = 80 сек.

Как осуществить подобное?
Ничего не могу понять, уже весь голова вскипел.

kondor3000
17.03.2023, 13:16
Каждое устройство подключено к выходам реле.
Необходимо что бы устройства включались последовательно с паузой между включениями (временной промежуток паузы задается переменной) и различным временным интервалом включённого состояния (временной промежуток включенного состояния задается переменной).
Как осуществить подобное?
Ничего не могу понять, уже весь голова вскипел.

1 вариант: Самое простое, поставить 8 таймеров последовательно и 1 таймер на паузу.
2 вариант: Счётчик, прибавляет по 1, время таймера задаёте № *10, один таймер на время, второй для паузы.
3 вариант: Пишите код на ST и 2 таймера

Сергей0308
17.03.2023, 13:59
Здравствуйте, Уважаемые!

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

Пример:
Устройства подключены к выходам Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8.
Последовательность включения Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8.
Пауза между включениями = 1 сек.
Время включения:
Q1 = 10 сек.,
Q2 = 20 сек.,
Q3 = 30 сек.,
Q4 =40 сек.,
Q5 = 50 сек.,
Q6 = 60 сек.,
Q7 = 70 сек.,
Q8 = 80 сек.

Как осуществить подобное?
Ничего не могу понять, уже весь голова вскипел.

А этот процесс циклически повторяется или его надо как-то запускать после завершения цикла работы?
И, мне кажется для отсчёта промежутков времени(надеюсь Вам индикацию не нужно) достаточно одного генератора импульсов с помощью мультиплексора менять уставку продолжительности времени включённого состояния в зависимости от шага программы(включённого выхода) + логику типа такой(здесь обсуждали):

https://owen.ru/forum/showthread.php?t=27724&page=2

Или с помощью регистра сдвига можно сделать, регистр сдвига здесь обсуждали:

https://owen.ru/forum/showthread.php?t=26216&page=261

https://owen.ru/forum/showthread.php?t=37017&page=4

Короче, много раз обсуждали, можно видеть даже по названиям тем в двух разделах:

https://owen.ru/forum/forumdisplay.php?f=63&page=28

https://owen.ru/forum/forumdisplay.php?f=34

ProRus
17.03.2023, 14:13
1 вариант: Самое простое, поставить 8 таймеров последовательно и 1 таймер на паузу.
2 вариант: Счётчик, прибавляет по 1, время таймера задаёте № *10, один таймер на время, второй для паузы.
3 вариант: Пишите код на ST и 2 таймера

Спасибо за подсказки.
1. С первого варианта я начинал. Не работает, так как при последовательном соединении на переднем фронте второго таймера пропадает единица и все перестает работать.
2. Попробую.
3. Для меня на сегодня слишком сложно.

ProRus
17.03.2023, 14:14
А этот процесс циклически повторяется или его надо как-то запускать после завершения цикла работы?
И, мне кажется для отсчёта промежутков времени(надеюсь Вам индикацию не нужно) достаточно одного генератора импульсов с помощью мультиплексора менять уставку продолжительности времени включённого состояния в зависимости от шага программы(включённого выхода) + логику типа такой(здесь обсуждали):

https://owen.ru/forum/showthread.php?t=27724&page=2

Или с помощью регистра сдвига можно сделать, регистр сдвига здесь обсуждали:

https://owen.ru/forum/showthread.php?t=37017&page=4

Короче, много раз обсуждали, можно видеть даже по названиям тем в двух разделах:

https://owen.ru/forum/forumdisplay.php?f=63&page=28

https://owen.ru/forum/forumdisplay.php?f=34

Спасибо!
Пойду изучать. Искал, искал, найти не смог, задал вопрос.
Если честно, я думал будет проще реализовать. :cool:

kondor3000
17.03.2023, 14:31
Спасибо!
Пойду изучать. Искал, искал, найти не смог, задал вопрос.
Если честно, я думал будет проще реализовать. :cool:

4 Вариант Комбинированный, на одном Блинке 66592 66593
Для чёткой работы блока, состояния инвертированы, вехний Write To Fb записывает в отключенное состояние Блинк, нижний во включённое.

petera
17.03.2023, 14:45
Спасибо за подсказки.
1. С первого варианта я начинал. Не работает, так как при последовательном соединении на переднем фронте второго таймера пропадает единица и все перестает работать.

Не те таймеры используете, нужно на ТОN + XOR.
Вот тупо в лоб
1. Делаем макрос, назавём его Шаг
66583

2. Последовательно соединяем Шаги, например четыре штуки
66584

Дальше продолжите сами

Dimensy
17.03.2023, 15:26
Не те таймеры используете, нужно на ТОN + XOR.
Вот тупо в лоб
1. Делаем макрос, назавём его Шаг
66583

2. Последовательно соединяем Шаги, например четыре штуки
66584

Дальше продолжите сами

Насколько я понял, человеку нужно последовательно включить выходы, а выключить уже с выдержкой. Поэтому макрос ШАГ должен выглядеть так

66591

ProRus
18.03.2023, 07:15
Не те таймеры используете, нужно на ТОN + XOR.
Вот тупо в лоб
1. Делаем макрос, назавём его Шаг
66583

2. Последовательно соединяем Шаги, например четыре штуки
66584

Дальше продолжите сами

Огромное спасибо!
Совсем просто и главное понятно.
Вот что у меня получилось и главное работает!!!
66601

Pvalp
20.03.2023, 14:01
Не те таймеры используете, нужно на ТОN + XOR.
Вот тупо в лоб
1. Делаем макрос, назавём его Шаг
66583

2. Последовательно соединяем Шаги, например четыре штуки
66584

Дальше продолжите сами

А можно их еще и закольцевать:66638

Денисов Максим Сергеевич
21.03.2023, 13:42
Коллеги!
Приглашаем вас присоединиться к тестированию возможностей и функционала визуализации для нового прибора ПР205 в Owen Logic.
Новый симулятор визуализации позволит протестировать проект и попробовать все возможности новой визуализации без прибора.

Присылайте ваши заявки на нашу почту ol@owen.ru

Pvalp
23.03.2023, 11:45
Добрый день. Скачал дистрибутив setup_owenlogic_2.3.320, но при установке выдает ошибку:66687?
Что нужно сделать для установки?

kondor3000
23.03.2023, 12:51
Добрый день. Скачал дистрибутив setup_owenlogic_2.3.320, но при установке выдает ошибку:
Что нужно сделать для установки?
Читайте 309 и 310 страницы
https://owen.ru/forum/showthread.php?t=12264&page=310

ProRus
23.03.2023, 13:16
Продолжаю изучать OwenLogic.
Добрался до ПИД-регулятора.
Делаю все как в видео - https://www.youtube.com/watch?v=tPvsR0BCv6w
Но у меня ничего не работает.
66690
Подскажите почему не получается?

По самые по...
23.03.2023, 14:46
Продолжаю изучать OwenLogic.
Добрался до ПИД-регулятора.
Делаю все как в видео - https://www.youtube.com/watch?v=tPvsR0BCv6w
Но у меня ничего не работает.
66690
Подскажите почему не получается?

На вход АI подайте 201, на выходе должно появиццо 0..

Сергей0308
23.03.2023, 15:04
Продолжаю изучать OwenLogic.
Добрался до ПИД-регулятора.
Делаю все как в видео - https://www.youtube.com/watch?v=tPvsR0BCv6w
Но у меня ничего не работает.
66690
Подскажите почему не получается?

Когда болеете, Вас доктора по фотографии лечат?

ProRus
23.03.2023, 16:57
Когда болеете, Вас доктора по фотографии лечат?
Я делаю все по видео(гляньте, оно коротенькое), на выходе ПИД ничего не меняется что бы я не задавал на входе AI1.
Ничего не пойму... Или без подключения физики ничего не получится?

Нарисовал (фото) в принципе тоже самое, только на ПИД из библиотеки, ведет себя по другому, но тоже реакции ноль.
Я конечно понимаю что нужно коэффициенты вводить, но я пока не особо понимаю как работает ПИД.
Хотел по примерам хотя бы что-то сделать, но даже по примерам не получается.
66699

ProRus
23.03.2023, 17:05
На вход АI подайте 201, на выходе должно появиццо 0..
Неа... Мне кажется это ГЛЮК... :p
66700

1exan
23.03.2023, 17:06
Я делаю все по видео(гляньте, оно коротенькое), на выходе ПИД ничего не меняется что бы я не задавал на входе AI1.
Ничего не пойму... Или без подключения физики ничего не получится?

Нарисовал (фото) в принципе тоже самое, только на ПИД из библиотеки, ведет себя по другому, но тоже реакции ноль.
Я конечно понимаю что нужно коэффициенты вводить, но я пока не особо понимаю как работает ПИД.
Хотел по примерам хотя бы что-то сделать, но даже по примерам не получается.
66699

С нулем в Kp вряд ли что-то увидите...
66701

Dimensy
23.03.2023, 19:00
Я делаю все по видео(гляньте, оно коротенькое), на выходе ПИД ничего не меняется что бы я не задавал на входе AI1.
Ничего не пойму... Или без подключения физики ничего не получится?

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

Для начала гляньте видео https://youtu.be/wxB7Yn1dZnI жалко, что продолжение не выпустили.
Чтобы глянуть ПИД в эмуляции поставьте интегральный и дифференциальный коэффициенты в ноль, а пропорциональный, ну скажем, 5, тогда на каждую разность в градус у вас по 5% будет добавляться

66703

ProRus
24.03.2023, 05:58
Для начала гляньте видео https://youtu.be/wxB7Yn1dZnI жалко, что продолжение не выпустили.
Чтобы глянуть ПИД в эмуляции поставьте интегральный и дифференциальный коэффициенты в ноль, а пропорциональный, ну скажем, 5, тогда на каждую разность в градус у вас по 5% будет добавляться
66703

Огромное спасибо!
Да, причина именно в пропорциональном коэффициенте. Все равно странно, почему не получалось как на видео... :cool:
66711
Продолжу двигаться дальше. :)
Стенд практически собрал.

ProRus
24.03.2023, 06:04
С нулем в Kp вряд ли что-то увидите...
66701

Точно так. Спасибо!
Хоть что-то стало изменяться.
66712

RomanKk
24.03.2023, 22:57
Только недавно закончил всю программу, все проверил, запустил, работат как надо. Но постала новая задача, хочется иметь возможность работы по графику, но с множеством периодов вкл/выкл. То есть для примера, вкл с 8 до 10 ч, с 14 до 16, с 20 до 22, в остальные периоды выкл. Или каждые 2-3 часа, но лучше задавать конкретные промежутки времени. Макрос Clock_Week вроде как подходит, но как задавать разные промежутки времени, если там только один промежуток можно задать? Или для этого нужно совсем другое? Тут даже не обязательно иметь расписание на каждый день, как в макросе Clock_Week, главное чтобы при достижении нужного времени срабатывал сценарий на вкл/выкл.

В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.

keysansa
24.03.2023, 23:32
В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.
Надо почитать про функции RTC. Не сложно.

keysansa
24.03.2023, 23:32
Когда болеете, Вас доктора по фотографии лечат?

Таки да, флюрография )))

kondor3000
24.03.2023, 23:38
Только недавно закончил всю программу, все проверил, запустил, работат как надо. Но постала новая задача, хочется иметь возможность работы по графику, но с множеством периодов вкл/выкл. То есть для примера, вкл с 8 до 10 ч, с 14 до 16, с 20 до 22, в остальные периоды выкл. Или каждые 2-3 часа, но лучше задавать конкретные промежутки времени. Макрос Clock_Week вроде как подходит, но как задавать разные промежутки времени, если там только один промежуток можно задать? Или для этого нужно совсем другое? Тут даже не обязательно иметь расписание на каждый день, как в макросе Clock_Week, главное чтобы при достижении нужного времени срабатывал сценарий на вкл/выкл.

В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.


На предыдущей странице есть подобная программа от petera, на таймерах с временем работы и паузами между ними. https://owen.ru/forum/showthread.php?t=26216&page=296#2954
Первый раз можно сделать и по макросу Clock_Week.

petera
25.03.2023, 06:19
На предыдущей странице есть подобная программа от petera, на таймерах с временем работы и паузами между ними. https://owen.ru/forum/showthread.php?t=26216&page=296#2954
Первый раз можно сделать и по макросу Clock_Week.

Когда-то в кодесис делал программу для управления освещением с включения N количества ламп в одном из K интервалов суток
Сделал функцию Scheduler_Ex, где число интервалов времени заранее не известно и может быть очень большим (в примере ограничено 100)

Расписание - массив структур
Каждая строка массива

TYPE Schedule :
STRUCT
On: TOD; (*Время включения*)
Off: TOD; (*Время выключения*)
amount: UINT; (*Количество включенных светильников*)
END_STRUCT
END_TYPE
Программа PLC_PRG может выглядеть так

PROGRAM PLC_PRG
VAR RETAIN PERSISTENT
Shedule1:ARRAY[0..7] OF Schedule:=
(On:=TOD#00:00, Off:=TOD#01:30, amount:=1),
(On:=TOD#02:00, Off:=TOD#03:30, amount:=2),
(On:=TOD#04:00, Off:=TOD#05:30, amount:=3),
(On:=TOD#06:00, Off:=TOD#07:30, amount:=1),
(On:=TOD#08:00, Off:=TOD#09:30, amount:=2),
(On:=TOD#10:00, Off:=TOD#12:00, amount:=3),
(On:=TOD#16:00, Off:=TOD#18:00, amount:=2),
(On:=TOD#20:00, Off:=TOD#22:00, amount:=1);
END_VAR
VAR
Lamp1: BOOL;
Lamp2: BOOL;
Lamp3: BOOL;
amount: UINT; (*Количество включеных светильников*)
END_VAR
amount:=Scheduler_Ex(pt_Shedule:=ADR(Shedule1) , size:=SIZEOF(Shedule1) );
CASE amount OF
0: Lamp1:=FALSE; Lamp2:=FALSE; Lamp3:=FALSE;
1: Lamp1:=TRUE; Lamp2:=FALSE; Lamp3:=FALSE;
2: Lamp1:=TRUE; Lamp2:=TRUE; Lamp3:=FALSE;
3: Lamp1:=TRUE; Lamp2:=TRUE; Lamp3:=TRUE;
END_CASE
Легко заметить, что интервалы где amount:=0(все выкл) можно не указывать.

Универсальность в том, что очень просто добавлять интервалы или менять в расписании кол.включеных ламп, не меняя при этом самой программы.
В будущем очень просто будет изменить общее количество ламп.
Код функции Scheduler, с моим любимым способом поиска попадания в заданный диапазон методом деления интервала пополам

FUNCTION Scheduler_Ex : UINT
VAR_INPUT
pt_Shedule: POINTER TO ARRAY[0..99] OF Schedule;
size: UINT;
END_VAR
VAR
a: INT; (*Начало интервала поиска*)
b: INT; (*Конец интервала поиска*)
N: INT; (*Число точек в расписании*)
i: INT;
uptime: SysTime64;
datetime: SystemTimeDate;
clock: CurTimeEx;
current_time: TOD; (*Текущее время*)
END_VAR
(*Получить текущее время*)
clock(SystemTime := uptime, (*текущее время в микросекундах*)
TimeDate := datetime); (*текущее время и дата в развернутом формате*)

(*собираем часы, минуты и секунды в одну кучу - в миллисекунды*)
current_time:=DWORD_TO_TOD((UINT_TO_DWORD(datetime .Hour) * 3600 +
UINT_TO_DWORD(datetime.Minute * 60) +
UINT_TO_DWORD(datetime.Second))*1000 +
datetime.Milliseconds);

N:= size / 12-1; (*находим число интервалов в расписании*)
(*Сразу проверить крайности*)
IF current_time <= pt_Shedule^[0].On THEN
Scheduler_Ex:=0;
ELSIF current_time >= pt_Shedule^[N].Off THEN
Scheduler_Ex:=0;
ELSE

(*Теперь можно начать поиск
поиск выполняется методом деления на 2*)
(*Начальные значения интервала поиска*)
a:=0;
b:=N+1;
WHILE (b-a) <> 0 DO (*В конце концов, входной сигнал ТОЧНО попадет между двумя соседними точками On и Off*)

IF current_time >= pt_Shedule^[i].On AND current_time < pt_Shedule^[i].Off THEN (*Может нам повезло, и мы нашли ВКЛ? *)
Scheduler_Ex:=pt_Shedule^[i].amount; EXIT; (*тогда конец итераций, нечего в пустую молотить :) *)
ELSIF current_time >= pt_Shedule^[i].Off AND current_time < pt_Shedule^[i+1].On THEN (*Может нам повезло, и мы нашли ВЫКЛ? *)
Scheduler_Ex:=0; EXIT; (*тогда конец итераций, нечего в пустую молотить :) *)
END_IF(*мимо :( ,тогда посмотрим в какую половину интервалов попали*)
i:=(a+b)/2; (*Делим интервал поиска пополам*)
IF current_time > pt_Shedule^[i].Off THEN (*Если тек.время больше середины интервала поиска,*)
a:=i; (*то следующий поиск будем делать начиная от середины и до конца интервалов*)
ELSE (*А если входной сигнал меньше середины интервала поиска,*)
b:=i; (*то следующий поиск будем делать начиная от начала и до середины интервалов*)
END_IF
(*Таким образом на каждой итерации отбрасываем из поиска заведомо ненужную половину интервалов
два соседних интервала On(i) - Off(i) или Off(i)- On(i+1), меду которыми попадает текущее время найдем очень быстро
для 8 интервалов On - Off нужно не более 3 итераций
при 9..16 интервалов On - Off нужно не более 4 итераций
при 17..32 интервалов On - Off нужно не более 5 итераций
при 33..64 интервалов On - Off нужно не более 6 итераций
при 65..128 интервалов On - Off не более 7 итераций
инфа точная - 100% ;) *)
END_WHILE
END_IF


Жалко, что в ОЛ нельзя работать с указателями.
Функцию можно адаптировать для ОЛ, но с конечным, заданным числом интервалов в расписании.

Dimensy
25.03.2023, 08:04
Только недавно закончил всю программу, все проверил, запустил, работат как надо. Но постала новая задача, хочется иметь возможность работы по графику, но с множеством периодов вкл/выкл. То есть для примера, вкл с 8 до 10 ч, с 14 до 16, с 20 до 22, в остальные периоды выкл. Или каждые 2-3 часа, но лучше задавать конкретные промежутки времени. Макрос Clock_Week вроде как подходит, но как задавать разные промежутки времени, если там только один промежуток можно задать? Или для этого нужно совсем другое? Тут даже не обязательно иметь расписание на каждый день, как в макросе Clock_Week, главное чтобы при достижении нужного времени срабатывал сценарий на вкл/выкл.

В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.

вот можно переделать под себя https://owen.ru/forum/showthread.php?t=34975&p=358595&viewfull=1#post358595

petera
25.03.2023, 11:33
Только недавно закончил всю программу, все проверил, запустил, работат как надо. Но постала новая задача, хочется иметь возможность работы по графику, но с множеством периодов вкл/выкл. То есть для примера, вкл с 8 до 10 ч, с 14 до 16, с 20 до 22, в остальные периоды выкл. Или каждые 2-3 часа, но лучше задавать конкретные промежутки времени. Макрос Clock_Week вроде как подходит, но как задавать разные промежутки времени, если там только один промежуток можно задать? Или для этого нужно совсем другое? Тут даже не обязательно иметь расписание на каждый день, как в макросе Clock_Week, главное чтобы при достижении нужного времени срабатывал сценарий на вкл/выкл.

В данном случае это будет применено для вентиляции, чтобы она вкл/выкл по заданному времени. Из того что можно сделать быстрее, можно взять умное реле, которое настраивается через смартфон, там задавать нужный график вкл/выкл, и через какое-то промежуточное реле подавать 0/1 на DI пр200. Но все же хотелось бы сделать это программно, если не очень сложно.

Вот вариант с суточным расписанием из макс. 10 интервалов включенного состояния
В начале некоторые соглашения
Время включения и время выключения для каждого интервала будем задавать с экрана ПР в виде целых чисел типа
1235 для времени 12:35
1841 для времени 18:41
это упростит задачу ввода с экрана ПР
66738

Да и количество переменных для расписания будет меньше
66739

Включением выключением будет заниматься функция на ST

function Scheduler: bool; // Интервальный суточный таймер
//(c) Petera для форума ОВЕН
var_input //объявление входных переменных
Enbl: bool; //Разрешение работы функции
curHH: udint; //Текущее время - часы
curMM: udint; //Текущее время - минуты
//Далее расписание только интервалы включенного состояния
//Формат времени вкл/выкл в виде 1230 - для 12:30 чч:мм
TODon1: udint;
TODoff1: udint;
TODon2: udint;
TODoff2: udint;
TODon3: udint;
TODoff3: udint;
TODon4: udint;
TODoff4: udint;
TODon5: udint;
TODoff5: udint;
TODon6: udint;
TODoff6: udint;
TODon7: udint;
TODoff7: udint;
TODon8: udint;
TODoff8: udint;
TODon9: udint;
TODoff9: udint;
TODon10: udint;
TODoff10: udint;
end_var

var //объявление локальных переменных
Schedule: array [0..9] of udint; // Для упакованного расписание
curTOD: udint; //текущее время в виде 1230 - для 12:30 чч:мм
i: udint;
tmp_on: udint;
tmp_off: udint;
end_var
if not Enbl then Scheduler := false;
else
curTOD := curHH * 100 + curMM; //текущее время в виде 1230 - для 12:30 чч:мм
//Т.к. двухмерные массивы не поддерживаются
//упаковываем интервалы в одномерный массив
//получаем формат времени вкл - выкл в виде 12301445 - для вкл в 12:30 и выкл в 14:45
Schedule[0] :=TODon1 *10000 + TODoff1;
Schedule[1] :=TODon2 *10000 + TODoff2;
Schedule[2] :=TODon3 *10000 + TODoff3;
Schedule[3] :=TODon4 *10000 + TODoff4;
Schedule[4] :=TODon5 *10000 + TODoff5;
Schedule[5] :=TODon6 *10000 + TODoff6;
Schedule[6] :=TODon7 *10000 + TODoff7;
Schedule[7] :=TODon8 *10000 + TODoff8;
Schedule[8] :=TODon9 *10000 + TODoff9;
Schedule[9] :=TODon10 *10000 + TODoff10;
Scheduler := false;
//ищем попадание текущего времени в интервалы расписания
for i := 0 to 9 do
tmp_on := Schedule[i] / 10000;
tmp_off := Schedule[i] mod 10000;
if tmp_on < tmp_off then
if curTOD >= tmp_on and curTOD < tmp_off then // исправил curTOD <= tmp_of на curTOD < tmp_of. Иначе выключалось на 1 мин. позже
Scheduler := true;
exit;
end_if
end_if
end_for
end_if
end_function

66740

Как видно - интервалы могут быть не отсортированными, т.е. с экрана можно вводить или редактировать в любом порядке
даже могут быть задействованы не все 10.
В процессе работы для исключения интервала из работы можно просто сделать начало = концу или сделать начало = конец = 0

ЗЫ.
Количество интервалов можно увеличить добавляя необходимое кол. входных переменных TODon и TODoff и добавив шагов в цикл for i := 0 to 9

ЗЫ.
Исправил строку
if curTOD >= tmp_on and curTOD <= tmp_off then
на
if curTOD >= tmp_on and curTOD < tmp_off then

kondor3000
25.03.2023, 12:22
Вот вариант с суточным расписанием из макс. 10 интервалов включенного состояния


Работа по времени без единого таймера, круто)))

RomanKk
25.03.2023, 15:14
Всем спасибо, буду смотреть.

shmnpay
26.03.2023, 02:13
Ребят кто то сталкивался с проблемой опроса трм 32 в пр200 . Проблема такая , вынул измеренное значение темп гвс - все хорошо , вынул уставку гвс ( только чтение 716 регистр ) - все хорошо .Но когда пытаюсь добавить регистр записи уставки гвс ( 10 регистр ) на холст в owen logic , то трм 32 становится не кликабельной ( что не нажмешь на ней , всегда возвращается в u-11 параметр как раз это 10 регистр ) . Убираю регистр с холста , все сразу нормально . Никак не могу вынуть эту переменную с овенклауд чтобы не было такой проблемы , хотя все работает запись и чтение с овенклауда . уже сломал всю голову . может кто поможет ?

Королев Кирилл
27.03.2023, 09:49
Ребят кто то сталкивался с проблемой опроса трм 32 в пр200 . Проблема такая , вынул измеренное значение темп гвс - все хорошо , вынул уставку гвс ( только чтение 716 регистр ) - все хорошо .Но когда пытаюсь добавить регистр записи уставки гвс ( 10 регистр ) на холст в owen logic , то трм 32 становится не кликабельной ( что не нажмешь на ней , всегда возвращается в u-11 параметр как раз это 10 регистр ) . Убираю регистр с холста , все сразу нормально . Никак не могу вынуть эту переменную с овенклауд чтобы не было такой проблемы , хотя все работает запись и чтение с овенклауда . уже сломал всю голову . может кто поможет ?

Добрый день!

Напишите, пожалуйста, на support@owen.ru. Приложите Ваш проект Owen Logic и заводской номер ТРМ32.

Pvalp
29.03.2023, 11:27
Вот вариант с суточным расписанием из макс. 10 интервалов включенного состояния
В начале некоторые соглашения
Время включения и время выключения для каждого интервала будем задавать с экрана ПР в виде целых чисел типа
1235 для времени 12:35
1841 для времени 18:41
это упростит задачу ввода с экрана ПР
66738

Да и количество переменных для расписания будет меньше
66739

Включением выключением будет заниматься функция на ST

function Scheduler: bool; // Интервальный суточный таймер
//(c) Petera для форума ОВЕН
var_input //объявление входных переменных
Enbl: bool; //Разрешение работы функции
curHH: udint; //Текущее время - часы
curMM: udint; //Текущее время - минуты
//Далее расписание только интервалы включенного состояния
//Формат времени вкл/выкл в виде 1230 - для 12:30 чч:мм
TODon1: udint;
TODoff1: udint;
TODon2: udint;
TODoff2: udint;
TODon3: udint;
TODoff3: udint;
TODon4: udint;
TODoff4: udint;
TODon5: udint;
TODoff5: udint;
TODon6: udint;
TODoff6: udint;
TODon7: udint;
TODoff7: udint;
TODon8: udint;
TODoff8: udint;
TODon9: udint;
TODoff9: udint;
TODon10: udint;
TODoff10: udint;
end_var

var //объявление локальных переменных
Schedule: array [0..9] of udint; // Для упакованного расписание
curTOD: udint; //текущее время в виде 1230 - для 12:30 чч:мм
i: udint;
tmp_on: udint;
tmp_off: udint;
end_var
if not Enbl then Scheduler := false;
else
curTOD := curHH * 100 + curMM; //текущее время в виде 1230 - для 12:30 чч:мм
//Т.к. двухмерные массивы не поддерживаются
//упаковываем интервалы в одномерный массив
//получаем формат времени вкл - выкл в виде 12301445 - для вкл в 12:30 и выкл в 14:45
Schedule[0] :=TODon1 *10000 + TODoff1;
Schedule[1] :=TODon2 *10000 + TODoff2;
Schedule[2] :=TODon3 *10000 + TODoff3;
Schedule[3] :=TODon4 *10000 + TODoff4;
Schedule[4] :=TODon5 *10000 + TODoff5;
Schedule[5] :=TODon6 *10000 + TODoff6;
Schedule[6] :=TODon7 *10000 + TODoff7;
Schedule[7] :=TODon8 *10000 + TODoff8;
Schedule[8] :=TODon9 *10000 + TODoff9;
Schedule[9] :=TODon10 *10000 + TODoff10;
Scheduler := false;
//ищем попадание текущего времени в интервалы расписания
for i := 0 to 9 do
tmp_on := Schedule[i] / 10000;
tmp_off := Schedule[i] mod 10000;
if tmp_on < tmp_off then
if curTOD >= tmp_on and curTOD <= tmp_off then
Scheduler := true;
// exit;
end_if
end_if
end_for
end_if
end_function

66740

Как видно - интервалы могут быть не отсортированными, т.е. с экрана можно вводить или редактировать в любом порядке
даже могут быть задействованы не все 10.
В процессе работы для исключения интервала из работы можно просто сделать начало = концу или сделать начало = конец = 0

ЗЫ.
Количество интервалов можно увеличить добавляя необходимое кол. входных переменных TODon и TODoff и добавив шагов в цикл for i := 0 to 9

Добрый день. Как-то не очень точно работает функция "Scheduler", включение по расписанию включается почно по времени, а выключение по расписанию почему-то спустя 1 минуту:
66838
66839
66840
Хотя должно выключаться точно по указанному времени, может я где-то ошибся?

petera
29.03.2023, 11:34
Добрый день. Как-то не очень точно работает функция "Scheduler", включение по расписанию включается почно по времени, а выключение по расписанию почему-то спустя 1 минуту:
66838
66839
66840
Хотя должно выключаться точно по указанному времени, может я где-то ошибся?
Думаю, что дело в строчке
if curTOD >= tmp_on and curTOD <= tmp_off then
нужно исправить на
if curTOD >= tmp_on and curTOD < tmp_off then

Pvalp
29.03.2023, 11:59
Думаю, что дело в строчке
if curTOD >= tmp_on and curTOD <= tmp_off then
нужно исправить на
if curTOD >= tmp_on and curTOD < tmp_off then

Да, действительно, подправил строку в функции, теперь работает правильно.
Спасибо.

shmnpay
29.03.2023, 17:41
Добрый день!

Напишите, пожалуйста, на support@owen.ru. Приложите Ваш проект Owen Logic и заводской номер ТРМ32.

прислал вам 2 дня назад ...
P.S.
Имеется пр200 и трм32 щ7 и передача данных через пе210 в owencloud .
Нужно изменять данные в трм32 удаленно , все сделал всё читается и записывается , но с есть проблема , в трм32 нельзя в программировании листать и толком лазить по настройкам , всегда возвращается к одному параметру как будто идет вечная запись настроек с овенклауда .
Не знаю как обьяснить , приложу видео и тестовый проект ( кусок из основного проекта )

ProRus
03.04.2023, 10:21
Задумался над реализацией нажатия только одной кнопки из 10-ти.
Если нажато более одной любой клавиши, на выходе 0, при нажатии только одной, любой клавиши, на выходе 1.
Реализовал, все работает, но мне кажется, что я сделал через заднее место.
Пробовал через логические операторы, не смог осилить мозгом.
Пробовал через двоичную систему, получается громоздко.
Хочу услышать рекомендации, правильным путем пошел или нет?
66961

melky
03.04.2023, 10:41
ProRus тут больше вопрос зачем это если на выходе при любой кнопке 1-ца?

petera
03.04.2023, 10:56
ProRus тут больше вопрос зачем это если на выходе при любой кнопке 1-ца?

Я думаю, что ТОЛЬКО при любой ОДНОЙ кнопке, а не при двух, трех и т.д.

melky
03.04.2023, 11:25
petera это понятно, что при любой ОДНОЙ, но зачем? или еще будет код проверки какая кнопка нажата и что она нажата одна (этот код) и тогда выполняем какое-то действие?

kondor3000
03.04.2023, 11:30
Задумался над реализацией нажатия только одной кнопки из 10-ти.
Если нажато более одной любой клавиши, на выходе 0, при нажатии только одной, любой клавиши, на выходе 1.
Реализовал, все работает, но мне кажется, что я сделал через заднее место.
Пробовал через логические операторы, не смог осилить мозгом.


Например вот так 66965

Сергей0308
03.04.2023, 11:38
Например вот так 66965

Это Вы проходной выключатель сделали включения из 10 мест, автор совсем не такой алгоритм хотел, насколько его понимаю!

Мой вариант:

66966

66967

Даже так, попроще:

66972

66973

И, совсем забыл сказать: легко расширяется до 32 входов, в смысле, просто добавить на входе второй макрос вставки(записи) бит, макрос с расширением(имеется специальный вход) и настройками(в свойствах макроса), короче, даже дополнительных макросов не потребуется!

ProRus
03.04.2023, 12:24
Например вот так 66965

Такой вариант не работает как я описал. Я с этого начинал.

ProRus
03.04.2023, 12:25
Это Вы проходной выключатель сделали включения из 10 мест, автор совсем не такой алгоритм хотел, насколько его понимаю!

Мой вариант:

66966

66967

Вот это уже интересно. Посмотрю, спасибо!

petera
03.04.2023, 12:27
Например вот так 66965

Это не работает, чтобы ТОЛЬКО при любой ОДНОЙ кнопке, а не при двух, трех и т.д.

ЗЫ.

Семь включенных
66968

Пять включенных
66969

Еще могу комбинаций добавить...

1exan
03.04.2023, 12:43
Берете любой сумматор бит и немного допиливаете.
Этот - до 32 бит:
66971

ProRus
04.04.2023, 12:38
Берете любой сумматор бит и немного допиливаете.
Этот - до 32 бит:
66971

Спасибо! Тоже интересное решение.
Понял, что я в принципе сделал более менее нормально (решил оставить так).
Благодаря вашему примеру стало ясно, что SEL в принципе лишняя и ее можно удалить.
67005

MAX12360
07.04.2023, 13:44
Какие программы можно использовать для анализа того куда, на какие сервера (сайты) обращается и передает данные приложение?

kondor3000
07.04.2023, 13:51
Какие программы можно использовать для анализа того куда, на какие сервера (сайты) обращается и передает данные приложение?

Вы о чём вообще? Овен лоджик ничего никуда не передаёт , это программа для программирования ПР.

melky
07.04.2023, 14:33
MAX12360 WireShark

Evgeniy_K
07.04.2023, 17:24
Доброго всем дня! Имеется ПР200 в режиме мастера, к ней подключено 8 ПР200 в слейве и 8 китайских релейных модуля Modbus. Всего 16 устройств. У меня вопрос - можно ли как-то программно реализовать блокировку опроса устройства, которое по какой-либо причине отвалилось и не отвечает на запросы мастера, чтобы не увеличивалось время опроса других устройств? Что-то не могу пока придумать как это сделать...

1exan
07.04.2023, 18:25
Доброго всем дня! Имеется ПР200 в режиме мастера, к ней подключено 8 ПР200 в слейве и 8 китайских релейных модуля Modbus. Всего 16 устройств. У меня вопрос - можно ли как-то программно реализовать блокировку опроса устройства, которое по какой-либо причине отвалилось и не отвечает на запросы мастера, чтобы не увеличивалось время опроса других устройств? Что-то не могу пока придумать как это сделать...

Можно попробовать оперировать переменными Статуса и Опроса - если Статус "в обрыве", то переменная Опрос начинает включаться периодически, чтобы проверить, не появилась ли связь (перешёл ли Статус в норму). При Статусе "в норме" то переменная Опрос включена постоянно.
Не знаю, правда, отключает ли переменная Опрос функции записи.