Структура программы тестера релейного модуля
- Войдите на сайт для отправки комментариев
Здравствуйте.
Дано: релейная плата, Arduino Uno (nano), I2C 1602 LCD модуль, токовый датчик и др. модули, компоненты, соелинители.
Плата с реле представляет из себя модуль с двумя группами реле, коммутирующих 3 независимых входа, с выходами. Реле управляются через 2 сдвиговых регистра 74HC594 сигналом, подаваемым с внешнего (установленного на другой плате) МК.
Задача: написать программу, для тестирования релейной платы на: срабатывание всех реле <=> прохождение сигналов с входов на выходы, отсутствие параллельного включения друго реле с адресом, отличным от заданного, контроль тока питания (кз, отсутвие потребления, низкое потребление), целостность и наличие сигнала с выхода Q7S 2-го регистра на физическом пине платы. Выводить результат на LCD дисплей (кирилица) в процессе тестирования и по окончанию тестирования (типа: "превышение потребляемого тока", "отсутствие контакта выхода 4", "тест пройден удачно").
Вопросы:
1. Что еще можно проверить на релейной плате?
2. Как вы видите алгоритм работы?
3. Какой прием можно использовать или какими должны быть ключевые функции, операторы?
Ошибся, минимум, разделом. А, скорее всего, - форумом.
Направь.
Если на этом форуме, то раздел "Ищу исполнителя".
Мне не нужен готовый код, задача написать код - это моя задача, а от форума мне нужны советы как вообще такое делается. Собственно вопросы к форуму озвучены в первом сообщении.
Ну понятно. Пишется ТЗ, уточняется детали, создается проект. А дальше садитесь за компьютер и пишете код. По-моему это стандартная практика. Или вам букально на пальцах написать код за вас?
1. Что еще можно проверить на релейной плате?
До хрена чего можно, вопрос ведь в том "что нужно?"
2. Как вы видите алгоритм работы?
Ясно! По крайней мере пока не приму известное срецтво от DetSimen
3. Какой прием можно использовать или какими должны быть ключевые функции, операторы?
Приём - садиться и писать. Ключевые слова - http://ru.cppreference.com/w/cpp/keyword
пишу, переписываю, уже две недели в свободную минутку... и стоя, и сидя, и даже во сне иногда. Быстро писать не получается, и код "лосиный" на мой взгляд выходит... может задачу слишком сложную выбрал для освоения, а может сказывается то, что до этого не писал программ вообще никак и никогда.
http://askofen.blogspot.com/2011/08/1.html Ну и так далее. И это не пустые слова.
Что-то я не пойму общей озлобленности. Готовых программ по свою задачу я не прошу. Чей-то там кусок хлеба не отнимаю. Две недели назад получил арудуино стартер кит, поигрался с готовыми примерами, модулями. до этого про прогрмаммирование только читал, смотрел видео. А тут знакомый предложил не просто "играть в игрушки", а продолжить своё обучение на реальном устройстве - на что я ему ответил "я на воде держаться не ммогу, а ты меня из лодки выталкиваешь и говоришь "Плыви"". Такие методы научиться плавать действенны и порой работают, правда совсем не гуманны. Вот и барахтаюсь - не плыву и не тону. Если у меня что-то получится, то кроме "молодец" я за это не получу. Лан, это всё лирика. Хотелось бы, конечно, дельных советов по моей задаче, возможно с примерами кода или ссылками на них.
Вот отсюда и смотри.#25 Это еще вариант, как написать более глюкоустойчивый код
Ага, это те же самые классы, что и по вашей ссылке двумя постами выше. Интересно. вникаю.
...нашел ответ на будущий вопрос "как сделать, чтобы при нажатии на одну кнопку - Мк выполнял первый код, а при нажатии на другую - второй".
Мне не нужен готовый код, задача написать код - это моя задача, а от форума мне нужны советы как вообще такое делается.
Пишут обычно ручками...
Начать следует с того, что внятно сформулировать цель. Слово "тестирование"! слишком многозначно для того, чтобы можно было понять, чего Вы хотите.
Затем составляется ТЗ. Прри этом нужно понимать, что некоторые задачт решаются исключительно программно-аппаратрыми средствами. Например, задача "контроля ток питания" чисто программными средствами не может быть решена в принципе.
В общем, рекомендация: сначала думать, и только потом писать на форум.
И еще.
Если хотите помощи, следует опубликовать скетч, над которым работаете. Нет скетча - автоматически будете посланы в "Ищу исполнителя". Считайте это правилами форума. (Кстати, прежде, чем писать на любой форум, его рекомендуется почитать. Увы, Вы этого не сделали.)
Что я вкладываю в понятие "тестирование релейной платы" (РП):
1. подключение РП к тестеру
2. подача питания на тестер (5 В)
3. запуск теста с тактовой кнопки
4. по питанию 5 В: измерение I потр.общ., сравнение с эталоном, выявление аномалий - КЗ, отсутствие/увеличенное потребление тока.
5. по питанию 24 В: измерение I потр.общ. при отключенных реле, сравнение с эталоном, выявление аномалий - КЗ, отсутствие/увеличенное потребление тока
6. одновременное включение всех реле, измерение I потр.общ. и сравнения с эталоном. Выявление аномалий - КЗ, отсутствие потребления тока по питанию 24 В.
7. поочередное включение каждого реле, измерение потребялемого тока включенного реле, сравнение с эталоном.
8. поочередное включение каждого реле (линии) и проверку прохождения сигналов с входов на выходы, выявление обрывов и/или дублирования на других линиях.
9. проверка наличия сигнала на физическом выводе с РП с выхода Q7S второго регистра 74НС594, расположенного на РП.
10. автоостановка теста по окончанию.
11. вывод промежуточных и общего результатов на LCD дисплей, в монитор порта (последнее, если модуль arduino подключен к ПК).
12. отключение питания от тестера
13. отключение РП от тестера
То, что уже написал:
Проверял в Proteus - работает.
Есть проект в Proteus, если надо могу выложить.
Первое что надо сделать это загнать все 74HC595 в класс и написать для них write(/*номер микросхемы*/,/*номер вывода*/);
Я тут маленько потерялся, пока датчики тока из китая ехали, почти ничего не делал. Почитал про классы, посмотрел видео. Есть вопрос - если мне необходимо, чтобы в один момент на одном сдвиговом регистре сразу включались несколько выходов (реле), как это сделать по вашему совету? Я почему использовал прямое указание адреса - и это первое что мне подвернулось и так показалось нагляднее.
Теже яйца, только в профиль. В классе создать два метода (write и writeByte). один для побитного изменения, а второй для побайтного.
Я тут маленько потерялся, пока датчики тока из китая ехали, почти ничего не делал. Почитал про классы, посмотрел видео. Есть вопрос - если мне необходимо, чтобы в один момент на одном сдвиговом регистре сразу включались несколько выходов (реле), как это сделать по вашему совету? Я почему использовал прямое указание адреса - и это первое что мне подвернулось и так показалось нагляднее.
qwone помешан на классах, но программировать можно и без них. Если получается рабочий код без классов, то делайте как вам удобно.
С датчиками тока пока ничего не вышло. ACS712 больше подойдут для высоких токов (единицы, десятки А) и то скорее для индикации. MAX471 не заработали. При подаче питания 5 В греются до 70 град. При нагрузке 500 мА - кипяток.
qwone, найдется минутка для помочь по классам касаемо 74HC594?
???
Для уверенности, что включено только одно реле и скоммутирована только одна нужная линия, нужно пройтись логической единицей по всем выходам. На кажый выход (из 6) подается лог единица и снимается с требуемого входа. Вход должен быть проинформирован в каком случае на нем может быть лог ед. Т.е. сконфигурировали сдвиговые регистры так, что замыкается вход 2 с выходом 5, подали на выход 5 лог.ед. а вход 2 предупредили что сейчас он должен принять высокий уровень. Если ок, то ок, но ведь в этот момент в случае неисправности на плате могут включиться и другие реле. Убираем лог.ед. с выхода 5 и поочереди подаем на другие выходы. Вход 2 должен понимать, что в этих случаях он должен видеть только низкий уровень, иначе ахтунг! Как осуществить такой перебор?
А чем вам такой принцип не подходит? https://lesson.iarduino.ru/page/urok-13-podklyuchenie-klaviatury-4-4-i-pezoizluchatelya-k-arduino/
согласен, аналогично моему случаю, только матрицы разные. Следуя данному принципу, мне придется начать все сначала и вкуривать вкуривать вкуривать...
есть 4 шт 74hc594. 2 управляют реле, 2 формирут тестовые сигналы. биты на формирователи идут через через селекторов. Все 4 штуки подключены каскадно одна за другой. Правильно ли будет создать 2 класса "селектор" и "формирователь сигналов" ?
Для написания кода надо пройти 4(четыре!!)этапа . 1 -Составление ТЗ,2-проектирование программы-3написание кода 4заливка и отладка. Я всегда это говорю. Но для вашего случая надо написать внятное ТЗ. И ТЗ не только о железе, но и работой пользователя с этим железом. Что еще важнее. Если у вас случай. Когда к примеру есть 4 гнезда в которые суются тестируемые реле. Разумнее конечно по одному - Воткнул высунул и в результате Годно Не годно. Но похоже вам такой вариант не подходит. де Сад рулит не только в сексе, но и в "трахе на работе". Так что начинайте писать мануал для пользователя вашего девайса. А без этого вы застрянете на 4 этапе и будете "искать ключи под фонарем, потому что там светлее, а не потому что вы там их потеряли".
Не верно. 1 класс это шина на которой висят 74hc594. А вот дальше создаете класс реле и формирователей которые висят на этой шине.
Есть релейные платы с гнездами (входами и выходами). Пользователь (тестировщик) берет плату, подключает кабелями к коробочке, подает питание на коробочку и нажимает кнопку старта тестирования. Коробочка шурует релюшками на плате. Подает сигналы куда надо, считывает сигналы. Потом выдает "Test PASS" или "Test FAIL". Далее текстировщиком отключаются питание, кабели, плата по результату откладывается налево или направо. Если получится, то одна коробочка будет тестировать 2 разных платы - красненькую (3 Входа 6 выходов) и синенькую (2 входа 4 выхода ). Тогда кнопок на коробочке должно быть две - для красной и для синей плат. Алгоритм тестирования тот же.
qwone, про класс шины (SPI) на пальцах можно объяснить, показать как это должно выглядеть?
Ну для эскиза примерно так
Жесть. Спасибо. Сейчас я буду это переваривать. Как же мне нравится мой лосиный код, ведья я его понимаю :(
qwone, с вами можно как-то связаться через ЛС?
Код примитивен как доска. Это просто остальных приучили бесперспективному стилю. Вот нород и шарахается. Вы поробуйте это нарисовать на своем коде #220 А ведь это банально просто подключающий компонент.
Возможно ли более кратко записать условие вида
Это флаги указывающие корректность промежуточных операций. Если все флаги равны единице (сответсвенно равны между собой), то тест корректен.
Насчет короче - не уверен, но красивее можно. При условии, что эти величины будут в массиве и все будут , например, ненулевые.
Похоже вы так и не поняли цель проекта.Возьмем красненькую плату (3 Входа 6 выходов) . 3 входа - всего 8 состояний. Это банально перебрать и сравнить что получилось на выходе. Логический элемент. Но так как у вас это 3 реле , а у реле контактная пара. Пусть один конец это будет еще один вход. И в результате перебор 3 входа+3 входа(контактных) на 3 выхода контактых. 64 варианта на 3битное состояние (000,001...111) . Если где-то ошибка, то негодно. Тоже и с синенькой.
6 выходов это 1 74hc594(3 пина Ардуины)+3 входа(тоже 3 пина Ардуины)
Шины не надо.
Возможно ли более кратко записать условие вида
Это флаги указывающие корректность промежуточных операций. Если все флаги равны единице (сответсвенно равны между собой), то тест корректен.
Если это булевые переменные, то:
Действительно я мало что понял по классам. На плате 2 сдвиговых регистра 74НС594 включены каскадом. Более того, выход Q7S (serial data output) второй микросхемы идет на краевой разъем, для возможности каскадного соединения релейных плат для увеличения общего кол-ва выходов. Стало быть шина здесь очень нужна - по ней все управление, + по ТЗ требуется проверка наличия сигнала на краевом разъеме платы с выхода Q7S. В том числе и для этого я приляпал еще внешние 2 шт 74HC594, включенных последовательно с предыдущими двумя.
andriano, да, переменные boolean. Понял. Это "побитовое И" или "амперсанд (&)" в С++. Только если все члены выражения равны единице, тогда результат тоже будет единица. Спасибо.
Только если все члены выражения равны единице, тогда результат тоже будет единица.
А Вам разве не это нужно?
Именно это.