|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
27.03.2021, 13:08 | #1 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Преобразование последовательности импульсов
Здравствуйте, уважаемые форумчане. Нужен опытный взгляд на поставленную задачу. Необходимо преобразовать сигнал от старой системы телемеханики. ( Не спрашивайте зачем)
Решил я попробовать сделать это на контроллерах Segnetics. В наличии SMH4+MC0202-01-0. К системе мы можем подключится посредством 3 проводов. 1 ТС, 2 ТУ. Подключаюсь с помощью дискретного входа (высокочастотного) и двух выходов.( уровни согласованы) Электрический код представляет собой последовательность импульсов и пауз определённой длины. Для ТС: СДИ - сверх длинный импульс - 260 мс - начало и конец посылки. ДИ(П)- длинный импульс/пауза - 120 мс - логическая 1 КИ(П)- короткий импульс/пауза - 18-20 мс - логический 0 Для ТУ: СДИ - сверх длинный импульс - 370 мс - начало и конец посылки ДИ(П)- длинный импульс - 170 мс - логическая 1 КИ - 20 мс - логический 0 КП - 28 мс - разделитель Задача достаточно простая. Начнём с ТС. Накидал проект в Лоджике 3.30. Его прикрепил. В общем то проблема в том, что фронты КИ/КП проглатываются лоджиком и сдвиговый регистр не отрабатывает, что в итоге приводит к тому что посылка расшифровывается не верно. Если увеличить длину КИ/КП то программа расшифровывает верно. И тут у меня возник вопрос, это я криворукий или ограничение среды SMLogix в 10 мс мне палки в колёса вставляет. Склоняюсь конечно, к 2 варианту, но мало ли я что то упускаю... по неопытности. Поэтому от чистого сердца прошу проконсультировать меня и наставить на путь истинный. Подведу небольшой итог: 1)Верно ли написана моя программа, или есть косяк который всё портит? 2)Если проблема всё таки не во мне,а в лоджике, есть ли способы решения данной задачи вне лоджика? т.е. написать на С, фбд блок который будет расшифровывать и присылать в лоджик информацию о посылке. И как это будет проще всего сделать? 3) Буду рад любым советам и помощи P.S. об ограничении тика в 10 мс, когда то мне нашептал Арсений. P.S. Посылка ТС состоит из 63 импульсов и пауз. Последний раз редактировалось Shurion, 27.03.2021 в 13:35 |
28.03.2021, 21:18 | #2 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
UPDATE: похоже всё таки во мне, опыты показали что лоджик все ловит)
Но иногда сдвиговый регистр не регает фронты, - как я понял это связанно с тем что я неправильно считаю СДИ (начало и конец) посылки. Продолжаю работать, всё ещё жду советов P.s. Версия которую я выложил уже не актуальна, но логику работы понять можно |
29.03.2021, 11:48 | #3 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 337
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Преобразование последовательности импульсов.
С помощью отладчика пробовали свою проблему решить?
__________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
29.03.2021, 12:05 | #4 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Советую использовать не DIN, а счётный вход. И анализировать изменение счётчика. Так вы точно ничего не пропустите и легче будет отлаживаться.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
29.03.2021, 14:38 | #5 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
|
29.03.2021, 14:57 | #6 | |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
У Вас прям на пределе. Лучше взять 3F. Т.е. минимальная длительность импульса с учетом что нет никаких помех и сбоев должна быть 30 мс. Ну и далее синхронизация, оптимальный фильтр, критерий правдоподобия и т.д. Ищите оптимальный (согласованный) цифровой фильтр. В данном случае исходный сигнал попроще, поэтому автокорелляционная функция нуля и единицы будет так же простая. Как то давно делал обработку DPSK сигнала на микроконтроллере. Простые методы не работают. Я так понимаю на проверку аргументов да фигня это все Вы уже некоторое время затратили. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
|
29.03.2021, 16:09 | #7 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Да я в курсе, что на пределе.
Цитата:
Намного проще. Файлик приложил. А чем грозит уменьшение цикла SmLogix до 5 мс? |
|
29.03.2021, 16:20 | #8 |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов
Ваш сигнал? Накидал в Labview
Если понадобится промоделировать по науке, обращайтесь. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
29.03.2021, 16:23 | #9 | |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Следовательно свертка с бинарным кодом. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
|
29.03.2021, 16:25 | #10 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
По мне так надо ловить 120 мсек и выше, количество нулей явно покажет счётный вход, можно даже не ловить мелкие импульсы.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
29.03.2021, 16:26 | #11 | |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Уменьшение цикла вопрос к производителю. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
|
29.03.2021, 20:12 | #12 | ||
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Все импульсы и паузы несут информацию, в конце должно получится число длиной символов 126. У меня в алгоритме по (отрицательному фронту) концу СДИ начинается запись в сдвиговый регистр. Стоят два счётчика, один с инвертированным сигналом. Счётчики считают до 10, если досчитал, значит идёт ДИ что = 1. Если не успел, то его сбросит фронт. Так же сдвиговый регистр на каждый фронт делает смещение с начала посылки. Но по итогу бывает что то правильно он раасшифрует, то пропустит пару записей. Ладно завтра ставлю дебагер, с ним дело пойдёт быстрее, надеюсь. И всё таки что произойдёт если я цикл сделаю 5 мс, какие последствия? Добавлено через 3 минуты Цитата:
Пару тройку установок делал на нём в университете. |
||
30.03.2021, 08:01 | #13 | |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Плохое свойство сигнала, что базис не ортонормированный. Т.е свертка сигнала соответствующего 0 и 1 не дают 0. Несущая в этом случае плохо определяется, так как нет точного значения конца символа, это либо 20 мс либо 120. На мой взгляд нужно ловить 3 символа Старт (переход в 1, - 260 мс 1, переход в 0) - Свертка 28 тактов 1 (изменение, 120 мс, изменение) - свертка 14 тактов 0 (изменение, 20 мс, изменение) - свертка 4 тактов По старту переходить к символам. При приеме очередного символа устанавливать начало отсчета тактов. Попробовать добавить джиттинг (изменение времени такта 18-22 мс). При приеме всех символов определение конечного символа. Проще в Labview 2020 смоделировать. Есть официальная бесплатная версия. Генерацию я Вам набросал. Вторая картинка в виде диаграммы - VI Snippet. Перетаскиваете картинку на поляну, получаете готовый код. Что такое свертка, думаю помните. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
|
30.03.2021, 09:01 | #14 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 337
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Если контроллер, как в прикрепленном проекте, то там ограничение 10 мс.
__________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
30.03.2021, 09:48 | #15 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Странно тогда что лоджик даёт поставить меньше 10мс< и даже запускается и работает. И быстродействие действительно увеличивается) |
|
30.03.2021, 09:51 | #16 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
|
|
30.03.2021, 10:27 | #17 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Ничего хорошего для вашей задачи.
Добавлено через 3 минуты Тем, что не имея необходимости отлавливать 20 мсек вы всегда будете знать их количество. Это сильно снижает требования к времени цикла. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
30.03.2021, 10:45 | #18 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 337
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Понаблюдайте за блоком realtick и сравните его с settick, по хорошему он должен быть меньше 30% последнего.
__________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
30.03.2021, 10:57 | #19 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
В общем получается что в таком случае, нет подушки безопасности и если что то пойдёт не так, то будет беда? А у матрикса какой минимальный тик? |
|
30.03.2021, 11:02 | #20 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
10 у всех современных.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
30.03.2021, 11:04 | #21 | ||
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 337
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Цитата:
https://forum.segnetics.com/showthread.php?t=2695 __________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
||
31.03.2021, 12:47 | #22 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Отладчик конечно пушка, спасибо! Изучение программы с отладчиком позволило найти проблему и она заключается в том, что приходящий сигнал искажается.
Опыт я проводил так: к прошлому SMH4 с модулем расширения добавил ещё один для формирования сигнала. Соединил DI7(счётный вход) первого и DO2(оптореле) второго между собой, добавив светодиод с резистором для индикации. Сформировал укороченный сигнал, по формату соответствующий моему. Проверил длительности импульсов и пауз сформированного сигнала на соответствие с помощью осциллографа. Длительности получились то что надо. Дальше в дело вступил отладчик, см. приложение. Отправленный сигнал - это то что я снял дебагером со второго ПЛК. В реальности сигнал получается +10 мс к длительности каждого импульса. т.е. 10 мс+10 мс = 20 мс - короткий импульс или пауза В итоге получился идеальный сигнал - кто не верит могу csv с осциллографа прислать. Полученный сигнал это сигнал снятый с счётного входа. Начало и конец посылки это выход с счётчика для определения СДИ Фронт на сдвиговый регистр это сигнал приходящий на вход ^ Счётчик ДИ/ДП - ловит длинные импульсы и паузы Зелёным я отметил верные срабатывания, синим ошибки. Вдобавок красной линией выделил проблемные места. Как удалось установить программа работает правильно, но при возникновении очень короткой паузы, фронт не успевает сбросить своё состояние. Осталось выяснить в чём причина искажения сигнала? Цикл опроса в 10 мс? Хотя на 5 мс тоже самое Последний раз редактировалось Shurion, 31.03.2021 в 12:59 |
01.04.2021, 14:14 | #23 | |
Senior Member
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили:
10 раз(а) в 10 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Так же как не должно быть особых проблем. Если сделать все как в школе учили у меня на вскидку работает. Причем с джиттером +- 7 мс и тактом приема 10 мс. На видео заметно сильно неодинаковые символы. Прием и декодирование сигнала Свертка с 0, свертка с 1, стартовый импульс, проверки всякие, критерии правдоподобия. __________________ В жизни 2 правила успеха: 1 Не говори всего что знаешь 2 ... |
|
02.04.2021, 00:17 | #24 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
|
|
02.04.2021, 09:26 | #25 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Задача-то как раз решаема, лоджик конкретно в этой ситуации ни при чём.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
02.04.2021, 10:13 | #26 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
|
02.04.2021, 10:51 | #27 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Я уже намекал, что короткие импульсы считал бы счётчиком. Точнее, считались бы все, но длинные импульсы отлавливаются надёжно, поэтому их можно вычитать из счётчика.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
02.04.2021, 11:58 | #28 |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
|
02.04.2021, 12:00 | #29 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 115
Благодарил(а): 15 раз(а)
Поблагодарили:
660 раз(а) в 604 сообщениях
|
Ответ: Преобразование последовательности импульсов.
А чем длинная пауза отличается от длинного импульса?
Смысл использования счётчика исключительно в том, чтобы гарантированно не пропустить короткий импульс. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
02.04.2021, 12:38 | #30 | |
Senior Member
Регистрация: Sep 2019
Адрес: SPb
Сообщения: 178
Благодарил(а): 12 раз(а)
Поблагодарили:
18 раз(а) в 18 сообщениях
|
Ответ: Преобразование последовательности импульсов.
Цитата:
Используя счётный вход мы можем контролировать длину посылки. Если он посчитал меньше или больше 63, значит посылка неправильная. Вы предлагаете вычитать из этого количество длинных импульсов? или что? я не совсем понимаю ваш ход мыслей. Или запоминать состояние счётного входа когда был обнаружен длинный импульс? |
|