PDA

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



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

p-nik
13.03.2024, 16:58
нет, без привязки к номеру насоса. только блокировка одновременного запуска.
Появилось условие запуска сразу двух насосов. Сначала запустился один с наименьшей наработкой, через время Т - второй.
на картинке упрощенная программа

Sergej_
13.03.2024, 17:10
Подскажите, в чем может быть ошибка в программе макроса?
переменные P1_start и P2_Start должны запускать c интервалом в 5 сек (задается отдельно), но фактически они запускаются только в разные циклы.

Если исходить из этого, первого Вашего вопроса, то можно так
74325

p-nik
13.03.2024, 17:16
Если исходить из этого, первого Вашего вопроса, то можно так
74325

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

EFrol
13.03.2024, 17:19
да, но у Вас очередность запуска фиксированная - 1, потом 2. У меня насосы запускаются по наработки и их может быть больше 2

Тогда где счетчики моточасов?

p-nik
13.03.2024, 17:33
Тогда где счетчики моточасов?

Полный макрос в картинку не влезет. Сделал упрощенную программу для разбора моей проблемы

Sergej_
13.03.2024, 17:38
да, но у Вас очередность запуска фиксированная - 1, потом 2. У меня насосы запускаются по наработки и их может быть больше 2
Ну так Вас и просили изложить все условия, Вы задали вопрос, выложили схему, оказалось вопрос несколько иной, и схема "упрощенная".
Из нее виден только один сигнал пуск, флага приоритета ( или номера разрешенного к пуску) насоса нет. Как и

Тогда где счетчики моточасов?
На форуме очень много тем и обсуждений по ротации насосов, поищите. Наверняка найдете нужное решение.

p-nik
13.03.2024, 17:46
Ну так Вас и просили изложить все условия, Вы задали вопрос, выложили схему, оказалось вопрос несколько иной, и схема "упрощенная".
Из нее виден только один сигнал пуск, флага приоритета ( или номера разрешенного к пуску) насоса нет. Как и

На форуме очень много тем и обсуждений по ротации насосов, поищите. Наверняка найдете нужное решение.

забудьте про ротацию. Конкретно тот пример - почему игнорируется блокировка?
74326

Sergej_
13.03.2024, 17:57
Так Вы выложите эту часть в виде отдельного проекта, или макроса. Или кто то должен вручную рисовать, чтоб проверить?

AlexandrGr
13.03.2024, 17:59
У меня насосы запускаются по наработке
А если насос ставится новый вместо сгоревшего. Что делаете с наработкой?

p-nik
13.03.2024, 18:09
Так Вы выложите эту часть в виде отдельного проекта, или макроса. Или кто то должен вручную рисовать, чтоб проверить?
https://disk.yandex.ru/d/wMALoZHdprK2EA
OWEN Logic v2.6.345.0

p-nik
13.03.2024, 18:11
А если насос ставится новый вместо сгоревшего. Что делаете с наработкой?

Это уже другая тема

1exan
13.03.2024, 18:14
А если насос ставится новый вместо сгоревшего. Что делаете с наработкой?

Как вариант - можно сделать два значения наработки: одно (с возможностью обнуления) - собственно для учёта, другое (редактируемое) - для ротации

p-nik
13.03.2024, 18:19
А если насос ставится новый вместо сгоревшего. Что делаете с наработкой?

Макрос ротации насосов 2 шт.
https://owen.ru/forum/showthread.php?t=30327

Sergej_
13.03.2024, 18:24
https://disk.yandex.ru/d/wMALoZHdprK2EA
OWEN Logic v2.6.345.0

И пожалуйста, чтоб не было непоняток, условия включения-выключения выходов.

p-nik
13.03.2024, 18:35
И пожалуйста, чтоб не было непоняток, условия включения-выключения выходов.

условие - переменная start и невозможность одновременной активации P1_start и P2_start.
Не надо переписывать логику. Мне интересно почему моя программа не работает, что бы в дальнейшем не допускать ошибок. Или тут проблема в компиляторе Logic

EFrol
13.03.2024, 18:38
условие - переменная start и невозможность одновременной активации P1_start и P2_start.
Не надо переписывать логику. Мне интересно почему моя программа не работает, что бы в дальнейшем не допускать ошибок. Или тут проблема в компиляторе Logic

При каких условиях должен работать P1_start?
При каких условиях должен работать P2_start?

p-nik
13.03.2024, 18:45
При каких условиях должен работать P1_start?
При каких условиях должен работать P2_start?

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

EFrol
13.03.2024, 18:48
Коллеги, зачем вам условия? Здесь просто "булевская" логика и программа не работает. Может расположение переменных не так, может ещё какие-то нюансы которые я не знаю

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

Dimensy
13.03.2024, 18:50
условие - переменная start и невозможность одновременной активации P1_start и P2_start.
Не надо переписывать логику. Мне интересно почему моя программа не работает, что бы в дальнейшем не допускать ошибок. Или тут проблема в компиляторе Logic

Проблема в том, что вы все переменные сделали энергонезависимыми. А зачем вы это сделали? Если не менять логику, то у вас включится второй выход и через 5 секунд добавится первый. Так и должно быть?

Sergej_
13.03.2024, 18:56
Блин, ну как зачем? Вы хотите чтоб одновременно не включались вообще или запуск разрешен, но с задержкой 5 сек., хотите чтоб приоритет был, у какого? Либо при каждом следующем включении попеременно включались? Вкл-выкл в течении менее5 сек. вариантов масса. То что у Вас , и не меняя логики , как Вы хотели, включится второй выход, через 5 сек 1-й. и при каждом включении так же будет . Я уж не спрашиваю про условия пуска. Поставьте л.з. Но этот вариант не будет отличаться от того что раньше рисовал Вам. Только сложнее.
74327

Вероятно Вы хотели что то типа счетчика сделать? N_start? Но это не так делается. Гадать сложно.

p-nik
13.03.2024, 19:19
Проблема в том, что вы все переменные сделали энергонезависимыми. А зачем вы это сделали? Если не менять логику, то у вас включится второй выход и через 5 секунд добавится первый. Так и должно быть?

Да. В данном случае именно это.
Про л.з. попробую уже завтра.
Спасибо!

Сергей0308
13.03.2024, 19:34
На форуме была подобная тема(если правильно понял вашу проблему), в смысле, если включаются одновременно более одного насоса(компрессора), точнее, подаются сигналы на запуск, то первый запускался сразу, а остальные по очереди, с определённым приоритетом и задержкой, чтобы снизить суммарный пусковой ток, Вы такой алгоритм хотите?
Короче, я много разных вариантов предлагал, вот один из них:

74329

FPavel
13.03.2024, 20:38
Здравствуйте. Возник вопрос касательно чтения значения мощности с счетчика WB-MAP3e на ПР205. Видел на форуме, что возникала такая проблема, но она была решалась в Codesys, а не в owen logic. Связь ПР с счетчиком есть, значения напряжения считываются исправно, а вот значения суммарной активной мощности нет. Если кто-нибудь сталкивался, то не могли бы подсказать, как справиться с данной проблемой?

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

Если в ПР требуется только вывести на экран, то можно сделать так полученное число умножить на 512 и полученный результат вывести в формате "с фиксированной запятой".

А перестановку байт при необходимости - сделайте самостоятельно. Один из 16 вариантов будет показывать правильно.

Для вывода числа (Reg0x1300 * 0.00512) удобно представить число форматом с "фиксированной запятой" - т.е. в виде двух переменных (целая и дробная части).



function_block TotalP_To_Display_ //имя функционального блока.

// предельные значения результатов для вычисления
// суммарной активной мощности с учётом масштабирования
// (умножения принятого числа на 0,00512)

// (2^32)-1 = 4 294 967 295
// (( (2^32)-1 ) * 512) = 2 199 023 255 040
// (( (2^32)-1 ) * 512) / (10^5) = 21 990 232,55040

// т.е. нужно выделить фиксированную дробную часть,
// а оставшаяся целая часть
// 21 990 232 (10) = 1 01001111 10001011 01011000 (2)
// занимает 25 бит и может уместиться в целой 32 разрядной
// переменной

var_input //объявление входных переменных
Reg0x1300: udint;
end_var

var_output //объявление выходных переменных
Int_8, Frac_5: udint;
end_var

var //объявление локальных переменных
A0, A1, A2: udint; //внутренний формат хранения регистра для вычислений
max_value: udint := 65535;
divizor: udint := 10000;
temp: udint;
end_var

// преобразование входного значения во внутренний формат с учётом умножения на (2^9) = 512
A2 := shr(Reg0x1300, 32-9);
A1 := shr(Reg0x1300, 7) mod (max_value + 1);
A0 := shl(Reg0x1300, 9) mod (max_value + 1);

// получение дробной части путём получения остатка от деления на (10^5)
// при делении на (10^5) возможно переполнение при "A1 := shl(temp, 16) + A1"
// поэтому сначала делится на 10, а затем на (10^4)
temp := A2 mod 10;
A2 := A2 / 10;
A1 := shl(temp, 16) + A1;
temp := A1 mod 10;
A1 := A1 / 10;
A0 := shl(temp, 16) + A0;
temp := A0 mod 10;
A0 := A0 / 10;
Frac_5 := temp;

temp := A2 mod divizor;
A2 := A2 / divizor;
A1 := shl(temp, 16) + A1;
temp := A1 mod divizor;
A1 := A1 / divizor;
A0 := shl(temp, 16) + A0;
temp := A0 mod divizor;
A0 := A0 / divizor;
Frac_5 := temp*10 + Frac_5;

// из A0 и A1 собирается целая часть числа
Int_8 := A0 + shl(A1, 16);

end_function_block

Думаю, что нужно переставлять байты полученного 32 разрядного числа. Это удобно делать и проверять сразу. Поэтому у меня этого нет.

p-nik
15.03.2024, 10:41
Блин, ну как зачем? Вы хотите чтоб одновременно не включались вообще или запуск разрешен, но с задержкой 5 сек., хотите чтоб приоритет был, у какого? Либо при каждом следующем включении попеременно включались? Вкл-выкл в течении менее5 сек. вариантов масса. То что у Вас , и не меняя логики , как Вы хотели, включится второй выход, через 5 сек 1-й. и при каждом включении так же будет . Я уж не спрашиваю про условия пуска. Поставьте л.з. Но этот вариант не будет отличаться от того что раньше рисовал Вам. Только сложнее.
74327

Вероятно Вы хотели что то типа счетчика сделать? N_start? Но это не так делается. Гадать сложно.

Всем спасибо! С л.з. всё работает как надо.


На форуме была подобная тема(если правильно понял вашу проблему), в смысле, если включаются одновременно более одного насоса(компрессора), точнее, подаются сигналы на запуск, то первый запускался сразу, а остальные по очереди, с определённым приоритетом и задержкой, чтобы снизить суммарный пусковой ток, Вы такой алгоритм хотите?
Короче, я много разных вариантов предлагал, вот один из них:

74329

Спасибо! Возьму на заметку

Сергей0308
15.03.2024, 11:28
Всем спасибо! С л.з. всё работает как надо.



Спасибо! Возьму на заметку

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

maintenancekbk24@gmail.com
18.03.2024, 14:24
Добрый день! Уважаемые комрады. Нужна помощь в программировании ПР100. Подскажите пожалуйста каким образом настроить переменную на аналоговый вход в дискретный режим, при котором напряжение логической единицы 4.5в, а логического нуля поставить 2В.

kondor3000
18.03.2024, 14:31
Добрый день! Уважаемые комрады. Нужна помощь в программировании ПР100. Подскажите пожалуйста каким образом настроить переменную на аналоговый вход в дискретный режим, при котором напряжение логической единицы 4.5в, а логического нуля поставить 2В.

Уровни в ПР можно настроить или использовать аналоговый вход в режиме входа по напряжению. Тогда вы сможете выловить любой нужный уровень.
Сделайте сравнение входа <2 и >4.4 и получите логическую единицу или 0.
А по факту достаточно только сравнить >4.4 и будет логическая 1, остальное 0.

Dimensy
18.03.2024, 15:27
Добрый день! Уважаемые комрады. Нужна помощь в программировании ПР100. Подскажите пожалуйста каким образом настроить переменную на аналоговый вход в дискретный режим, при котором напряжение логической единицы 4.5в, а логического нуля поставить 2В.

А так не прокатывает?
74470

shev1975
19.03.2024, 01:23
Простите за глупый вопрос, попытался запустить симуляцию ФБ, и ничего не получил. Вроде все сделал как на видео с ОФ канала на Ютуб. Версия 2.6.346.0
74484

Sergej_
19.03.2024, 04:30
Простите за глупый вопрос, попытался запустить симуляцию ФБ, и ничего не получил. Вроде все сделал как на видео с ОФ канала на Ютуб. Версия 2.6.346.0
74484
Прицепите переменную "результат" к какому нибудь выходу, или сделайте энергонезависимой.

maintenancekbk24@gmail.com
19.03.2024, 07:47
Спасибо за помощь!

Newcomer
21.03.2024, 09:25
Добрый день

Для запуска режима онлайн отладки следует нажать на кнопку (см. картинку). Не вижу такой кнопки на панели инструментов.

kondor3000
21.03.2024, 09:29
Добрый день

Для запуска режима онлайн отладки следует нажать на кнопку (см. картинку). Не вижу такой кнопки на панели инструментов.

Рядом с запуском симулятора, она не активна пока не подключите ПР онлайн 74561

Newcomer
21.03.2024, 09:36
Рядом с запуском симулятора, она не активна пока не подключите ПР онлайн 74561

Спасибо, узрел.

Newcomer
21.03.2024, 09:39
При подключении ПР200 к ПК Windows сама драйвер найдет или его надо устанавливать.

rapuk
22.03.2024, 11:07
Здравствуйте. Подскажите пожалуйста, не получается понять в какую сторону двигаться.
Имеется инкрементальный энкодер, который измеряет длину, подключен на быстрые входы(FI1, FI2) к реле ПР205. К дискретному входу I3 подключена кнопка без фиксации.
Необходимо записать значение количества импульсов энкодера в переменную "Кол-во импульсов №1" при нажатии на кнопку.
При повторном нажатии на кнопку записать новое значение в переменную "Кол-во импульсов №2" и т.д.
Есть ли возможность вывести на экран информацию в виде:

Нажатие 1 — 1267 импульсов
Нажатие 2 — 2430 импульсов
...
Нажатие N — 76395 импульсов

Логика подсказывает, что нет необходимости каждый раз создавать новую переменную, а добавлять новое значение в текстовое поле после нажатия. А как это реализовать непонятно.
74594
74595

Во вложении тестовый файл.

EFrol
22.03.2024, 11:31
Предлагаю реализовать FIFO-буфер:
74598

rapuk
22.03.2024, 11:48
Большое спасибо! Работает

Newcomer
22.03.2024, 13:24
Добрый день

На экране ПР200 создано 6 строк. Какая кнопка используется для перемещения по строкам ?

Cs-Cs
22.03.2024, 14:14
Это вопрос чьего-то теста на знание ОВЕНа?
Вариант ответа с одной кнопкой не подходит.

Newcomer
22.03.2024, 14:25
Это вопрос чьего-то теста на знание ОВЕНа?
Вариант ответа с одной кнопкой не подходит.

И какая это кнопка ?

Newcomer
22.03.2024, 15:03
В режиме отображения для перехода по строкам используются кнопки что на картинке.
Какие кнопки используются для перехода между строками в режиме редактирование в РЭ не написано.

При входе в режим редактирования попадаю в первую строку экрана и дальше не могу никуда перейти.

У меня кнопка Стрелка вниз используется для перехода между экранами. Эта же кнопка штатно предназначена для перехода между строками экрана в режиме отображения.

Cs-Cs
22.03.2024, 15:37
В режиме редактирования по строкам переходы НЕ работают.
Нужно прокрутить экран до нужной строки кнопками Вверх и Вниз, а потом через SEL редактировать.

EFrol
22.03.2024, 15:39
А чтобы продолжить навигацию по строкам надо выйти из режима редактирования (ESC или OK).

Newcomer
22.03.2024, 15:53
В режиме редактирования по строкам переходы НЕ работают.
Нужно прокрутить экран до нужной строки кнопками Вверх и Вниз, а потом через SEL редактировать.

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

rapuk
22.03.2024, 15:53
Подскажите, пожалуйста - можно ли задать максимальное значение "индикатора выполнения" на экране не статично, а равное переменной?
Т.е. есть переменная со значением 10000, индикатор должен отображать значения в пределах 0-10000

EFrol
22.03.2024, 16:02
Подскажите, пожалуйста - можно ли задать максимальное значение "индикатора выполнения" на экране не статично, а равное переменной?
Т.е. есть переменная со значением 10000, индикатор должен отображать значения в пределах 0-10000

Лучше отмасштабировать значение выводимой переменной.

rapuk
22.03.2024, 16:04
Подскажите как

EFrol
22.03.2024, 16:25
Допустим, что у нас индикатор отображает ValShow, у которого минимальное = 0, а максимальное = 100.
Нам известно фактическое максимальное ValMax и значение ValOut, которое надо отмасштабировать в ValShow.
Тогда самый простой способ:
74609

Королев Кирилл
22.03.2024, 16:48
Экран до нужной строки прокручивается в режиме просмотра ? Это сколько же придется переключаться из режима в режим что бы отредактировать все строки.

Если на экране находятся несколько доступных для редактирования элементов, то переходить между ними можно по клавише SEL:
74611
Для пролистывания именно строк нужно использовать стрелки

Newcomer
22.03.2024, 17:31
Если на экране находятся несколько доступных для редактирования элементов, то переходить между ними можно по клавише SEL:
74611



Для пролистывания именно строк нужно использовать стрелки
Пролистывание строк экрана при помощи стрелок возможно только в режиме просмотра.

EFrol
22.03.2024, 17:33
Пролистывание строк при помощи стрелок возможно только в режиме просмотра.

Да. Верно.

Newcomer
22.03.2024, 17:40
Да. Верно.

А как определить в каком режиме находишься, просмотр или редактирование ?

EFrol
22.03.2024, 17:43
А как определить в каком режиме находишься, просмотр или редактирование ?

Кажется, редактируемое значение мигает в режиме редактирования.

rapuk
22.03.2024, 17:48
Предлагаю реализовать FIFO-буфер:
74598

А подскажите - можно ли обнулить эти переменные при поступлении доп. импульса? Все счётчики с входом R работают только с булевыми значениями


Допустим, что у нас индикатор отображает ValShow, у которого минимальное = 0, а максимальное = 100.
Нам известно фактическое максимальное ValMax и значение ValOut, которое надо отмасштабировать в ValShow.
Тогда самый простой способ:
74609
Спасибо

Newcomer
22.03.2024, 18:13
т
Кажется, редактируемое значение мигает в режиме редактирования.

Вот человек мучается сейчас. Жмет SEL, заходит в режим редактирования, мигает первый параметр. Отредактировал первый параметр, жмет SEL. Параметр должен сохранится и должен произойти переход к редактированию следующего параметра, а этого не происходит. Параметр t предпр редактируется, а к остальным по SEL перейти не получается.

EFrol
22.03.2024, 18:13
Можно:
74614

EFrol
22.03.2024, 18:15
Вот человек мучается сейчас. Жмет SEL, заходит в режим редактирования, мигает первый параметр. Отредактировал первый параметр, жмет SEL. Параметр должен сохранится и должен произойти переход к редактированию следующего параметра, а этого не происходит.

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

Newcomer
22.03.2024, 18:23
Да. Я тоже не сразу привык. Поэтому вторую строчку использую для комментария, чтобы после редактирования нажимать сразу OK и далее листать до следующего параметра. Иногда первая строчка - наименование, вторая - единица измерения и рядом значение.

Если после редактирования нажать OK, то произойдет выход из режима редактирования. И зачем это надо ?

EFrol
22.03.2024, 18:38
Если после редактирования нажать OK, то произойдет выход из режима редактирования. И зачем это надо ?

Чтобы нажав дважды стрелочку вниз перейти к следующему параметру.

Newcomer
22.03.2024, 18:40
Кому должен? Из режимов редактирования традиционно есть 2 выхода - с принятием значения и без. Как бы не понять этого при наличии ESC и OK нужно быть очень отстранённым.

С выходом из режима редактирования проблем нет. Проблема в переходе к редактирования следующего параметра на том же экране.

Newcomer
22.03.2024, 18:55
Какая проблема?

По SEL нет перехода к редактированию следующего параметра.

1exan
22.03.2024, 18:56
т

Вот человек мучается сейчас. Жмет SEL, заходит в режим редактирования, мигает первый параметр. Отредактировал первый параметр, жмет SEL. Параметр должен сохранится и должен произойти переход к редактированию следующего параметра, а этого не происходит. Параметр t предпр редактируется, а к остальным по SEL перейти не получается.

Перейти можно только к следующему редактируемому параметру на отображаемых в данный момент строках (2шт), т.е. от "t предпр" по SEL перейти к "Тпрогр" или "Рразр" точно не получится

Nsft
26.03.2024, 11:50
Здравствуйте. Я только начинаю разбираться в данное среде, потому надеюсь на понимание. У меня возник вопрос касательно сетевых переменных, а именно их сброса. У объекта, с которым я общаюсь по rs485 есть регистры, которые мне нужно перезаписывать. При начале работы логики ПР в регистр записываются нули, так как еще не сработали триггеры на запись значений в регистры, что портит работу алгоритма, а также из-за постоянной перезаписи регистра объект зависает на время от 5 секунд до нескольких минут. Видел в документации, что у сетевых переменных можно делать запись в регистры по команде переменной. Я реализовал данный вариант, но как показала практика, запись все равно происходит, что с моей стороны кажется странным при наличии запрета записи. В связи с этим вопрос, как запретить запись значения в регистр если значение на входе не поменялось или реализовать как-то интервально?

CleanS
26.03.2024, 12:06
Все сетевые переменные энергонезависимые и они сохраняют своё значение при выключении устройства. Соответственно при запуске они (значения) будут восстановлены на те, что были в момент выключения.
После загрузки ПР и запуска прошивки можно по очереди обновить значения переменных, требующих корректировки.

kondor3000
26.03.2024, 12:20
Здравствуйте. Я только начинаю разбираться в данное среде, потому надеюсь на понимание. У меня возник вопрос касательно сетевых переменных, а именно их сброса. У объекта, с которым я общаюсь по rs485 есть регистры, которые мне нужно перезаписывать. При начале работы логики ПР в регистр записываются нули, так как еще не сработали триггеры на запись значений в регистры, что портит работу алгоритма, а также из-за постоянной перезаписи регистра объект зависает на время от 5 секунд до нескольких минут. Видел в документации, что у сетевых переменных можно делать запись в регистры по команде переменной. Я реализовал данный вариант, но как показала практика, запись все равно происходит, что с моей стороны кажется странным при наличии запрета записи. В связи с этим вопрос, как запретить запись значения в регистр если значение на входе не поменялось или реализовать как-то интервально?

Так работать не будет, надо не запись запрещать ( разрешать), а переменные изменять, когда вам надо.
Например по условию, по биту, по времени или инициализация при включении питания. Инициализация может быть 0 или заранее заданным числом.

rapuk
27.03.2024, 17:24
Подскажите, пожалуйста - столкнулся с проблемой определения импульса для записи значений в переменные "Длина"
Импульсы приходят с энкодера, который измеряет длину. Через определенную длину срабатывает автоматика отрезного механизма продолжительностью около 10 секунд.
На тестовых подключениях, где срабатывание автоматики я эмулировал нажатием кнопки без фиксации - все работает замечательно, таким методом(спасибо EFrol'у):
74772
Но, как оказалось - при включении отрезного механизма идёт не один импульс, а целый пакет импульсов общей продолжительностью 10 секунд.
В результате каждый следующий импульс обнуляет показания длины и я не вижу предыдущего значения - всё забивается нулями.
Победить получилось, используя FTRIG вместо RTRIG, т.е. по заднему фронту последнего импульса.
Можно ли как-то зафиксировать только первый импульс из пучка, сохранить в памяти значение длины, а затем подождать 15 секунд и записать значение в переменную?

EFrol
27.03.2024, 18:37
Один пропускает - следующий через 15 сек:
74777

Импульс формируется при паузе между входными импульсами более 1 секунды, т.е. в конце пачки:
74778
Если заменить FTRIG на RTRIG, то наоборот фиксирует начало пачки.

rapuk
27.03.2024, 20:21
Элегантно, спасибо

Сергей0308
27.03.2024, 20:55
Один пропускает - следующий через 15 сек:
74777

Импульс формируется при паузе между входными импульсами более 1 секунды, т.е. в конце пачки:
74778
Если заменить FTRIG на RTRIG, то наоборот фиксирует начало пачки.

Вот здесь, в посте #3526 макрос выкладывал для разруливания одновременного запуска 8 устройств: https://owen.ru/forum/showthread.php?t=26216&page=353
В смысле на выход пропускается первый импульс, последующие импульсы пройдут не ранее минимального периода следования, настраивается в свойствах макроса, вроде, как Вы хотите!
Можно использовать любой вход-выход(с одинаковым номером).

rapuk
28.03.2024, 12:52
Подскажите - можно ли вывести на экран значение активного таймера TOF?
Я задаю с экрана в него значение, например 15000 мс.
Подаю импульс на вход, запускается таймер 100...200...850...мс
Как вывести/записать в переменную это значение (850) на экран?

74800

74801

1exan
28.03.2024, 13:03
Подскажите - можно ли вывести на экран значение активного таймера TOF?
Я задаю с экрана в него значение, например 15000 мс.
Подаю импульс на вход, запускается таймер 100...200...850...мс
Как вывести/записать в переменную это значение (850) на экран?


Со стандартного TOF это значение не взять. Поищите на форуме самописные таймеры

Сергей0308
28.03.2024, 13:36
Здесь таймер выкладывал с паузой, прямым и обратным отсчётом времени: https://owen.ru/forum/showthread.php?t=33720&page=17&highlight=%F2%E0%E9%EC%E5%F0+%E4%EB%FF+%CF%D0200

EFrol
28.03.2024, 13:59
При симуляции Timer будет отставать из-за 100мс цикла - в приборе цикл короче - должен успевать:
74808


function_block Timer

var_input
I : bool;
end_var

var_output
Q : udint;
end_var

var
gen : SYS.BLINK;
rt : SYS.RTRIG;
end_var

gen(I:=I, Th:=T#10ms, Tl:=T#10ms); rt(I:=gen.Q);
if rt.Q then Q := Q + 20; end_if
if not I then Q := 0; end_if

end_function_block


А вот вообще сказка:


function_block Timer

var_input
I : bool;
end_var

var_output
Q : udint;
end_var

var
time_prev : udint;
end_var

if I then
Q := time_to_udint(get_time()) - time_prev;
else
Q := 0; time_prev := time_to_udint(get_time());
end_if

end_function_block

rapuk
28.03.2024, 15:08
Вроде в OWEN Logic всё логично, но есть не логичные моменты.
На экране есть несколько элементов "Ввод/вывод (int/float)" и "динамический текст". Элементы добавлялись в разное время.
При работе прибора и нажатии на экране кнопки "SEL" редактирование элементов производится не по порядку сверху-вниз, а как-то неочевидно:
74812

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

rapuk
28.03.2024, 15:54
При симуляции Timer будет отставать из-за 100мс цикла - в приборе цикл короче - должен успевать:
74808
...
А вот вообще сказка:


function_block Timer

var_input
I : bool;
end_var

var_output
Q : udint;
end_var

var
time_prev : udint;
end_var

if I then
Q := time_to_udint(get_time()) - time_prev;
else
Q := 0; time_prev := time_to_udint(get_time());
end_if

end_function_block


Работает, большое спасибо. А по-поводу порядка элементов на экране не подскажете?

kondor3000
28.03.2024, 16:16
Подскажите - можно ли вывести на экран значение активного таймера TOF?
Я задаю с экрана в него значение, например 15000 мс.
Подаю импульс на вход, запускается таймер 100...200...850...мс
Как вывести/записать в переменную это значение (850) на экран?


Вот таймеры TOF и TOF_P с выходом ET и паузой 74819

Королев Кирилл
28.03.2024, 16:26
Вроде в OWEN Logic всё логично, но есть не логичные моменты.
На экране есть несколько элементов "Ввод/вывод (int/float)" и "динамический текст". Элементы добавлялись в разное время.
При работе прибора и нажатии на экране кнопки "SEL" редактирование элементов производится не по порядку сверху-вниз, а как-то неочевидно:
74812

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

Порядок выбора элементов обусловлен их положением в меню "компоненты экрана". Можно перетаскивать элементы для изменения порядка выбора.
74823
Дополним описание в справке по этому поводу

rapuk
28.03.2024, 16:34
Порядок выбора элементов обусловлен их положением в меню "компоненты экрана". Можно перетаскивать элементы для изменения порядка выбора.
74823
Дополним описание в справке по этому поводу

Спасибо, оказывается порядок этих элементов "снизу вверх" :)

Dimensy
28.03.2024, 19:03
Порядок выбора элементов обусловлен их положением в меню "компоненты экрана". Можно перетаскивать элементы для изменения порядка выбора.

А для ПР200 что-то похожее можно организовать?

1exan
28.03.2024, 19:05
А для ПР200 что-то похожее можно организовать?

Поддерживаю, очень не хватает такого инструмента (копипастом очень неудобно)

Сергей0308
28.03.2024, 19:52
Поддерживаю, очень не хватает такого инструмента (копипастом очень неудобно)

Не понял юмора, в смысле, Вы копипастом как сможете изменить порядок(очерёдность) выбора переменных(элементов) в ПР200?

Dimensy
28.03.2024, 21:03
Не понял юмора, в смысле, Вы копипастом как сможете изменить порядок(очерёдность) выбора переменных(элементов) в ПР200?

нет, потому что непонятно в каком порядке они будут обходится по кнопке ALT. А постоянно грузить программу в прибор и проверять - это как-то не комильфо

1exan
29.03.2024, 04:58
Не понял юмора, в смысле, Вы копипастом как сможете изменить порядок(очерёдность) выбора переменных(элементов) в ПР200?

Как я понял, на очередность как раз влияет разница "по высоте в слое" элементов ввода

ProRus
01.04.2024, 13:23
Подскажите как число с плавающей запятой состоящее из 15 цифр разделить на три числа по 5 цифр и превратить в целочисленное?
Например имею число 123456789123456, хочу его разделить на 12345, 67891, 23456.
Такое возможно?
На Python такое получается на раз, в Owen Logic не выходит.
74887
float32 вообще в пр102 32 бита?
Может на ST такой фокус пройдет?

petera
01.04.2024, 13:41
Подскажите как число с плавающей запятой состоящее из 15 цифр разделить на три числа по 5 цифр и превратить в целочисленное?
Например имею число 123456789123456, хочу его разделить на 12345, 67891, 23456.
Такое возможно?
На Python такое получается на раз, в Owen Logic не выходит.
74887
float32 вообще в пр102 32 бита?
Может на ST такой фокус пройдет?
Не дурите голову, в ОЛ используется Float (IEEE754)

О каких 15 знаках может идти речь?
Точность переменной с плавающей точкой IEEE754 (для мантиссы отводится всего 23 бита из 32) всего лишь 7 цифр, даже неважно где будет стоять запятая, т.е.

0.ххххххх
х.хххххх
хх.ххххх
ххх.хххх
хххх.ххх
ххххх.хх
хххххх.х
ххххххх

таким образом всего 9 999 999

EFrol
01.04.2024, 14:09
Подскажите как число с плавающей запятой состоящее из 15 цифр разделить на три числа по 5 цифр и превратить в целочисленное?
Например имею число 123456789123456, хочу его разделить на 12345, 67891, 23456.
Такое возможно?
На Python такое получается на раз, в Owen Logic не выходит.
74887
float32 вообще в пр102 32 бита?
Может на ST такой фокус пройдет?

Да мантисса этого числа займет 46 бит. Если есть желание Вы можете представить это число как два 32-битных, например:
28744 * 232 + 2249167232 = 123456789123456
Далее воспользоваться макросом https://owen.ru/forum/showthread.php?t=26216&p=431974&viewfull=1#post431974

74891

ProRus
01.04.2024, 14:11
в итоге то что, в ОЛ не получилось, где скрин, что выходит вместо нужного

74893
74895

ProRus
01.04.2024, 14:13
Не дурите голову, в ОЛ используется Float (IEEE754)

О каких 15 знаках может идти речь?
Точность переменной с плавающей точкой IEEE754 (для мантиссы отводится всего 23 бита из 32) всего лишь 7 цифр, даже неважно где будет стоять запятая, т.е.

0.ххххххх
х.хххххх
хх.ххххх
ххх.хххх
хххх.ххх
ххххх.хх
хххххх.х
ххххххх

таким образом всего 9 999 999
Понял, пошел изучать мат. часть... :)
Спасибо!

ProRus
01.04.2024, 14:14
Да мантисса этого числа займет 46 бит. Если есть желание Вы можете представить это число как два 32-битных, например:
28744 * 232 + 2249167232 = 123456789123456
Далее воспользоваться макросом https://owen.ru/forum/showthread.php?t=26216&p=431974&viewfull=1#post431974

74891

Спасибо за подсказку!

capzap
01.04.2024, 14:19
74893
74895

а теперь повторите результат в питоне, приведя число действительно к float32 74898

capzap
01.04.2024, 16:15
да там не про float, зачем ProRus его приплел, непонятно

потому что с целочисленными шансов еще меньше 74900, даже не повторить первую часть

Валенок
01.04.2024, 16:19
Да там не 32 бита, а какой-то long
нету ж точки после 2-й шестерки

Traveller
25.04.2024, 19:18
Доброго времени суток коллеги!
Сейчас делаю один проект и отрабатываю один алгоритм, суть состоит в том что мне нужно некую в некотором плане хаотичную последовательность импульсов идущую с частотой порядка 2-5 Гц. разделять на минимальные и максимальные значения этой частоты + выделять среднее значение, в принципе я макрос этот сваял как сумел один макрос взял из базы и он как бы работает, в режиме отладки, т.е. если я руками задаю ему числа, он их селектирует по нужным критериям, но вот если я его вставляю в программу и запускаю ее в режиме симулятора, то на выходах этого макроса значки бесконечности, т.е. макрос не работает, что я делаю не так?
Ну и собственно саму тестовую программку выкладываю
https://owen.ru/forum/attachment.php?attachmentid=75427&stc=1&d=1714061798
https://owen.ru/forum/attachment.php?attachmentid=75428&stc=1&d=1714061809
Сама программка
https://owen.ru/forum/attachment.php?attachmentid=75429&stc=1&d=1714061866

kondor3000
25.04.2024, 19:57
Доброго времени суток коллеги!
Сейчас делаю один проект и отрабатываю один алгоритм, суть состоит в том что мне нужно некую в некотором плане хаотичную последовательность импульсов идущую с частотой порядка 2-5 Гц. разделять на минимальные и максимальные значения этой частоты + выделять среднее значение, в принципе я макрос этот сваял как сумел один макрос взял из базы и он как бы работает, в режиме отладки, т.е. если я руками задаю ему числа, он их селектирует по нужным критериям, но вот если я его вставляю в программу и запускаю ее в режиме симулятора, то на выходах этого макроса значки бесконечности, т.е. макрос не работает, что я делаю не так?


У вас в первом цикле, происходит деление на 0 и в макросе в Max и Avg записывается бесконечность, что логично 75430
Достаточно было включить проект по шагам и всё видно. Сделайте задержку на входе макроса или не делите на 0.

Traveller
25.04.2024, 20:15
У вас в первом цикле, происходит деление на 0 и в макросе в Max и Avg записывается бесконечность, что логично 75430
Достаточно было включить проект по шагам и всё видно.Странно, в режиме отладки самого макроса, такого не было, хотя там тоже ноль присутствовал, ну да ладно, значит нужно устранять эту лажу, что по моему не так сложно... :) Большое спасибо за подсказку!!! :)

Сергей0308
25.04.2024, 20:16
Так какой смысл, велосипед изобретать, тем более если он не получается, в смысле, на форуме много раз выкладывали макросы экстремумов и расчёта среднего значения, например среднее за период или среднее скользящим окном.

Traveller
25.04.2024, 20:24
Так какой смысл, велосипед изобретать, тем более если он не получается, в смысле, на форуме много раз выкладывали макросы экстремумов и расчёта среднего значения, например среднее за период или среднее скользящим окном.Мне легче самому сделать, или вопрос здесь задать, чем перелопачивать весь форум в поисках простого ответа, там более что усреднить данные я и без помощи форума могу...
И вообще у вас по делу есть что сказать, или вы снова тут решили интеллект свой продемонстрировать? :)
И да можете не продолжать задачка уже решена, все Ок!

bayk
25.04.2024, 23:08
Народ! под вечер очень туплю! мне нужен энергонезависимый таймер (счетчик) с обратным отсчетом в минутах. мне надо запустить его по поджатой энергонезависимой переменной, и он должен начать обратный отсчет в минутах до окончания (желательно чтоб показывал сколько осталось) но если пропадет питание, а потом снова появится он должен продолжить считать откуда остановился. а если переменная будет снята - сбросится.

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

RomanKk
25.04.2024, 23:57
Установил последнюю версию ОЛ, в библиотеке макросов нет описания макросов, хотя раньше были. Баг, глюк или описания убрали?

СергейПалехов
26.04.2024, 09:50
Установил последнюю версию ОЛ, в библиотеке макросов нет описания макросов, хотя раньше были. Баг, глюк или описания убрали?

Здравствуйте! Описание макросов можно посмотреть в Онлайн базе менеджера компонентов. В последней версии OwenLogic(2.6.348.0) данная функция доступна.
Рdf-описания макросов из онлайн базы можно скачать и хранить на ПК.
С уважением, старший инженер технической поддержки, Палехов С.А.

novinky
03.05.2024, 11:58
отличие работы ФуНкции и Функционального Блока.
Не могу понять почему функция в коде работает не корректно, передает результат условия наименьшего бита равного 1, прим: i1=1 & i2=1 sum=1. Подскажите пожалуйста.
function fN_bool_TO_int: udint;

var_input
i1 : bool;
i2 : bool;
end_var

var
sum : udint; //сумма
ft1 : bool; //триггер фронта i1
ft2 : bool; //триггер фронта i2
end_var

IF i1 & NOT ft1 THEN
ft1 := i1;
sum := sum + 1;
ELSIF NOT i1 & ft1 THEN
ft1 := i1;
sum := sum - 1;
ELSIF i2 & NOT ft2 THEN
ft2 := i2;
sum := sum + 2;
ELSIF NOT i2 & ft2 THEN
ft2 := i2;
sum := sum - 2;
END_IF

fN_bool_TO_int := sum;

end_function

Практически аналогичный код в ФБ работает без замечаний.
function_block fB_bool_TO_int

var_input
i1 : bool;
i2 : bool;
end_var

var_output
q : udint;
end_var

var
sum : udint; //сумма
ft1 : bool; //триггер фронта i1
ft2 : bool; //триггер фронта i2
end_var

IF i1 & NOT ft1 THEN
ft1 := i1;
sum := sum + 1;
ELSIF NOT i1 & ft1 THEN
ft1 := i1;
sum := sum - 1;
ELSIF i2 & NOT ft2 THEN
ft2 := i2;
sum := sum + 2;
ELSIF NOT i2 & ft2 THEN
ft2 := i2;
sum := sum - 2;
END_IF

q := sum;

end_function_block

EFrol
03.05.2024, 12:03
В ФБ все переменные сохраняют свои значения до следующего вызова,
а в функции нет - инициализируются значениями по-умолчанию!
Свой ФБ Вы можете вызывать без передачи параметров, например (fB_bool_TO_int()),
значение входных останутся теми же, которые были при первом вызове.
А вот функция без параметров - ошибка.
В ФБ если алгоритм не изменил значения внутренних или выходных переменных,
то они тоже сохраняются между вызовами.
По аналогии с ООП ФБ - это объекты со своими полями.

Cs-Cs
03.05.2024, 12:12
novinky Собственно, в этом и отличие по их работе и есть.
Функция НЕ запоминает своё состояние ВООБЩЕ. Поэтому все переменные там НЕ сохраняются никогда и никак. Они обсчитываются только на момент вызова функции.
Это используется, когда надо сделать одни и те же вычисления для разных данных. Функции занимают память один раз: на сам код функции. В программе идёт обращение к одному и тому же коду из разных мест.
Функциональный Блок запоминает состояние всех переменных внутри. Но он будет потреблять больше памяти: на каждый экземпляр функционального блока будет выделяться своя отдельная память, так как разные экземпляры блоков могут иметь разное состояние внутренних переменных.

novinky
03.05.2024, 12:21
классическое объяснение про ПЛК гласит:
- ПЛК опрашивает входа и запоминает их значения,
- выполняет код,
- записывает результат в выхода.

Если i1=1 и i2=1, то согласно учению, ПР должен выдать sum=3

EFrol
03.05.2024, 12:27
классическое объяснение про ПЛК гласит:
- ПЛК опрашивает входа и запоминает их значения,
- выполняет код,
- записывает результат в выхода.

Если i1=1 и i2=1, то согласно учению, ПР должен выдать sum=3

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

novinky
03.05.2024, 12:35
Если i1=1, Затем i2=1, то почему сумму не выдает по последнему вызову?

novinky
03.05.2024, 13:42
Др несоответствие: если i1=1 и i2=1, получается не дойдя до END_IF выдает неверную сумму? Мне думается в др ПЛК результат будет = 3.

Dimensy
03.05.2024, 14:06
отличие работы ФуНкции и Функционального Блока.
Не могу понять почему функция в коде работает не корректно, передает результат условия наименьшего бита равного 1, прим: i1=1 & i2=1 sum=1. Подскажите пожалуйста.


Напишите


fN_bool_TO_int.0 := i1;
fN_bool_TO_int.1 := i2;

и будет вам счастье

novinky
03.05.2024, 15:07
OK спасибо, попробовали через несколько IF, получили желаемый результат через функцию.
Тогда почему:
1 - "сколько раз не вызывайте функцию, ft1 и ft2 будут всегда FALSE, поэтому 3 ни когда не получите, сперва один потом два"все же значение первого сложения не потерялась "внутренняя память" перед вычислением по 2 входу?
2 - в ФБ, "если всё сделано через ELSIF. Сработает только одно условие", по первому совпавшему условию не прекращает перебирать ELSIF и суммировать?

novinky
05.05.2024, 02:27
Напишите


fN_bool_TO_int.0 := i1;
fN_bool_TO_int.1 := i2;

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

Dimensy
05.05.2024, 02:37
Можно больше строк пожалуйста, не понял в каком месте это написать и как связать с остальной частью
Пожалуйста


function fN_bool_TO_int: udint;

var_input
i1 : bool;
i2 : bool;
end_var

fN_bool_TO_int.0 := i1;
fN_bool_TO_int.1 := i2;

end_function

novinky
05.05.2024, 02:39
[CODE]
если бы не потерялось, то было бы 3, но Вы его так и не получили, а получали как раз двойку, потому что 0 + 2 будет 2 По мимо ft1 и ft2, sum тоже всегда равно нулю

IF i1 & NOT ft1 THEN
ft1 := i1;
sum := sum + 1;
ELSIF NOT i1 & ft1 THEN
ft1 := i1;
sum := sum - 1;
ELSIF i2 & NOT ft2 THEN
ft2 := i2;
sum := sum + 2;
ELSIF NOT i2 & ft2 THEN
ft2 := i2;
sum := sum - 2;
END_IF

fN_bool_TO_int := sum;

Почему тогда если ни одно условие не выполняется напр: i2 & ft2 предыдущее значение "2" сохраняется? Почему так же не переинициализируется и fN_bool_TO_int := sum; не возвращает "0"?

Dimensy
05.05.2024, 02:51
IF i1 & NOT ft1 THEN
ft1 := i1;
sum := sum + 1;
ELSIF NOT i1 & ft1 THEN
ft1 := i1;
sum := sum - 1;
ELSIF i2 & NOT ft2 THEN
ft2 := i2;
sum := sum + 2;
ELSIF NOT i2 & ft2 THEN
ft2 := i2;
sum := sum - 2;
END_IF

fN_bool_TO_int := sum;

Почему тогда если ни одно условие не выполняется напр: i2 & ft2 предыдущее значение "2" сохраняется? Почему так же не переинициализируется и fN_bool_TO_int := sum; не возвращает "0"?

Функция при каждом вызове выполняется как в первый раз, с чистого листа. Т.е., при каждом вызове у вас будет и sum и ft1 и ft2 равны нулю

AlexandrGr
05.05.2024, 08:43
sum и ft1 и ft2 равны нулю

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

RomanKk
05.05.2024, 11:52
Подскажите реализацию несложного функционала (я в этом новичек, поэтому вопросы возникают даже на несложных задачах).
Есть щит управления и кнопка без фиксации (DO1 на ПР200), также к ПР подключена ESP32 в качестве мастера.
Суть задачи, кнопкой без фиксации запускать систему с задержкой 2с, статус должен отображатся в ESP. Выключить систему можно как той же кнопкой (также задержка 2с), так и с ESP. Если выключить с ESP, то повторное нажатие на кнопку опять запустит систему. То есть это старт/стоп системы как кнопкий на щите, так и с ESP.

Кстати, получилось вот такое, вроде работает, но все же на другие варианты хотелось бы посмотреть.
75539

novinky
05.05.2024, 12:22
Пожалуйста


function fN_bool_TO_int: udint;

var_input
i1 : bool;
i2 : bool;
end_var

fN_bool_TO_int.0 := i1;
fN_bool_TO_int.1 := i2;

end_function


Спасибо, очень Интересно, но не понятно. Могли бы весь код или разъяснить

novinky
05.05.2024, 12:33
чем Вы можете доказать что когда либо выполняется это условие в ФУНКЦИИ? Во второй цикл контроллера, когда i2 равно TRUE, ft2 будет равно FALSE. Эту аксиому Вам неоднократно здесь повторяли разные люди. Вот для наглядности видео
Это мое недопонимание тут разъяснили.

Функция при каждом вызове выполняется как в первый раз, с чистого листа. Т.е., при каждом вызове у вас будет и sum и ft1 и ft2 равны нулю
И я понял, Спасибо.

kondor3000
05.05.2024, 12:57
Подскажите реализацию несложного функционала (я в этом новичек, поэтому вопросы возникают даже на несложных задачах).
Есть щит управления и кнопка без фиксации (DO1 на ПР200), также к ПР подключена ESP32 в качестве мастера.
Суть задачи, кнопкой без фиксации запускать систему с задержкой 2с, статус должен отображатся в ESP. Выключить систему можно как той же кнопкой (также задержка 2с), так и с ESP. Если выключить с ESP, то повторное нажатие на кнопку опять запустит систему. То есть это старт/стоп системы как кнопкий на щите, так и с ESP.

Кстати, получилось вот такое, вроде работает, но все же на другие варианты хотелось бы посмотреть.
75539

Например так 75542

EFrol
05.05.2024, 13:10
Подскажите реализацию несложного функционала (я в этом новичек, поэтому вопросы возникают даже на несложных задачах).
Есть щит управления и кнопка без фиксации (DO1 на ПР200), также к ПР подключена ESP32 в качестве мастера.
Суть задачи, кнопкой без фиксации запускать систему с задержкой 2с, статус должен отображатся в ESP. Выключить систему можно как той же кнопкой (также задержка 2с), так и с ESP. Если выключить с ESP, то повторное нажатие на кнопку опять запустит систему. То есть это старт/стоп системы как кнопкий на щите, так и с ESP.

Кстати, получилось вот такое, вроде работает, но все же на другие варианты хотелось бы посмотреть.
75539

Биты в сетевых переменных можно менять и считывать откуда хочешь:
75543

Dimensy
05.05.2024, 13:19
Спасибо, очень Интересно, но не понятно. Могли бы весь код или разъяснить

Это весь код. Может так будет понятно?
75545

novinky
06.05.2024, 03:27
Это весь код. Может так будет понятно?

Спасибо, эта таб ясна и понятна. Раньше встречал возврат функцией только в одну строку. Думал функция просто возвращает результирующее значение без присваивания самой функции значений. Тем более в нескольких строках fn.0, fn.1, .. ; и происходит как работа с массивом; и bool-ы записываются в функцию "с типом" udint

kondor3000
06.05.2024, 07:48
Спасибо, эта таб ясна и понятна. Раньше встречал возврат функцией только в одну строку. Думал функция просто возвращает результирующее значение без присваивания самой функции значений. Тем более в нескольких строках fn.0, fn.1, .. ; и происходит как работа с массивом; и bool-ы записываются в функцию "с типом" udint

Только не с массивом, это называется упаковка бит в маску, через точку. В регистр упаковывается до 16 бит. Аналогично можно распаковать биты из маски.

Виктор888
07.05.2024, 15:57
Здравствуйте. Есть например макрос, взятый из менеджера компонентов и если его размножить например на 5 штук, отредактировать любой из них, то все изменения переносятся на остальные. Почему так происходит и как этого избежать?

melky
07.05.2024, 16:10
Виктор888 потому что это не 5 макросов а 5 экземпляров одного макроса. Если вам нужна немного другая логика работы макроса, надо сохранить его как новый макрос, дав ему новое имя и чтобы у него поменялся так же ID.

Сергей0308
07.05.2024, 16:12
Здравствуйте. Есть например макрос, взятый из менеджера компонентов и если его размножить например на 5 штук, отредактировать любой из них, то все изменения переносятся на остальные. Почему так происходит и как этого избежать?

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

Евгений Fishing
14.05.2024, 11:44
Подскажите как скачать программу с контроллера овен пр200?

Sergej_
14.05.2024, 11:46
Никак не скачать.

МихаилГл
14.05.2024, 12:15
Подскажите как скачать программу с контроллера овен пр200?

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

Kliper
17.05.2024, 19:31
В инструкциях к ПРкам есть таблицы с описанием регистров Модбас.
Вопрос: сама ПРка (программа) не может к ним обращаться? К часикам например читать/писать?

Сергей0308
17.05.2024, 19:44
В инструкциях к ПРкам есть таблицы с описанием регистров Модбас.
Вопрос: сама ПРка (программа) не может к ним обращаться? К часикам например читать/писать?

Есть сервисные переменные: Секунды, Минуты, Часы, День, Месяц, Год - можно использовать их в программе, зачем там что-то "мудрить", тем более лезть в сетевые переменные?!

75831

Kliper
17.05.2024, 23:32
Спасибо за информацию. А почему бы и не лезть, если надо?
Почитал про "гуляющие" часы, подумал можно ли их корректировать программно. В таблице регистров их увидел,а в лоджике не вижу. Вот и спрашиваю.
Странно. В 205-ой сервисных переменных у меня нет вообще. Но часы то там есть.
Жаль, что нельзя править значения. Тогда "Электронику 55" сделали бы сами.
Еще вопрос: есть ли вообще список по моделям где есть сервисные переменные, а где нет?

kondor3000
18.05.2024, 09:33
Спасибо за информацию. А почему бы и не лезть, если надо?
Почитал про "гуляющие" часы, подумал можно ли их корректировать программно. В таблице регистров их увидел,а в лоджике не вижу. Вот и спрашиваю.
Странно. В 205-ой сервисных переменных у меня нет вообще. Но часы то там есть.
Жаль, что нельзя править значения. Тогда "Электронику 55" сделали бы сами.
Еще вопрос: есть ли вообще список по моделям где есть сервисные переменные, а где нет?

Кто вам мешает, взять переменные времени, например с панели и их использовать в программе? В панели время идёт намного точнее.
В ПР205 можно назначить переменные времени и их использовать, но точность хода часов, судя по отзывам, как у всех ПР никакая.

Kliper
18.05.2024, 13:21
Так а корректировать-то их нельзя?

АРТ.Кар 64
18.05.2024, 13:36
«Жизнь невозможно повернуть назад,
И время ни на миг не остановишь.

Как можно "корректировать" время ? На то оно и время.
"Корректировать" нельзя. А вот "остановить" можно.
Вспомните Шляпника и Мартовского Зайца. Чем "остановка "времени для них обернулась.
Насколько помнится Время можно только синхронизировать.
Что касается точности...На ПР 200-24 у меня "отставание" примерно 1-2 сек в сутки

https://disk.yandex.ru/d/8FAkMy6OqU0MWQ

Если вот на таком оборудовании "Время" и "Дату" поменять можно легко,то на ПР- ках ....Сложно сказать..
Впрочем еслм переменные "Секунды",минуты" ,"часы" и т.д. являются "редактируемыми"-то попробовать можно.

mac056
24.05.2024, 09:58
Добрый день. Прошу помощи, несколько дней уже ломаю голову, не пойму как решить проблему.
Описание: Управление осуществляется с помощью одного входа на который заведен gsm-модуль и дублирующая кнопка (по месту). Необходимо при первом нажатии активировать выход Q1, при втором, выход Q2. И так поочередно. Т.е. если сигнал поступил, всегда активен только один выход, если не вышло время и не сработал концевик. Задан интервал времени 40сек, на работу выходов, за это время должны сработать один из датчиков (концевики) и сбросить сигнал, повторным нажатием на кнопку возможно активировать только тот выход, на который не сработал датчик.
Сделал первый вариант, вроде бы все работало, но увеличил скорость работы двигателя и заготовка пролетела концевик, не сбросив цикл, а таймер еще не вышел, в общем последствия не очень!
76000
Переключение выходов сделал в макросе через D триггер с отрицанием одного из выхода. Второй вариант сделал так же через D триггер на каждый выход и вроде бы все хорошо. выхода переключаются, концевики сбрасывают цикл и таймеры. Но, при активации выхода Q1 и входа I2 происходит переключение на выход Q2 и ни как не могу это победить, концевики должны делать полный сброс с выходов
76001

EFrol
24.05.2024, 11:41
А если во время пуска оба датчика не активны?

Dimensy
24.05.2024, 11:42
Добрый день. Прошу помощи, несколько дней уже ломаю голову, не пойму как решить проблему.
Описание: Управление осуществляется с помощью одного входа на который заведен gsm-модуль и дублирующая кнопка (по месту). Необходимо при первом нажатии активировать выход Q1, при втором, выход Q2. И так поочередно. Т.е. если сигнал поступил, всегда активен только один выход, если не вышло время и не сработал концевик. Задан интервал времени 40сек, на работу выходов, за это время должны сработать один из датчиков (концевики) и сбросить сигнал, повторным нажатием на кнопку возможно активировать только тот выход, на который не сработал датчик.
Сделал первый вариант, вроде бы все работало, но увеличил скорость работы двигателя и заготовка пролетела концевик, не сбросив цикл, а таймер еще не вышел, в общем последствия не очень!
Переключение выходов сделал в макросе через D триггер с отрицанием одного из выхода. Второй вариант сделал так же через D триггер на каждый выход и вроде бы все хорошо. выхода переключаются, концевики сбрасывают цикл и таймеры. Но, при активации выхода Q1 и входа I2 происходит переключение на выход Q2 и ни как не могу это победить, концевики должны делать полный сброс с выходов


А если так сделать?

76011

Вот еще аварийный стоп добавил

76012

Сергей0308
24.05.2024, 12:11
А если так сделать?

76011

Вот еще аварийный стоп добавил

76012

Для счётного входа Д-триггера не нужен детектор переднего фронта, он и так работает по фронту сигнала!
И, обычно для сигналов стоп и аварийный стоп используют размыкающиеся(нормально-замкнутые) контакты кнопки.

Dimensy
24.05.2024, 12:20
Для счётного входа Д-триггера не нужен детектор переднего фронта, он и так работает по фронту сигнала!
И, обычно для сигналов стоп и аварийный стоп используют размыкающиеся(нормально-замкнутые) контакты кнопки.

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

Сергей0308
24.05.2024, 12:30
Без RTRIG запуск будет при отпускании кнопки
Аварийный стоп сделан на размыкание кнопки
Можно, конечно, еще поковыряться в алгоритме, можно и на ST написать.

Речь о работе Д-триггера, в смысле, если Вы уберёте детектор переднего фронта на счётном входе - разницы в его работе не будет!
По аварийному стопу, виноват, не заметил инвертор.

mac056
24.05.2024, 12:38
Вроде победил, немного переделал в макросе Д-триггер.
76013
Dimensy спасибо за два варианта, единственное что обратил внимание, если движение идет в одну сторону, например Q1 и срабатывает его концевик и если заготовка случайно его проскочит, то при повторном запуске, он опять начнет с него же., т.е. будет активен опять Q1.
Финальный вид. Добавил вход для оптического датчика присутствия, для включения звукового индикатора и останова работы на закрытие и вывод индикации на лампы при работе.
76014

Dimensy
24.05.2024, 12:53
Вроде победил, немного переделал в макросе Д-триггер.
Dimensy спасибо за два варианта, единственное что обратил внимание, если движение идет в одну сторону, например Q1 и срабатывает его концевик и если заготовка случайно его проскочит, то при повторном запуске, он опять начнет с него же., т.е. будет активен опять Q1.
Финальный вид. Добавил вход для оптического датчика присутствия, для включения звукового индикатора и останова работы на закрытие и вывод индикации на лампы при работе.


Что же это за концевик такой, что его проскочить можно?
Ладно, вот поправил

mac056
24.05.2024, 13:02
В качестве концевиков использовал индуктивные датчики бд-сенсор вби, пластины-актуаторы сделал около 5см шириной, но тяжелая заготовка на скорости примерно 10км/ч, инерции может хватить пролететь его, хотя и сделал динамическое торможение. Но лишний раз рисковать не охото. Еще раз спасибо за помощь!