Просмотр полной версии : пр103 и Мастер 485
Добрый день.
Имеется ПР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 не сообразить!
Буду благодарен за советы.
...я могу ошибаться, но вроде как в ПРках есть режим "Запись по изменению". Это означает, что значение по Modbus будет отправлено на устройство ОДИН раз только тогда, когда оно изменится в программе.
Примерно так:
* Было 0 - ничего не делаем
* Стало 77 - отправили команду на запись значения "77" ОДИН раз
* Осталось 77 - ничего не делаем
* Стало 0 - отправили команду на запись значения "0" ОДИН раз
* Осталось 0 - ничего не делаем
Дополнил. Я ещё иногда делаю через ПРку/ПЛК управление питанием тех штуковин, которые надо перезагружать или тех, которые могут зависнуть. Просто трачу на это ещё один выход ПРки/ПЛК. Тогда можно реализовать такую логику:
* Запустилась ПРка/ПЛК, а потом через хх секунд включила датчики
* Если устройство не отвечает (отслеживаем статус по Modbus) - выключить и включить питание
А в чем проблема, выключаете период записи и активируете запись по команде
Может не совсем правильно сформулировал вопрос. Мне нужно реализовать в течении одного цикла
очередность исполнения. К примеру:
1. Сравниваю регистр ModBus/TCP с переменной А (начальное значение и там и там 0)
2. Если равно-ничего не делаем.
3. Если не равно: инициирую передачу (или по переменной, или по изменению значения)
4. В конце программы очищаем регистр ModBus/TCP.
Т.Е. как указать, чтобы после сборки этот блок выполнялся первым, а этот вторым?
Может не совсем правильно сформулировал вопрос. Мне нужно реализовать в течении одного цикла
очередность исполнения. К примеру:
1. Сравниваю регистр ModBus/TCP с переменной А (начальное значение и там и там 0)
2. Если равно-ничего не делаем.
3. Если не равно: инициирую передачу (или по переменной, или по изменению значения)
4. В конце программы очищаем регистр ModBus/TCP.
Т.Е. как указать, чтобы после сборки этот блок выполнялся первым, а этот вторым?
В течение одного цикла все это сделать не получится, т.к. задачи обмена по Modbus и выполнение программы не синхронизированы.
Что вы имеете в виду под фразой "Очищаем регистр Modbus"?
Если нельзя подавать команду сброса несколько раз, то после активации передачи команды сброса (по изменению или по сигналу) просто отсчитайте необходимую задержку, на время которой заблокируйте возможность повторной передачи команды сброса
В течение одного цикла все это сделать не получится, т.к. задачи обмена по Modbus и выполнение программы не синхронизированы.
Что вы имеете в виду под фразой "Очищаем регистр Modbus"?
очищаем переменную связанную с регистром.
Если нельзя подавать команду сброса несколько раз, то после активации передачи команды сброса (по изменению или по сигналу) просто отсчитайте необходимую задержку, на время которой заблокируйте возможность повторной передачи команды сброса
Так в том-то и вопрос, что сначала выполнить передачу (запись в стек передачи ModBus), а потом задержку или сброс!
Очередность выполнения команд-функций-макросов как-то вообще можно задать?
А что за датчик протечек?
GeshaX
Очередность выполнения команд-функций-макросов как-то вообще можно задать?
Можно, например применив счетчик и сравнение для SEL последующих. Один из способов. При старте программы, либо в процессе программы по сбросу счетчика.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot