Показать сообщение отдельно
Старый 18.10.2018, 06:17   #6
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
Question Ответ: AIN в качестве 3 DIN

Всем спасибо за участие в обсуждении (странно, что за все обсуждение никто так и не заметил, что AIN отдает данные в Int, а не Long, как в макросе)
По итогам думаю добавить цепочку защиты от "иголок" (весьма вероятных, если контакт переключился в момент работы АЦП). Применение макроса для пикселя, с защитой от "иголок" - в "прицепе" (там же и скриншот для tvf).
По факту надо будет внедрить защиту в сам макрос + избавиться от лишнего преобразования типов (вот тут мне не очень понятно, как 10-разрядный выход АЦП отражается в 16-разрядный int. Если смотреть на логику макроса Датчик_ХХХ - перед тем, как стать AIN, данные АЦП сдвигаются влево на 5 разрядов. Это так?)

Далее - мои ответы и комментарии всем, участвовавшим в обсуждении:

Цитата:
Сообщение от Arsie Посмотреть сообщение
Не смотрел ваш макрос, но замечу, что у штатных макросов есть характеристика "выход в омах", т.е. вы могли просто добавить три компаратора и воспользоваться штатной фильтрацией и пересчётом
Позволю себе заметить, что у меня и есть ваш штатный макрос, из которого выкинуты вычитания нуля, сложения с нулем, а последовательное умножение на 100, деление на 1600000 и умножение на 1000 (переход от килоомомов в омы) заменено на единственное деление на 16. И компараторов понадобилось бы не 3, а как минимум 8 (ибо 3 входа дают 8 состояний, плюс авария "обрыв цепи"), и от логики после них не избавиться, нужны-то 3 выхода.
Кстати, выход у вас в килоомах, а не омах. Из-за чего все расчеты пришлось бы делать в медленно обрабатывающихся real...

Цитата:
Сообщение от Arsie Посмотреть сообщение
PS. Посмотрел, без фильтрации всё плохо будет
А фильтрация по входу отменена в силу бессмысленности. Дребезг до 4 МЗР АЦП вообще не влияет никак, на 5-6 МЗР опасен только в двух сочетаниях замкнутых контактов (и то лишь потому, что резисторы подобраны из стандартного ряда Е12, и при допусках +10% у меньшего номинала и -10% у большего отклонения будут близки к порогу компараторов), и только начиная с 7 бита на выходе АЦП (то есть в 4 старших значащих разрядах) дребезг будет приводить к ошибке считывания состояния.
А для отсечения "переходных состояний" - можно на выходы макроса поставить цепочку из spdelay(bool), XOR-NOT и D-триггера.


Цитата:
Сообщение от New Посмотреть сообщение
У этой конструкции есть серьёзный недостаток: работает только пока контакты чистые.
Это что ж такое надо сделать с контактами, чтобы их сопротивление, нормально составляющее сотые доли ома - изменилось аж на 20-30 Ом? Как по мне, так это сжечь их надо будет "по самое не хочу" особо извращенным способом, не подразумевающим дальнейшее использование коммутационного аппарата по назначению.

Цитата:
Сообщение от New Посмотреть сообщение
Вроде не такая уж и проблема, есть готовые преобразователи.
. Есть. Вот только навешивать их пришлось бы на RS485, который, увы, уже занят - а второй RS485 в пикселе отсутствует (зато есть три незадействованных AIN при не хватке 8 DIN).
На Овен же уходить не хочу, а что-то "более лучшее" на дин-рейку у Сегнетикса до сих пор остается только в виде тизеров...


Цитата:
Сообщение от LordN Посмотреть сообщение
делал подобное, нормально работает, только заместо последовательного я делал параллельный ЦАП
Спасибо!
Я последовательный сделал больше для наглядности в монтаже (резистор с проводом "выглядят хуже", чем резистор, шунтирующий доп.контакт. Ну и вероятность обрыва провода или выпадения его из контактов (выявляемая только при последовательном соединении) всё же выше, чем вероятность замыкания (к сожалению, проверено на практике).


Цитата:
Сообщение от tvf Посмотреть сообщение
Проще фильтрация AI (без фанатизма), деление сопротивления цепи на R (из цепи R-2R-4R), округление, reg16->bit, фильтрация от "иголок".
Фигасе наворотов (не считая фильтрацию) для примитивнейших действий. Да еще поди и на медленных real...
Вот разве что фильтрацию от "иголок" на выходы добавить есть смысл. Ну и мне интересно, зачем для величин, для которых критичны только 4-5 старших разрядов АЦП (из 10 имеющихся) - еще и фильтрация по входу (предназначенная для устранения "дребезга" 1-2, редко больше, младших значащих разрядов АЦП).

Цитата:
Сообщение от tvf Посмотреть сообщение
У ТС макрос закрытый, видимо охраняет секрет полишинеля.
ЧО? Макрос открыт, специально сейчас проверил - поле пароля пусто, открывается со свистом.
Но для вас - прицепляю скриншот с макросом.

Цитата:
Сообщение от tvf Посмотреть сообщение
Теоретически, помехоустойчивость +/- 0,5R. Тут все зависит от конкретной реализации.
Хуже, в силу того что резисторы из стандартного ряда Е12 (с допусками +/-10% в худшем варианте), а не идеальные R-2R-4R из ряда Е192. Де-факто получается примерно +/- 0,3R, и на двух сочетаниях немногим лучше +/-0,2R

Цитата:
Сообщение от tvf Посмотреть сообщение
Тоже делал, вешал до 4 DI на 1 AI. Быстродействие из за фильтрации правда страдает
Ну, вешать 4 я не стал рисковать - там порог чувствительности оказывается соизмерим с допусками на сопротивления резисторов - и фильтрация по входу, пожалуй, становилась бы необходимой. Что прилично отъедает и быстродействие, и без того скромные ресурсы пикселя...
Изображения
Тип файла: gif Скриншот макроса для tvf.gif (26.4 Кбайт, 89 просмотров)
Вложения
Тип файла: psl AIN как 3 DIN (с защитой от иголок).psl (24.2 Кбайт, 66 просмотров)
ailcat вне форума   Ответить с цитированием