Таблица состояний Byte
Таблица состояний Byte
Не силён в программировании, поэтому прошу помощи тут.
Нужен блок по типу таблица состояний, только с типом данных byte.
Опишу для понимания.
Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Хочется, чтобы в блоке можно было задать количество выходов и к каждому выходу условие на срабатывание.
Т.е. если пришло сообщение в can-шине b1=55 b2=4 b3=6 ... b7=1, то выод Q1 ативен на один цикл программы.
Или может кто подскажет, как это реализовать проще?
Сейчас делаю через кучу блоков сравнений + блок AND.
Нужен блок по типу таблица состояний, только с типом данных byte.
Опишу для понимания.
Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Хочется, чтобы в блоке можно было задать количество выходов и к каждому выходу условие на срабатывание.
Т.е. если пришло сообщение в can-шине b1=55 b2=4 b3=6 ... b7=1, то выод Q1 ативен на один цикл программы.
Или может кто подскажет, как это реализовать проще?
Сейчас делаю через кучу блоков сравнений + блок AND.
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Таблица состояний Byte
Может выложите пример с используемым блоком? Тогда проще будет Вам помочь.ggen4ik писал(а): 18 июн 2022, 20:31 Есть блок чтения can-шины, на выходе которого выдаются значения типа byte.
Возможно это окажется полезным для широкого практического использования.
Таблица состояний Byte
Если делать блоками, то можно вот так:
Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
Таблица состояний Byte
Т.е. в моём примере:
Нажали на стороннем устройстве ПЛЕЙ, в кан-шину прилетело сообщение 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 секунду:
На самом деле тут будет ещё больше блоков. К каждому выходу блок конвертации (9 блоков), потом к каждому блоку конвертации блок добавления в стек (Кстати насколько они правильно будут записываться в стек, сообщение же прилетает всё разом?). И потом всё равно куча блоков сравнения строк.Aviacode писал(а): 19 июн 2022, 09:07 Если делать блоками, то можно вот так:
Входящие байты конвертировать блоком в char, а затем, записывать в стек массива.
Блоком "Сумма элементов массива" считывать значение этого массива, на выходе будет строка.
Строки сравнивать с уже известными значениями (которые заранее конечно перевести в char) .
Итого без сравнения всего три блока.
В моём примере 2 сообщения анализируются, а если их будет 20 или значительно больше...
Но как вариант обязательно попробоую сделать с массивом, может это будет удобнее.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 152 раза
Таблица состояний Byte
Спасибо за пример.ggen4ik писал(а): 19 июн 2022, 11:13 Сейчас вот так. Грубо говоря, есть несколько устройств, которе общаются по can-шине. С помощью логического анализатора посмотрел, какие сообщения они отправляют, например, в случае нажатия кнопки ПЛЕЙ/СТОП.
Нужно будет развернуть стенд под CAN и попробовать. Возможно что-то предложим.
Но это попозже, сейчас запланированы другие задачи.
Таблица состояний Byte
Вот так я это видел:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Dryundel
- Полковник
- Сообщения: 2420
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Поблагодарили: 21 раз
Таблица состояний Byte
[ref]ggen4ik[/ref], вот попробуй.ggen4ik писал(а): 18 июн 2022, 20:31 Нужен блок по типу таблица состояний, только с типом данных byte.
Слепил на скорую руку CAN компаратор. Может не слишком логичное название, ну уж не обессудь.
Шилда чтения CAN шины у меня нет. Так что не тестировал, но должно работать.
В пакете два блока, один основной - подключается к блоку "Чтение шины CAN" (использовать один раз)
И блоки сравнения присылаемых пакетов. Каждый из них настраивается на свой пакет и выдает импульс в один цикл при совпадении принятого пакета. Количество этих блоков по потребности.
Байт размера пакета (Size) не используется. Тестируй.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Таблица состояний Byte
Супер, то что нужно. Всё работаетDryundel писал(а): 20 июн 2022, 16:12[ref]ggen4ik[/ref], вот попробуй.ggen4ik писал(а): 18 июн 2022, 20:31 Нужен блок по типу таблица состояний, только с типом данных byte.
Слепил на скорую руку CAN компаратор. Может не слишком логичное название, ну уж не обессудь.
Шилда чтения CAN шины у меня нет. Так что не тестировал, но должно работать.
В пакете два блока, один основной - подключается к блоку "Чтение шины CAN" (использовать один раз)
И блоки сравнения присылаемых пакетов. Каждый из них настраивается на свой пакет и выдает импульс в один цикл при совпадении принятого пакета. Количество этих блоков по потребности.
Байт размера пакета (Size) не используется.
1.jpg
CAN компаратор ТЕСТ.flp
Тестируй.

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