Таблица состояний Byte

Может кто сделать?

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
ggen4ik
Рядовой
Сообщения: 11
Зарегистрирован: 09.02.2022{, 17:34}
Репутация: 0
Имя: Evgeny

Таблица состояний Byte

#1

Сообщение ggen4ik » 18.06.2022{, 20:31}

Не силён в программировании, поэтому прошу помощи тут.
Нужен блок по типу таблица состояний, только с типом данных byte.
Опишу для понимания.
Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Хочется, чтобы в блоке можно было задать количество выходов и к каждому выходу условие на срабатывание.
Т.е. если пришло сообщение в can-шине b1=55 b2=4 b3=6 ... b7=1, то выод Q1 ативен на один цикл программы.
Или может кто подскажет, как это реализовать проще?
Сейчас делаю через кучу блоков сравнений + блок AND.

ecoins
Полковник
Сообщения: 1593
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 286
Откуда: Шатура
Имя: Энвер

Таблица состояний Byte

#2

Сообщение ecoins » 18.06.2022{, 23:43}

ggen4ik писал(а):
18.06.2022{, 20:31}
Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Может выложите пример с используемым блоком? Тогда проще будет Вам помочь.
Возможно это окажется полезным для широкого практического использования.

Aviacode
Рядовой
Сообщения: 18
Зарегистрирован: 15.02.2021{, 15:04}
Репутация: 0
Имя: Серго

Таблица состояний Byte

#3

Сообщение Aviacode » 19.06.2022{, 09:07}

Если делать блоками, то можно вот так:

Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.

ggen4ik
Рядовой
Сообщения: 11
Зарегистрирован: 09.02.2022{, 17:34}
Репутация: 0
Имя: Evgeny

Таблица состояний Byte

#4

Сообщение ggen4ik » 19.06.2022{, 10:53}

CAN.JPG.jpg
Сейчас вот так. Грубо говоря, есть несколько устройств, которе общаются по can-шине. С помощью логического анализатора посмотрел, какие сообщения они отправляют, например, в случае нажатия кнопки ПЛЕЙ/СТОП.
Т.е. в моём примере:
Нажали на стороннем устройстве ПЛЕЙ, в кан-шину прилетело сообщение 100_5_56_4_1_0_0_0_0_0 (Code_Size_d0_d1_d2_d3_d4_d5_d6_d7)
Я сравниваю важную для меня часть сообщения (Code и d0 d1 d2) и если совпадает, то включаю выход Д3 (хотя вообще то нужно сравнивать всё сообщение, мало ли что может приететь в кан шине, но это просто для примера).
Если прилетает сообщение 100_5_56_4_0_0_0_0_0_0 (при нажатии СТОП), то выход Д3 отключается.

Конкретно в моём случае выход Code можно не сравнивать, так как это адрес устройства, на котором нажали кнопку ПЛЕЙ, нужно лишь знать что ПЛЕЙ был нажат.

Отправлено спустя 20 минут 1 секунду:
Aviacode писал(а):
19.06.2022{, 09:07}
Если делать блоками, то можно вот так:

Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
На самом деле тут будет ещё больше блоков. К каждому выходу блок конвертации (9 блоков), потом к каждому блоку конвертации блок добавления в стек (Кстати насколько они правильно будут записываться в стек, сообщение же прилетает всё разом?). И потом всё равно куча блоков сравнения строк.
В моём примере 2 сообщения анализируются, а если их будет 20 или значительно больше...
Но как вариант обязательно попробоую сделать с массивом, может это будет удобнее.

ecoins
Полковник
Сообщения: 1593
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 286
Откуда: Шатура
Имя: Энвер

Таблица состояний Byte

#5

Сообщение ecoins » 19.06.2022{, 11:18}

ggen4ik писал(а):
19.06.2022{, 11:13}
Сейчас вот так. Грубо говоря, есть несколько устройств, которе общаются по can-шине. С помощью логического анализатора посмотрел, какие сообщения они отправляют, например, в случае нажатия кнопки ПЛЕЙ/СТОП.
Спасибо за пример.
Нужно будет развернуть стенд под CAN и попробовать. Возможно что-то предложим.
Но это попозже, сейчас запланированы другие задачи.

Aviacode
Рядовой
Сообщения: 18
Зарегистрирован: 15.02.2021{, 15:04}
Репутация: 0
Имя: Серго

Таблица состояний Byte

#6

Сообщение Aviacode » 19.06.2022{, 19:17}

Вот так я это видел:
Вложения
ggen4ik.png

Аватара пользователя
Dryundel
Полковник
Сообщения: 1759
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 542
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Таблица состояний Byte

#7

Сообщение Dryundel » 20.06.2022{, 16:12}

ggen4ik писал(а):
18.06.2022{, 20:31}
Нужен блок по типу таблица состояний, только с типом данных byte.
ggen4ik, вот попробуй.
Слепил на скорую руку CAN компаратор. Может не слишком логичное название, ну уж не обессудь.
Шилда чтения CAN шины у меня нет. Так что не тестировал, но должно работать.
В пакете два блока, один основной - подключается к блоку "Чтение шины CAN" (использовать один раз)
И блоки сравнения присылаемых пакетов. Каждый из них настраивается на свой пакет и выдает импульс в один цикл при совпадении принятого пакета. Количество этих блоков по потребности.
Байт размера пакета (Size) не используется.
1.jpg
1.jpg (29.99 КБ) 92 просмотра
CAN компаратор ТЕСТ.flp
(391.16 КБ) 8 скачиваний
Тестируй.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

ggen4ik
Рядовой
Сообщения: 11
Зарегистрирован: 09.02.2022{, 17:34}
Репутация: 0
Имя: Evgeny

Таблица состояний Byte

#8

Сообщение ggen4ik » 20.06.2022{, 20:26}

Dryundel писал(а):
20.06.2022{, 16:12}
ggen4ik писал(а):
18.06.2022{, 20:31}
Нужен блок по типу таблица состояний, только с типом данных byte.
ggen4ik, вот попробуй.
Слепил на скорую руку CAN компаратор. Может не слишком логичное название, ну уж не обессудь.
Шилда чтения CAN шины у меня нет. Так что не тестировал, но должно работать.
В пакете два блока, один основной - подключается к блоку "Чтение шины CAN" (использовать один раз)
И блоки сравнения присылаемых пакетов. Каждый из них настраивается на свой пакет и выдает импульс в один цикл при совпадении принятого пакета. Количество этих блоков по потребности.
Байт размера пакета (Size) не используется.
1.jpg
CAN компаратор ТЕСТ.flp
Тестируй.
Супер, то что нужно. Всё работает :smile9:

Ответить

Вернуться в «Разработка пользовательских блоков»