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

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

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
ggen4ik
Рядовой
Сообщения: 12
Зарегистрирован: 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
Полковник
Сообщения: 1596
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 288
Откуда: Шатура
Имя: Энвер

Таблица состояний 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
Рядовой
Сообщения: 12
Зарегистрирован: 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
Полковник
Сообщения: 1596
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 288
Откуда: Шатура
Имя: Энвер

Таблица состояний 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
Полковник
Сообщения: 1763
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 544
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Таблица состояний 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 КБ) 109 просмотров
CAN компаратор ТЕСТ.flp
(391.16 КБ) 10 скачиваний
Тестируй.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

ggen4ik
Рядовой
Сообщения: 12
Зарегистрирован: 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:

Ответить

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