Да, с ПЛК150 по RS232
Да, с ПЛК150 по RS232
Вероятно, некорректно настроен обмен (сетевые настройки, адреса регистров и т.д.) или проблема с кабелем (не та распиновка или поврежден).
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
С обменом между панелью и ПЛК все в порядке. При нажатии кнопки на панели, в ПЛК состояние бита изменяется сразу, а на панели состояние кнопки изменяется с задержкой. Задержка есть и при переходе на панели к другому окну.
Добавьте на экран индикаторы с битами PSB50 и PSB51. Это биты статусы связи для Download- и PLC-порта. Если один из них (соответствующий вашему порту) будут мигать красным - то, очевидно, все же есть какая-то проблема с обменом.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Подскажите как в макросе можно словить фронт бита?
Требуется подать звуковой сигнал при смене состояния бита. Битов много.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
C зуммером понятно, сделать для каждого бита и радоваться. Но если по мимо звука надо открыть окно с сообщением или еще что сделать. То для каждого бита делать еще элемент "Функциональная область" или создавать окно тревоги. Битов очень много.
Много элементов получается, хотел как проще и меньше муторной работы. С кодом проще и быстрей работать, чем графику и настройки туда сюда гонять.
Насколько я знаю зуммер работает только если открыт тот экран на котором он расположен. У меня биты раскиданы по разным экранам.
Последний раз редактировалось spa; 08.06.2018 в 13:54.
Вот пример.Example_MacroRtrig.txp
Для каждого бита потребуется доп. бит, чтобы помнить о предыдущем состоянии.
Зуммер может быть глобальным - тогда будет работать независимо от открытого экрана.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Сложность еще в том что биты у меня храняться в PSW. Написал следующую функцию:
Работает если только один бит сработал, если при включенном бите сработает еще один, то тогда начинает пищать постоянно.Код:void AlarmEdge(WORD NumWord, WORD NumBit){ if( (PSW[NumWord]&(1<<NumBit)) && !(PSW[NumWord+50]&(1<<NumBit)) ) { Beep(); PSW[NumWord+50] = 1 | (1<<NumBit); } else if ((PSW[NumWord]&(1<<NumBit))!=0) { PSW[NumWord+50] = 0 | (1<<NumBit); } }
Последний раз редактировалось spa; 08.06.2018 в 17:00.
Если в одном регистре, можно так сделать... как вариант, для одного регистра
Панель должна пикнуть при установке любого бита PSW[111] в 1
Код с коленки, не тестировалсяКод:void AlarmEdge() { static WORD last_val; WORD cur_val; cur_val = PSW[111]; if ( (cur_val & ~last_val ) > 0 ) { Beep(); } last_val = cur_val; }
Последний раз редактировалось SokolovS; 08.06.2018 в 16:31.