PDA

Просмотр полной версии : пр103 и Мастер 485



kudres
25.06.2023, 21:16
Добрый день.
Имеется ПР103 как Мастер по RS485 и Slave по Ethernet. По RS485 как Slave подключен
датчик протечек (пока один, но будет несколько). В некоторых случаях датчик требуется
перегружать записав в регистр "Х" значение 77, функция 06. Далее датчик перегружается
около 4 сек. Если в момент перегрузки ещё раз отправить команду перегрузки то датчик с
вероятностью 50% уйдет в ошибку, сброс только отключением питания! Таким образом требуется:
1. По внешнему воздействию: изменению регистра ModBus/TCP с 0 на 1, или нажатию
кнопки на входе DI, инициировать передачу команды перегрузки ОДИН раз!
2. Сбросить внешнее воздействие: обнулить ModBus/TCP регистр или отключить вход DI.
3. Заблокировать на 5сек. внешние воздействия.
С пунктом 3 все понятно, запускаем таймер. А вот по 1 и 2 не сообразить!
Буду благодарен за советы.

Cs-Cs
25.06.2023, 21:53
...я могу ошибаться, но вроде как в ПРках есть режим "Запись по изменению". Это означает, что значение по Modbus будет отправлено на устройство ОДИН раз только тогда, когда оно изменится в программе.
Примерно так:
* Было 0 - ничего не делаем
* Стало 77 - отправили команду на запись значения "77" ОДИН раз
* Осталось 77 - ничего не делаем
* Стало 0 - отправили команду на запись значения "0" ОДИН раз
* Осталось 0 - ничего не делаем

Дополнил. Я ещё иногда делаю через ПРку/ПЛК управление питанием тех штуковин, которые надо перезагружать или тех, которые могут зависнуть. Просто трачу на это ещё один выход ПРки/ПЛК. Тогда можно реализовать такую логику:
* Запустилась ПРка/ПЛК, а потом через хх секунд включила датчики
* Если устройство не отвечает (отслеживаем статус по Modbus) - выключить и включить питание

Dimensy
25.06.2023, 23:39
А в чем проблема, выключаете период записи и активируете запись по команде

kudres
26.06.2023, 01:30
Может не совсем правильно сформулировал вопрос. Мне нужно реализовать в течении одного цикла
очередность исполнения. К примеру:
1. Сравниваю регистр ModBus/TCP с переменной А (начальное значение и там и там 0)
2. Если равно-ничего не делаем.
3. Если не равно: инициирую передачу (или по переменной, или по изменению значения)
4. В конце программы очищаем регистр ModBus/TCP.
Т.Е. как указать, чтобы после сборки этот блок выполнялся первым, а этот вторым?

1exan
26.06.2023, 04:45
Может не совсем правильно сформулировал вопрос. Мне нужно реализовать в течении одного цикла
очередность исполнения. К примеру:
1. Сравниваю регистр ModBus/TCP с переменной А (начальное значение и там и там 0)
2. Если равно-ничего не делаем.
3. Если не равно: инициирую передачу (или по переменной, или по изменению значения)
4. В конце программы очищаем регистр ModBus/TCP.
Т.Е. как указать, чтобы после сборки этот блок выполнялся первым, а этот вторым?

В течение одного цикла все это сделать не получится, т.к. задачи обмена по Modbus и выполнение программы не синхронизированы.
Что вы имеете в виду под фразой "Очищаем регистр Modbus"?

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

kudres
26.06.2023, 08:40
В течение одного цикла все это сделать не получится, т.к. задачи обмена по Modbus и выполнение программы не синхронизированы.
Что вы имеете в виду под фразой "Очищаем регистр Modbus"?

очищаем переменную связанную с регистром.

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

Так в том-то и вопрос, что сначала выполнить передачу (запись в стек передачи ModBus), а потом задержку или сброс!
Очередность выполнения команд-функций-макросов как-то вообще можно задать?

Dimensy
26.06.2023, 09:29
А что за датчик протечек?

melky
26.06.2023, 09:40
GeshaX
Очередность выполнения команд-функций-макросов как-то вообще можно задать?
Можно, например применив счетчик и сравнение для SEL последующих. Один из способов. При старте программы, либо в процессе программы по сбросу счетчика.