PDA

Просмотр полной версии : Вход 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. Она устанавливается на один скан или нет? Если нет, то когда она сбрасывается?

capzap
19.08.2015, 17:29
откройте бибку как проект и изучите код

Спорягин Кирилл
19.08.2015, 17:32
А как это сделать?

ASo
19.08.2015, 17:43
Enable - это триггер начала посылки.

Спорягин Кирилл
19.08.2015, 17:49
Enable - это триггер начала посылки.

Для меня триггер - это RS-триггер.
Означает ли это что его достаточно установить на один скан?
И что с выходом Complete?

ASo
19.08.2015, 18:52
Это означает, что это в первичном значении слова - "спусковой крючек".
Его ставят на один цикл ПЛК, затем ждут появления Complete. Анализируют код ошибки.
Примеры ошибочны и не работоспособны.
ОВЕН - редиски! Столько лет говорю - не хотят исправить! Видимо ПЛК63, 73 и эта бибка - не любимые дочки.

Спорягин Кирилл
20.08.2015, 11:46
Скан, в моей терминологии, и есть один цикл ПЛК.
Спасибо. Теперь яснее.

Спорягин Кирилл
20.08.2015, 11:48
А еще правильней сказать, как я понимаю, что важен передний фронт установки Enable в true.

lazy
20.08.2015, 14:10
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,
...
);

Yegor
15.09.2015, 13:22
Глядя на код библиотеки, я бы не стал подавать 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 на один скан.

capzap
15.09.2015, 13:45
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, который не зависит от внутренних просессов фб, а управляется Вами или по какому нибудь событию

Можно и так, но это просто лишние переменные.

capzap
15.09.2015, 19:46
Можно и так, но это просто лишние переменные.

Вы сейчас написали это лишь бы поспорить, а как же фраза
Not Complete плохо, потому, что я после Complete = true более не хочу вызывать блок MB_RD_HOLD_REGS

Спорягин Кирилл
17.09.2015, 10:18
Вы сейчас написали это лишь бы поспорить, а как же фраза

Кажется поспорить хотите Вы. Но я не предоставлю Вам такой возможности.

capzap
17.09.2015, 13:04
Кажется поспорить хотите Вы. Но я не предоставлю Вам такой возможности.

можете конечно назаать это желанием поспорить, но чтоб завершить вопрос до логического конца, нужно понять нужна Вам цикличность или нет, если нет тогда управление должно быть внешним и без лишней переменной не обойтись, если нужна, то тогда после опускания выходных сигналов у Вас инициируется очередной запрос, что может повлиять на сам опрос в режиме RTU

Спорягин Кирилл
17.09.2015, 13:41
можете конечно назаать это желанием поспорить, но чтоб завершить вопрос до логического конца, нужно понять нужна Вам цикличность или нет, если нет тогда управление должно быть внешним и без лишней переменной не обойтись, если нужна, то тогда после опускания выходных сигналов у Вас инициируется очередной запрос, что может повлиять на сам опрос в режиме RTU

Я подразумевал именно цикличность опроса. Так чтобы по завершении одного цикла начинался другой.

capzap
17.09.2015, 14:17
Я подразумевал именно цикличность опроса. Так чтобы по завершении одного цикла начинался другой.

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