Просмотр полной версии : Вход Enable в modbus.lib
Спорягин Кирилл
19.08.2015, 16:39
Добрый день, форумчане.
Все ФБ библиотеки modbus.lib имеют вход Enable. Вот что сказано о нем в описании: "Enable: BOOL - разрешение работы блока".
Возникает вопрос вход Enable необходимо удерживать в true до получения на выходе Complete true, как это делается в примерах (http://www.owen.ru/forum/showthread.php?t=13584) (см. рисунок) или достаточно установить на один скан как об этом говорит пользователь lazy в 10-м посте данной темы (http://www.owen.ru/forum/showthread.php?t=15522)?
Спорягин Кирилл
19.08.2015, 17:20
Вопрос можно расширить и на переменную Complete. Она устанавливается на один скан или нет? Если нет, то когда она сбрасывается?
откройте бибку как проект и изучите код
Спорягин Кирилл
19.08.2015, 17:32
А как это сделать?
Enable - это триггер начала посылки.
Спорягин Кирилл
19.08.2015, 17:49
Enable - это триггер начала посылки.
Для меня триггер - это RS-триггер.
Означает ли это что его достаточно установить на один скан?
И что с выходом Complete?
Это означает, что это в первичном значении слова - "спусковой крючек".
Его ставят на один цикл ПЛК, затем ждут появления Complete. Анализируют код ошибки.
Примеры ошибочны и не работоспособны.
ОВЕН - редиски! Столько лет говорю - не хотят исправить! Видимо ПЛК63, 73 и эта бибка - не любимые дочки.
Спорягин Кирилл
20.08.2015, 11:46
Скан, в моей терминологии, и есть один цикл ПЛК.
Спасибо. Теперь яснее.
Спорягин Кирилл
20.08.2015, 11:48
А еще правильней сказать, как я понимаю, что важен передний фронт установки Enable в true.
Complete сбрасываецо сам в любом случае. а насчет Enable... так как показано на картинке это просто лишний вызов ФБ ради сброса как раз того самого Enable (и в этот момент сбросицо Complete). Если взводить Enable на один цикл можно чуть сэкономить )
Спорягин Кирилл
15.09.2015, 12:11
Нашел оптимальный способ работы с входом Enable.
На вход Enable необходимо подавать not Read:
var
GetHoldRegs : MB_RD_HOLD_REGS;
end_var
GetHoldRegs(Enable:= NOT GetHoldRegs.Read,
Mode:= MB_RTU,
...
);
Глядя на код библиотеки, я бы не стал подавать NOT Read. Этот признак выставляется в самом начале обмена. Таким образом, вы тут же переводите Enable на FALSE. Вдобавок это внутренняя переменная, и вы не должны делать предположений относительно её поведения. Попробуйте лучше NOT Complete.
Спорягин Кирилл
15.09.2015, 13:29
Not Complete плохо, потому, что я после Complete = true более не хочу вызывать блок MB_RD_HOLD_REGS, а он должен быть вызван с Enable = false перед следующей передачей.
У меня прекрасно работает, если на Enable подаю not Read. Мне как раз и нужно установить Enable на один скан.
Not Complete плохо, потому, что я после Complete = true более не хочу вызывать блок MB_RD_HOLD_REGS, а он должен быть вызван с Enable = false перед следующей передачей.
У меня прекрасно работает, если на Enable подаю not Read. Мне как раз и нужно установить Enable на один скан.
а какая разница, что комплит, что реад при изменении состояния запустят фб без Вашего ведома, подать импульс на один скан может и r_trig, который не зависит от внутренних просессов фб, а управляется Вами или по какому нибудь событию
Спорягин Кирилл
15.09.2015, 16:09
Попробовал с Complete. Тоже работает (чего и следовало ожидать).
Спорягин Кирилл
15.09.2015, 16:10
а какая разница, что комплит, что реад при изменении состояния запустят фб без Вашего ведома, подать импульс на один скан может и r_trig, который не зависит от внутренних просессов фб, а управляется Вами или по какому нибудь событию
Можно и так, но это просто лишние переменные.
Можно и так, но это просто лишние переменные.
Вы сейчас написали это лишь бы поспорить, а как же фраза
Not Complete плохо, потому, что я после Complete = true более не хочу вызывать блок MB_RD_HOLD_REGS
Спорягин Кирилл
17.09.2015, 10:18
Вы сейчас написали это лишь бы поспорить, а как же фраза
Кажется поспорить хотите Вы. Но я не предоставлю Вам такой возможности.
Кажется поспорить хотите Вы. Но я не предоставлю Вам такой возможности.
можете конечно назаать это желанием поспорить, но чтоб завершить вопрос до логического конца, нужно понять нужна Вам цикличность или нет, если нет тогда управление должно быть внешним и без лишней переменной не обойтись, если нужна, то тогда после опускания выходных сигналов у Вас инициируется очередной запрос, что может повлиять на сам опрос в режиме RTU
Спорягин Кирилл
17.09.2015, 13:41
можете конечно назаать это желанием поспорить, но чтоб завершить вопрос до логического конца, нужно понять нужна Вам цикличность или нет, если нет тогда управление должно быть внешним и без лишней переменной не обойтись, если нужна, то тогда после опускания выходных сигналов у Вас инициируется очередной запрос, что может повлиять на сам опрос в режиме RTU
Я подразумевал именно цикличность опроса. Так чтобы по завершении одного цикла начинался другой.
Я подразумевал именно цикличность опроса. Так чтобы по завершении одного цикла начинался другой.
ну тогда надо определятся, чтоб выдерживался стандарт протокола, а именно пауза между очередным запросом,так что возможно стоит задуматься хотя бы о выставлении некоторого времени минимального цикла
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot