Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2018, 16:59   #1
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
Question Циклический опрос по RS485 одинаковых устройств

Не нашел в темах ранее, прошу помочь правильно сделать.

Есть задача опрашивать пикселем 9 одинаковых приборов (амперметры с DI), цикл не особо критичен, но чем меньше - тем лучше. Одновременно пиксель опрашивает несколько УСО с минимально возможным циклом. Идеальный цикл опроса должен выглядеть примерно так:
Код:
УСО1 - УСО2 - УСО3
Прибор1
УСО1 - УСО2 - УСО3
Прибор2
УСО1 - УСО2 - УСО3
Прибор3
и т.д.
Допустимо, чтобы УСО опрашивались в непрерывном цикле, а приборы - "асинхронно" (например, каждые 2 секунды - следующий прибор).

Накидал по-быстрому схемку (вход "READ" предназначен для активации вычитки следующего входа - дергается таймером, скажем, каждые 2 секунды)...
И тут меня настиг ступор:
1) а корректно ли я использовал единственный сигнал для синхронизации всей схемы (он оформлен в именованную связь)?
2) как бы заставить схемку переходить к вычитке следующего прибора, если запрашиваемый не отвечает?
Вложения
Тип файла: psl Приборы.psl (21.2 Кбайт, 52 просмотров)
ailcat вне форума   Ответить с цитированием
Старый 12.12.2018, 18:16   #2
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 123
Благодарил(а): 239 раз(а)
Поблагодарили: 161 раз(а) в 153 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

я бы это сделал битовыми масками. маски положил бы в мультиплексор и гонял бы его по кругу.


__________________
C уважением, LordN
LordN сейчас на форуме   Ответить с цитированием
Старый 13.12.2018, 03:05   #3
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата
Сообщение от LordN Посмотреть сообщение
я бы это сделал битовыми масками. маски положил бы в мультиплексор и гонял бы его по кругу.
Не совсем вас понял.
Если речь о порядке опроса - так адреса приборов не подряд (живое устройство, 6 приборов. Адреса - 101,202, 107,208, 113,214), поэтому мультиплексор в любом случае есть - он адреса подставляет.
Если же речь идет об "инициации вычитки" - тут мне сложно сказать. Вроде, элементы без проблем размещаются на поляне так, что нужная последовательность сохраняется (как только считались все переменные слейва - происходит запись соответствующего набора регистров, в следующем тике - инкремент счетчика, смена входа мультиплексора адреса, запись обновленного адреса в SlaveX, ожидание тика на новый цикл чтения). Может, имеет где добавить элементы Raise (или и так будет работать?) - но причин заморачиваться с "бегущей единицей", размазывая простое действие на 5 тиков - вот в упор не вижу!
Проблема, которая режет глаз - состоит в том, что прибор может не ответить (ну фиг знает... завис с перепугу, например). И тогда на выходах rdy никогда не появятся единицы и "именованная связь" будет висеть в вечном нуле - т.е. переход к вычитке следующего прибора не произойдет до перезапуска Пикселя...

P.S.
Решение сейчас хочется сделать качественно, ибо на горизонте маячит ВРУ с 42 приборами (там, правда, можно прикрутить SMH4 и забыть об ограниченном ОЗУ пикселя - но, тем не менее)...
ailcat вне форума   Ответить с цитированием
Старый 13.12.2018, 11:05   #4
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от ailcat Посмотреть сообщение
И тут меня настиг ступор:
1) а корректно ли я использовал единственный сигнал для синхронизации всей схемы (он оформлен в именованную связь)?
2) как бы заставить схемку переходить к вычитке следующего прибора, если запрашиваемый не отвечает?
При таком количестве переменных гораздо удобнее на порту сделать 9 устройств с ручным опросом и щёлкать их между собой.

Этот вариант равнозначен с вашим, но позволяет не задумываться о том, отвечает устройство или нет. Заодно избавляет от мультиплексирования данных - на переменных всегда висят последние реально считанные данные с конкретных устройств. При таком подходе для 42 устройств Пикселя будет уже впритык, но SMH4 расщёлкает эту задачу не напрягаясь.

Вам словесного описания достаточно или нарисовать пояснение?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 13.12.2018, 20:12   #5
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 123
Благодарил(а): 239 раз(а)
Поблагодарили: 161 раз(а) в 153 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата При таком количестве переменных гораздо удобнее на порту сделать 9 устройств с ручным опросом и щёлкать их между собой.
да. а на весь это зоопарк сверху битовая маска вызова по внешнему общему "тику"


Добавлено через 2 минуты

Цитата Проблема, которая режет глаз - состоит в том, что прибор может не ответить (ну фиг знает... завис с перепугу, например). И тогда на выходах rdy никогда не появятся единицы и "именованная связь" будет висеть в вечном нуле - т.е. переход к вычитке следующего прибора не произойдет до перезапуска Пикселя...
да и хер с ней. не ответила - посчитали, обработали, выдали сообщение, далее запретили её вызов или вообще все поставили в глубокий аларм и иди разбирайся..


__________________
C уважением, LordN
LordN сейчас на форуме   Ответить с цитированием
Старый 14.12.2018, 13:14   #6
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от Arsie Посмотреть сообщение
При таком количестве переменных гораздо удобнее на порту сделать 9 устройств с ручным опросом и щёлкать их между собой.
А что с расходом памяти?
Насколько я помню, у пикселя ОЗУ всего 256 байт, при этом данные приборы - далеко не единственное, что обрабатывается (там еще 2 навороченных приборчика есть - 24 real и 2 long с каждого читается и частично используется в вычислениях), плюс две ГГУ (12 real, 4 long, 22 int читается и частично используется в вычислениях, 2 real и 3 int записываются по необходимости). В идеале надо бы, чтобы все вычитанные и несколько рассчитанных величин транслировались на верхний уровень через Modbus/TCP (и если с изначально планировавшимся SMH2 это не было проблемой, то с Пикселем, имеющим очень мало ОЗУ - я как-то опасаюсь: не пришлось бы сокращать число транслируемых регистров Modbus)



Цитата:
Сообщение от Arsie Посмотреть сообщение
Заодно избавляет от мультиплексирования данных
Так. Регистры - нарисованы условно, чисто для наглядности. По факту они нарисованы вместо макроса вычислений (расчет среднеквадратичных параметров, маскирование, конвертации типов и т.п.) и в текущем варианте отжирает 110-130мс на SMH2 - тогда как в силу некоторх причин тик больше 200мс весьма нежелателен. Чтобы иметь цикл покороче, сам макрос имеет мультиплексированные входы и в каждом тике запускается только в одном экземпляре (т.е. все 9 приборов обсчитываются за 9 тиков). REM: макрос не выкладываю, т.к. пытаюсь упростить и подрезать не особо нужные функции, ускорив его работу и уменьшив использование памяти
Так что уход от мультиплексирования не дает ровно ничего, скорее даже немного усложнит задачу (потому что мультиплексировать придется не 1 адрес, а 4 вычитанные переменных).


Цитата:
Сообщение от Arsie Посмотреть сообщение
Вам словесного описания достаточно или нарисовать пояснение?
Да догадался как, не первый раз лоджик вижу.


Добавлено через 5 минут

Цитата
Сообщение от LordN Посмотреть сообщение
да. а на весь это зоопарк сверху битовая маска вызова по внешнему общему "тику"
Так тот же мультиплексор+демультиплексор её работы и выполняют. Только проще.


Цитата
Сообщение от LordN Посмотреть сообщение
да и хер с ней. не ответила - посчитали, обработали, выдали сообщение, далее запретили её вызов или вообще все поставили в глубокий аларм и иди разбирайся..
Именно так. Не ответил - и хер с ним, среди результатов обработки есть флаг "данные устарели" (а сохранятся последние обработанные).
Вопрос лишь в том, как определить, что прибор не вычитался. Ступор-с...
ailcat вне форума   Ответить с цитированием
Старый 14.12.2018, 13:57   #7
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от ailcat Посмотреть сообщение
Именно так. Не ответил - и хер с ним, среди результатов обработки есть флаг "данные устарели" (а сохранятся последние обработанные).
Вопрос лишь в том, как определить, что прибор не вычитался. Ступор-с...
Одновременно с импульсом "послать запрос" взводите счётчик. Далее у вас два события - пришёл rdy или досчитал счётчик.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 17.12.2018, 10:29   #8
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
Cool Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от Arsie Посмотреть сообщение
Одновременно с импульсом "послать запрос" взводите счётчик. Далее у вас два события - пришёл rdy или досчитал счётчик.
Ой, ...! Уполз посыпать голову пеплом.
(а нафига счетчик? можно же просто инкрементировать сигналом READ имеющийся счетчик, а оставшийся в нуле сигнал and(4*rdy) использовать для установки флага "данные устарели"!)
Потянулся за пеплом второй раз...
ailcat вне форума   Ответить с цитированием
Старый 17.12.2018, 11:11   #9
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 016
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от ailcat Посмотреть сообщение
Ой, ...! Уполз посыпать голову пеплом.
(а нафига счетчик? можно же просто инкрементировать сигналом READ имеющийся счетчик, а оставшийся в нуле сигнал and(4*rdy) использовать для установки флага "данные устарели"!)
Потянулся за пеплом второй раз...
Ну тайм-аут сосчитать нужно же. Надо дать время модбасу поработать, прежде чем уходить на следующий слейв. Да и ошибочки посчитать полезно.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 17.12.2018, 17:16   #10
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
По умолчанию Ответ: Циклический опрос по RS485 одинаковых устройств

Цитата:
Сообщение от Arsie Посмотреть сообщение
Ну тайм-аут сосчитать нужно же. Надо дать время модбасу поработать, прежде чем уходить на следующий слейв. Да и ошибочки посчитать полезно.
Цикл "дерганья" - 2 секунды. Да пусть даже 1 секунда - это все равно в разы больше тайм-аута.
Подсчет ошибочек имеет хоть какой-то смысл исключительно на этапе наладки. В процессе работы 1 ошибка или 100 - не имеет значения, "байпасс" активируется в момент установки флага "данные устарели".
Ну и - псевдосинхронный вариант дает больше информации для алгоритма (даже если часть приборов не вычитается), нежели полностью асинхронный (когда время реакции зависит от "вычитываемости" всех приборов).
ailcat вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опрос устройств через adam 4561 white Связь с внешним миром 12 12.12.2018 22:10
Правильная разводка сетей RS-485 Arsie Библиотека 30 28.02.2014 13:52
Использование USB-хаба Varnak Вопросы о SMH-2G(i) 8 01.03.2013 12:20


Часовой пояс GMT +4, время: 13:50.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023