PDA

Просмотр полной версии : мигание и постоянная индикация ПР200-СП307



CFC-ST
15.11.2023, 15:11
Добрый день!
есть СП307 master и ПР200 slave и еще одно устройство slave
ПР200 "выдает" сигнализацию аварийного события (бит): 0, меандр 0,5 сек, постоянно 1.
необходимо состояние этого бита вывести как звук/лампочку на СП307
в обмене между ПР200 и СП307 ещё 30 разных регистров
нужно сделать так, чтобы меандр на СП307 звучал бы максимально в такт ПР200.

сейчас получается, что звук идет как-то без всякой синхронизации. прогадает на пару сек, появляется.

при этом звук на СП307 получаю по вкладке зуммер.

подскажите, как примерно такую задачу решать.

Dimensy
15.11.2023, 15:21
Пусть ПР200 просто выдает в сеть активный бит, а моргание со звуком реализовать в самой панели

CFC-ST
15.11.2023, 16:06
Понимаю, но по сути этот бит ПР200 выдаёт три состояния. 0, меандр, 1
тогда надо выделить из "этого" бита -два других. один отвечает за наличие мигания, другой за наличие/отсутствие постоянного горения.
как организовать бит , отвечающий за мигание, не понимаю Был бы таймер перезапускаемый, но такого нет. что-то не придумалось как сделать.

Что касается моргания со звуком в СП307. Понимаю, что для этого нужен макрос с использованием PSB4 (мигание 0,5 сек) и с опросом "битов" ПР200". Тут как бы ясность есть.

Dimensy
15.11.2023, 16:13
Пусть ПР200 выдает в сеть не бит а целое число: 0 - это отсутствует горение, 1 - постоянное горение, 2 - меандр
Грубо говоря - это два бита получается

EFrol
15.11.2023, 16:14
Я делаю так:
Зуммеру ставлю управляющий бит PSB1, который всегда 0.
Ставлю галочку "дин.адр." и указываю адрес регистра в ПР200.
Соответственно меняя значение регистра получаю различные сигналы:
3 - меандр 1 Гц - PSB1+3 = PSB4
5 - меандр 3 Гц - PSB1+5 = PSB6
65535 - постоянный сигнал PSB1+(-1) = PSB0

71628

CFC-ST
15.11.2023, 19:22
спасибо за советы. Как в СП307 сделать я примерно понял. Разберусь. Просто еще не освоил динамическую адресацию.
А вот по ПР200 все-таки нужен совет.
То, что передавать в СП307 целое число понятно.
А как получить это число не понимаю. У меня по сути есть битовая переменная, которая имеет (с точки зрения логики) три состояния. не горит, горит и мигает.
как получить отсюда целое число, например 0, 1, 2 - нужен совет.

kondor3000
15.11.2023, 19:35
спасибо за советы. Как в СП307 сделать я примерно понял. Разберусь. Просто еще не освоил динамическую адресацию.
А вот по ПР200 все-таки нужен совет.
То, что передавать в СП307 целое число понятно.
А как получить это число не понимаю. У меня по сути есть битовая переменная, которая имеет (с точки зрения логики) три состояния. не горит, горит и мигает.
как получить отсюда целое число, например 0, 1, 2 - нужен совет.

Включением одного бита можно передать только 2 состояния, 3 состояния- только 2 битами.
С ПР200 всё равно биты передаются словами ( регистрами), можно в регистр записать число от 0 до 2 ( будут 3 состояния).
Либо в одном регистре можно упаковать, распаковать до 16 бит, если все биты выключены, то в регистре 0, при включении 0 бита в регистре будет число 1,
1 бита-число 2, 2 бита -4, 3 бита-8 и т. д. Соответственно 0 и 1 битом можно сделать числа 0, 1 и 2

CleanS
15.11.2023, 21:04
...
А как получить это число не понимаю. У меня по сути есть битовая переменная, которая имеет (с точки зрения логики) три состояния. не горит, горит и мигает.
как получить отсюда целое число, например 0, 1, 2 - нужен совет.

Можно использовать блок SEL, управление битовое, а присвоение значения целочисленное.

Вот, для примера.

71637

EFrol
15.11.2023, 21:12
Ну или так:
71638
каждый вход будет включать свою трель
(с понижением приоритета)

CFC-ST
15.11.2023, 22:03
так то он так. Но
если уже есть 2 бита, то понятно
можно их сочетаниям присвоить целые значения,
но изначально нет двух бит.
есть битовая переменная, которая имеет конечно же два значения, 0 и 1.
Но это битовая переменная иногда бывает постоянно 0, иногда бывает постоянно 1, а иногда переключается 0,5 сек "0", 0,5 сек "1" те периодически меняет значение.
вот имея эту переменную - как получить целочисленную переменную, где
0- "0" битовой переменной
1- "мигание" битовой переменной
2- "1" битовой переменой

Dimensy
15.11.2023, 23:06
так то он так. Но
если уже есть 2 бита, то понятно
можно их сочетаниям присвоить целые значения,
но изначально нет двух бит.
есть битовая переменная, которая имеет конечно же два значения, 0 и 1.
Но это битовая переменная иногда бывает постоянно 0, иногда бывает постоянно 1, а иногда переключается 0,5 сек "0", 0,5 сек "1" те периодически меняет значение.
вот имея эту переменную - как получить целочисленную переменную, где
0- "0" битовой переменной
1- "мигание" битовой переменной
2- "1" битовой переменой

Не, ну можно как-то так сделать
71640
А что, алгоритм никак не переделать?

CFC-ST
16.11.2023, 08:30
ну вот как-то так
71644
наверное можно проще, но
вроде работает :)

CFC-ST
16.11.2023, 18:43
Я делаю так:
Зуммеру ставлю управляющий бит PSB1, который всегда 0.
Ставлю галочку "дин.адр." и указываю адрес регистра в ПР200.
Соответственно меняя значение регистра получаю различные сигналы:
3 - меандр 1 Гц - PSB1+3 = PSB4
5 - меандр 3 Гц - PSB1+5 = PSB6
65535 - постоянный сигнал PSB1+(-1) = PSB0

71628
большое спасибо.
выводил на СП307 значение регистра в ПР200
так вот при значении 65535 выводилось "-1".
странно. Но работает
подскажите , а как это работает. в смысле к PSB 1 прибавляем вроде как 65535
а получаем PSB0
Где-то это написано?

Dimensy
16.11.2023, 19:28
подскажите , а как это работает. в смысле к PSB 1 прибавляем вроде как 65535
а получаем PSB0


максимальное 16-разрядное число равно 65535, поэтому прибавляя к нему единицу получаем переполнение и переходим на новый круг, начиная с нуля