Поиск подстроки.

Ответить
Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#1

Сообщение Max » 12.09.2016{, 20:24}

Может я не понимаю суть этого стандартного блока? Ведь он должен выделять именно то, что подано (написано) на входе SubStr и соответственно формировать лог. единицу на выходе Contain в случае совпадения на входе?
У меня этот блок на все подряд срабатывает что бы не было на входе SubStr....

Смысл этого блока? Или у меня что то с программой?

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Поиск подстроки.

#2

Сообщение rw6cm » 13.09.2016{, 08:01}

Max писал(а):Смысл этого блока? Или у меня что то с программой?
Можно конкретный пример выложить?
Win10-64, FLProg (portable)

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#3

Сообщение Max » 13.09.2016{, 08:07}

rw6cm писал(а):Можно конкретный пример выложить?
Да, про пример забыл. Выложу.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#4

Сообщение Max » 13.09.2016{, 19:45}

Конструкция на самом деле элементарная, но не работает.

Верхний по схеме канал принимает все что поступает в переменную IncomingSMS вне зависимости, что указано на входе SubStr, хотя должен отбирать только указанное на входе значение.

Честно говоря, непонятно тогда, как работает этот блок? Как же он ищет, коли реагирует на все подряд?

P.S. Буду делать, как ранее было обсуждено в этой теме.
Вложения
2889534.jpg

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

Поиск подстроки.

#5

Сообщение OlegAn1962 » 13.09.2016{, 20:13}

Max писал(а):Верхний по схеме канал принимает все что поступает в переменную IncomingSMS вне зависимости, что указано на входе SubStr, хотя должен отбирать только указанное на входе значение.
И что, на выходе постоянно 1, или Вы не смотрели?

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#6

Сообщение Max » 13.09.2016{, 21:15}

OlegAn1962 писал(а):И что, на выходе постоянно 1, или Вы не смотрели?
Посмотрел. До этого ориентировался на значения в лишь переменных... Да, блоки работают и выдают лог. ед, но почему в переменных оказывается не предназначенное для неё данные, а именно в переменную Ontimer записывается данные предназначенные для переменной Offtimer.
А вот с переменной Offtimer все нормально... Странно.
Выложу кусок проекта уже в в виде файла FLprog.
Вложения
Progect.rar
(225.8 КБ) 61 скачивание
Последний раз редактировалось Max 13.09.2016{, 21:16}, всего редактировалось 1 раз.

OlegAn1962
Лейтенант
Сообщения: 361
Зарегистрирован: 07.09.2015{, 23:53}
Репутация: 0

Поиск подстроки.

#7

Сообщение OlegAn1962 » 13.09.2016{, 22:31}

Так блоки работают нормально получается, проблема в "почему в переменных оказывается не предназначенное для неё данные", это уже другой вопрос.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#8

Сообщение Слимпер » 14.09.2016{, 05:25}

OlegAn1962, Max, тут  НовыйUser прав, это ошибка работы программы я ее описывал в Порядок выполнения логики в FBD, сообщение 6.

А пока попробуй переделать плату Incoming SMS вот в такой вид :
СпойлерПоказать
Кстати в блоке GSM  выход Received_SMS, итак дает одиночный импульс, по этому убрал блоки Rtrig.

П.С, если кусок кода работает не так как ожидалось, для поиска ошибки, лучше перенести его в пустой проекта, попробовать его с компилировать, и часто становится ясно где глюк.
Это очень актуально, когда работаешь с участками кода, где важна последовательность расчета блоков,где расчет длится только один программный цикл.
Вложения
0839841.png
Последний раз редактировалось Слимпер 14.09.2016{, 05:30}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#9

Сообщение Max » 14.09.2016{, 06:12}

OlegAn1962 писал(а):Так блоки работают нормально получается, проблема в "почему в переменных оказывается не предназначенное для неё данные", это уже другой вопрос.
Ну, если можно сказать грубо, то не совсем так. Но, при этом по описанию и представлению ждешь от них немного другого... Слимпер правильно написал:
Слимпер писал(а):кусок кода работает не так как ожидалось,
Слимпер писал(а):это ошибка работы программы
Да, я уже это понял, что тут проблемка с порядком исполнения кода, но в Си  не разбираюсь и опираюсь только на функции самого FLProg.

Попробую предложенную Вами схему.

Вопрос еще в том, почему же в переменную (у которой включена галка команды по внешнему лог. сигналу) записывается то, что для неё не предназначено и висит в ней?
Последний раз редактировалось Max 14.09.2016{, 06:17}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#10

Сообщение Слимпер » 14.09.2016{, 07:52}

Max писал(а):Вопрос еще в том, почему же в переменную (у которой включена галка команды по внешнему лог. сигналу) записывается то, что для неё не предназначено и висит в ней?
 Может происходить так, что анализ содержит строка текст или нет строку,  проходит позже чем запись в перемену, тогда и будет такой косяк.
Т.е. Строка уже поменялась, а программа еще считает, что она содержит старую строку.

Еще я заметил, что многие на форуме располагаю блоки не правильно


СпойлерПоказать
Как писал автор, расчет положения блоков идет относительно правого верхнего угла платы.

По этому каждый следующий блок (где используются рассчитываемые в других блоках величины ), должен располагаться не только праве, но и ниже  (смотреть по правому верхнему углу блока) всех блоков с которыми соединены его входа. Притом не важно соединение в виде  линии или оно преобразована в текст.

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

Там еще есть деление на разные типы блоков, расчитываемые, оконечные, и логические. Логические (их положение меньше учитывается ), расчитываеммые блоки и оконечные (их критично), но так как нет списков деления блоков, то лучше так поступать со всеми.
Вложения
8686734.png
Последний раз редактировалось Слимпер 14.09.2016{, 08:04}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#11

Сообщение Max » 14.09.2016{, 08:38}

Да, еще в переменную (та что выше всех) поверх записанного ранее значения записывается еще и не предназначенное ей значение. Это особенно видно на дисплее.
Слимпер писал(а):Как писал автор, расчет положения блоков идет относительно правого верхнего угла платы.
Это надо вынести вообще на главную страницу! Это очень важно! Предлагаю вообще на главной странице сделать так наз. скрижалии (заповеди) для FLProg. Иначе, просто многие будут делать свои программы (казалось бы правильно!), а они не корректно будут работать. В результате человек будет искать то, чего можно избежать просто правильно расставив блоки!
Слимпер писал(а):Еще я заметил, что многие на форуме располагаю блоки не правильно
Да уж, я на это сильно внимание не обращал! Думал, что сверху вниз и небольшое смещение имеют роль, а тут ведь очень тонко все получается!

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#12

Сообщение Слимпер » 14.09.2016{, 09:42}

Max, Это я почерпнул из диалога с автором, можно почитать в этой теме сообщения 12-14, основные тезисы:


СпойлерПоказать
Блоки в плате могут быть трёх видов. Расчитываемые, оконечные, и логические.
В первую очередь обрабатываются расчитываеммые блоки. Это триггеры, таймеры, генераторы, сенсоры и т.д.
Затем обрабатываются оконечные блоки. Это в основном блоки которые не имеют выходов. Например вывод на дисплей, вывод на UART, запись в переменные.
Порядок обработки блоков внутри групп организован следующим образом.  Первым обрабатывается блок наиболее близкий по прямой (пришлось вспоминать расчёт гипотенузы в прямоугольном треугольнике) к правому верхнему углу платы. Последним соответственно самый дальний.
Логические блоки  (например AND, OR, входы, математика) не рассчитываются. При обработке блоков других типов запрашивается состояние выходов таких блоков. Они в ответ выдают логические выражения (готовый код С) соответствующие своей логике.  Такое решение принято для экономии памяти контроллера. Не хорошо было бы для каждого логического или математического действия создавать переменную. В большинстве случаев в этом нет необходимости.
Ну где то так. Это очень упрощённо, на самом деле логика компилятора намного сложнее. Я даже не очень представляю как её описать подробно. На это потребуется много времени и сил.
Так же была еще одна тема, она не много устарела, но вот выжимка от туда:


СпойлерПоказать
Теперь для расчётных блоков я ввёл предварительную сортировку по расстоянию к правому верхнему углу, так что привязки ко времени вставки в схему не будет. В первую очередь будут браться блоки наиболее близкие к правому верхнему углу, и к ним так же будут строится логические цепочки.

От правого верхнего. Затем строится цепочка и она обрабатывается в обратном порядке (слева направо). Это нужно что бы поймать конец цепочки. Сложно объяснить популярнее, там код метода огромный.
Последний раз редактировалось Слимпер 14.09.2016{, 11:16}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

Поиск подстроки.

#13

Сообщение Max » 14.09.2016{, 11:07}

Слимпер писал(а):Это я почерпнул из диалога с автором, можно почитать в этой теме сообщения 12-14, основные тезисы:
Прочел тему. Она для меня стала неким откровением...

Я теперь начал понимать, почему некоторые моменты в программе у меня просто неправильно работали, при том, что вроде логически все должно работать 100%...

Очень и очень печально, что автор программы проигнорировал последний пост в этой теме. Для очень многих бы открылись бы глаза... В принципе, последний заданный в той теме вопрос считаю не раскрытым.

И эта тема, по сути наиважнейшая, просто затерялась в разделе Баг-трекер-Непринятые!
Модератору надо бы её вынести на главную страницу, и огненными буквами записать на главной странице сайта!

Добавлено (14.09.2016, 11:07)
---------------------------------------------
Max писал(а):Слимпер
Получается Ваш вопрос, который был задан Вами в посте №15 так и не получил конкретный ответ? И выводы Вы сделали по собственным так сказать, рассуждениям?
Последний раз редактировалось Max 14.09.2016{, 11:07}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#14

Сообщение Слимпер » 14.09.2016{, 11:19}

Max писал(а):Получается Ваш вопрос, который был задан Вами в посте №15 так и не получил конкретный ответ? И выводы Вы сделали по собственным так сказать, рассуждениям?
Часть ответов я получил в другой теме, выше давал ссылку, но она что криво вставилась, сейчас поправил.
Вот еще раз FBD Порядок обработки блоков на плате

Ну и да, часть просто когда были глюки, лез смотрел как это в коде выглядит, и сделал выводы для себя.
Последний раз редактировалось Слимпер 14.09.2016{, 11:19}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#15

Сообщение Слимпер » 14.09.2016{, 15:34}

НовыйUser писал(а):прикрепил часть проекта. как правильно расположить ?Прикрепления: how.flp(177Kb)
Ну примерно  например так
Вложения
how_.flp
(171.21 КБ) 58 скачиваний

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

Поиск подстроки.

#16

Сообщение Слимпер » 14.09.2016{, 16:32}

НовыйUser писал(а):свести глюки расположения блоков на минимум таким вариантом получится ?
Получится, но поиск подстороки все равно может сработать не так.

Ну и это уже слишком сильный вариант.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Поиск подстроки.

#17

Сообщение rw6cm » 16.09.2016{, 08:11}

Слимпер писал(а):Ну и да, часть просто когда были глюки, лез смотрел как это в коде выглядит
Тоже пришлось изучать C++, хотя это с трудом дается.
Устал отлавливать глюки по интуиции ))
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Поиск подстроки.

#18

Сообщение rw6cm » 17.09.2016{, 01:40}

НовыйUser писал(а):есть простой способ искать ошибки
И как это с FLProg скрестить? ))
Win10-64, FLProg (portable)

Ответить

Вернуться в «переменные»