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

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
ggen4ik
Рядовой
Сообщения: 24
Зарегистрирован: 09 фев 2022, 17:34
Имя: Evgeny

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

Сообщение ggen4ik »

Не силён в программировании, поэтому прошу помощи тут.
Нужен блок по типу таблица состояний, только с типом данных byte.
Опишу для понимания.
Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Хочется, чтобы в блоке можно было задать количество выходов и к каждому выходу условие на срабатывание.
Т.е. если пришло сообщение в can-шине b1=55 b2=4 b3=6 ... b7=1, то выод Q1 ативен на один цикл программы.
Или может кто подскажет, как это реализовать проще?
Сейчас делаю через кучу блоков сравнений + блок AND.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

ggen4ik писал(а): 18 июн 2022, 20:31 Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Может выложите пример с используемым блоком? Тогда проще будет Вам помочь.
Возможно это окажется полезным для широкого практического использования.
Aviacode
Рядовой
Сообщения: 41
Зарегистрирован: 15 фев 2021, 15:04
Имя: Серго
Благодарил (а): 1 раз

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

Сообщение Aviacode »

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

Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
ggen4ik
Рядовой
Сообщения: 24
Зарегистрирован: 09 фев 2022, 17:34
Имя: Evgeny

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

Сообщение ggen4ik »

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 июн 2022, 09:07 Если делать блоками, то можно вот так:

Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
На самом деле тут будет ещё больше блоков. К каждому выходу блок конвертации (9 блоков), потом к каждому блоку конвертации блок добавления в стек (Кстати насколько они правильно будут записываться в стек, сообщение же прилетает всё разом?). И потом всё равно куча блоков сравнения строк.
В моём примере 2 сообщения анализируются, а если их будет 20 или значительно больше...
Но как вариант обязательно попробоую сделать с массивом, может это будет удобнее.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ecoins
Полковник
Сообщения: 4005
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 137 раз
Поблагодарили: 152 раза

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

Сообщение ecoins »

ggen4ik писал(а): 19 июн 2022, 11:13 Сейчас вот так. Грубо говоря, есть несколько устройств, которе общаются по can-шине. С помощью логического анализатора посмотрел, какие сообщения они отправляют, например, в случае нажатия кнопки ПЛЕЙ/СТОП.
Спасибо за пример.
Нужно будет развернуть стенд под CAN и попробовать. Возможно что-то предложим.
Но это попозже, сейчас запланированы другие задачи.
Aviacode
Рядовой
Сообщения: 41
Зарегистрирован: 15 фев 2021, 15:04
Имя: Серго
Благодарил (а): 1 раз

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

Сообщение Aviacode »

Вот так я это видел:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2420
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Поблагодарили: 21 раз

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

Сообщение Dryundel »

ggen4ik писал(а): 18 июн 2022, 20:31 Нужен блок по типу таблица состояний, только с типом данных byte.
[ref]ggen4ik[/ref], вот попробуй.
Слепил на скорую руку CAN компаратор. Может не слишком логичное название, ну уж не обессудь.
Шилда чтения CAN шины у меня нет. Так что не тестировал, но должно работать.
В пакете два блока, один основной - подключается к блоку "Чтение шины CAN" (использовать один раз)
И блоки сравнения присылаемых пакетов. Каждый из них настраивается на свой пакет и выдает импульс в один цикл при совпадении принятого пакета. Количество этих блоков по потребности.
Байт размера пакета (Size) не используется.
1.jpg
CAN компаратор ТЕСТ.flp
Тестируй.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ggen4ik
Рядовой
Сообщения: 24
Зарегистрирован: 09 фев 2022, 17:34
Имя: Evgeny

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

Сообщение ggen4ik »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя