Ярослав, спасибо за представленную программу. Второе огромное спасибо за пример вычисления контрольной суммы. Буду разбираться.
Ярослав писал(а):
Идея опроса модулей ICPCON такова.
1. Надо опросить все (до 16) модули на линии выполнив всего один запрос команды PMCR. Максимально уменьшаем время опроса.
2. Требуется определить кто ответил, кто нет. - в целях безопасности.
3. Поддержать протокол ICPCON, для различных модулей дискретного ввода/вывода.
Идея понятна. Тоже сталкивался с подобной задачей для применения с другими модулями. Для медленного протокола HART очень актуально.
Выполнил примерно так:
Шаг 1 – Вызов последовательности запроса измеряемой величины. Для запроса из программы контроллера передается количество опрашиваемых датчиков. Опрос проводится по циклу. Первым опрашивается датчик с сетевым номером 1. Если датчик с каким-либо серийным номером не отвечает более двух попыток, то выполняется переход к следующему шагу.
Шаг 2 – Запрос серийного номера в формате короткого фрейма. Если датчик не отвечает, то выполняется переход к следующему шагу.
Шаг 3 – Запрос измеряемого параметра следующего по порядку датчика.
Ограничения: Цикл опроса 6 датчиков составляет минимум 4 секунды. (Скорость обмена по каналу HART составляет 1200 бит в секунду). При неисправности одного из каналов цикл увеличивается до 7 секунд.
Все это записано в одной последовательности. Пример находится здесь
contents/files.php?action=downloadfile&filename=Example.zip&dir=n10 .
Номер неотвечающего датчика для второго порта нулевого модуля определяется по биту превышения время Tfs, Tfr, Tr (бит 1518.05) и счетчику повторных вызовов равному = 0 (третья цифра в слове 1518). Номер повтора - в слове 1524 и есть не ответивший номер датчика.
Однако, протокол не в состоянии определить два подряд отключенных сетевых номера. Вероятность такого варианта мала и я ее пропустил.
Другой пример вскоре выложу и поясню если необходимо. Он основан на опросе приоритетных сетевых номеров с меньшим периодом, а остальных - с большим.
Тоже считаю, что применение индексных регистров очень полезно, так как не люблю использовать функциональные блоки, а пользуюсь подпрограммами. Такая необходимость вызвана наличием старых версий процессорных модулей, которые не поддерживают FB.