|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
12.12.2018, 16:59 | #1 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Циклический опрос по RS485 одинаковых устройств
Не нашел в темах ранее, прошу помочь правильно сделать.
Есть задача опрашивать пикселем 9 одинаковых приборов (амперметры с DI), цикл не особо критичен, но чем меньше - тем лучше. Одновременно пиксель опрашивает несколько УСО с минимально возможным циклом. Идеальный цикл опроса должен выглядеть примерно так: Код:
УСО1 - УСО2 - УСО3 Прибор1 УСО1 - УСО2 - УСО3 Прибор2 УСО1 - УСО2 - УСО3 Прибор3 и т.д. Накидал по-быстрому схемку (вход "READ" предназначен для активации вычитки следующего входа - дергается таймером, скажем, каждые 2 секунды)... И тут меня настиг ступор: 1) а корректно ли я использовал единственный сигнал для синхронизации всей схемы (он оформлен в именованную связь)? 2) как бы заставить схемку переходить к вычитке следующего прибора, если запрашиваемый не отвечает? |
12.12.2018, 18:16 | #2 |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили:
165 раз(а) в 157 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
я бы это сделал битовыми масками. маски положил бы в мультиплексор и гонял бы его по кругу.
|
13.12.2018, 03:05 | #3 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
Если речь о порядке опроса - так адреса приборов не подряд (живое устройство, 6 приборов. Адреса - 101,202, 107,208, 113,214), поэтому мультиплексор в любом случае есть - он адреса подставляет. Если же речь идет об "инициации вычитки" - тут мне сложно сказать. Вроде, элементы без проблем размещаются на поляне так, что нужная последовательность сохраняется (как только считались все переменные слейва - происходит запись соответствующего набора регистров, в следующем тике - инкремент счетчика, смена входа мультиплексора адреса, запись обновленного адреса в SlaveX, ожидание тика на новый цикл чтения). Может, имеет где добавить элементы Raise (или и так будет работать?) - но причин заморачиваться с "бегущей единицей", размазывая простое действие на 5 тиков - вот в упор не вижу! Проблема, которая режет глаз - состоит в том, что прибор может не ответить (ну фиг знает... завис с перепугу, например). И тогда на выходах rdy никогда не появятся единицы и "именованная связь" будет висеть в вечном нуле - т.е. переход к вычитке следующего прибора не произойдет до перезапуска Пикселя... P.S. Решение сейчас хочется сделать качественно, ибо на горизонте маячит ВРУ с 42 приборами (там, правда, можно прикрутить SMH4 и забыть об ограниченном ОЗУ пикселя - но, тем не менее)... |
|
13.12.2018, 11:05 | #4 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 112
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
Этот вариант равнозначен с вашим, но позволяет не задумываться о том, отвечает устройство или нет. Заодно избавляет от мультиплексирования данных - на переменных всегда висят последние реально считанные данные с конкретных устройств. При таком подходе для 42 устройств Пикселя будет уже впритык, но SMH4 расщёлкает эту задачу не напрягаясь. Вам словесного описания достаточно или нарисовать пояснение? __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
13.12.2018, 20:12 | #5 | ||
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 163
Благодарил(а): 240 раз(а)
Поблагодарили:
165 раз(а) в 157 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
Добавлено через 2 минуты Цитата:
|
||
14.12.2018, 13:14 | #6 | |||
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
Насколько я помню, у пикселя ОЗУ всего 256 байт, при этом данные приборы - далеко не единственное, что обрабатывается (там еще 2 навороченных приборчика есть - 24 real и 2 long с каждого читается и частично используется в вычислениях), плюс две ГГУ (12 real, 4 long, 22 int читается и частично используется в вычислениях, 2 real и 3 int записываются по необходимости). В идеале надо бы, чтобы все вычитанные и несколько рассчитанных величин транслировались на верхний уровень через Modbus/TCP (и если с изначально планировавшимся SMH2 это не было проблемой, то с Пикселем, имеющим очень мало ОЗУ - я как-то опасаюсь: не пришлось бы сокращать число транслируемых регистров Modbus) Так. Регистры - нарисованы условно, чисто для наглядности. По факту они нарисованы вместо макроса вычислений (расчет среднеквадратичных параметров, маскирование, конвертации типов и т.п.) и в текущем варианте отжирает 110-130мс на SMH2 - тогда как в силу некоторх причин тик больше 200мс весьма нежелателен. Чтобы иметь цикл покороче, сам макрос имеет мультиплексированные входы и в каждом тике запускается только в одном экземпляре (т.е. все 9 приборов обсчитываются за 9 тиков). REM: макрос не выкладываю, т.к. пытаюсь упростить и подрезать не особо нужные функции, ускорив его работу и уменьшив использование памяти Так что уход от мультиплексирования не дает ровно ничего, скорее даже немного усложнит задачу (потому что мультиплексировать придется не 1 адрес, а 4 вычитанные переменных). Да догадался как, не первый раз лоджик вижу. Добавлено через 5 минут Цитата:
Цитата:
Вопрос лишь в том, как определить, что прибор не вычитался. Ступор-с... |
|||
14.12.2018, 13:57 | #7 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 112
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Одновременно с импульсом "послать запрос" взводите счётчик. Далее у вас два события - пришёл rdy или досчитал счётчик.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
17.12.2018, 10:29 | #8 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
(а нафига счетчик? можно же просто инкрементировать сигналом READ имеющийся счетчик, а оставшийся в нуле сигнал and(4*rdy) использовать для установки флага "данные устарели"!) Потянулся за пеплом второй раз... |
|
17.12.2018, 11:11 | #9 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 112
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Ну тайм-аут сосчитать нужно же. Надо дать время модбасу поработать, прежде чем уходить на следующий слейв. Да и ошибочки посчитать полезно.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
17.12.2018, 17:16 | #10 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Циклический опрос по RS485 одинаковых устройств
Цитата:
Подсчет ошибочек имеет хоть какой-то смысл исключительно на этапе наладки. В процессе работы 1 ошибка или 100 - не имеет значения, "байпасс" активируется в момент установки флага "данные устарели". Ну и - псевдосинхронный вариант дает больше информации для алгоритма (даже если часть приборов не вычитается), нежели полностью асинхронный (когда время реакции зависит от "вычитываемости" всех приборов). |
|