Задать вопрос

Как работать в Lua c байтами в порту?

Есть два неких контроллера. У этих контроллеров есть порты(RS485, но не суть), которые соединены между собой. Еще туда же подключены несколько простых устройств на МК. Один контроллер может кидаться байтами, второй контроллер их может принимать. На контроллерах Linux(закрытый чуть более чем полностью) и LUA. Больше ничего нет.
Внимание, вопрос: Как мне в Lua отправить и принять не символ, не строку, а просто байт или несколько байтов в 16-ричном представлении? Т.е. я отправляю 0х15, и на другом контроллере получаю тоже 0x15.
Пока что я промучался час, и получаю все что угодно, но не 0x15. Так и не понял, то ли он при отправке конвертирует его во что-то, то ли при приеме.

Отправка:
require('serial')
port = serial.open('/dev/RS485-2', {
  baudrate = 115200,
  databits = 8,
  stopbits = 1,
  parity = 'none',
  duplex = 'half'
})
port:write(0x15)
port:close()


Прием:
require('serial')
port2 = serial.open('/dev/RS485-3', {
  baudrate = 115200,
  databits = 8,
  stopbits = 1,
  parity = 'none',
  duplex = 'half'
})
data = port2:read(1)
byte=string.byte(data)

log(string.format("%o, %x, %d", byte,byte,byte))
port2:close()
  • Вопрос задан
  • 1312 просмотров
Подписаться 4 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    DB-029 Redis для разработчиков
    1 неделя
    Далее
  • Skysmart
    Roblox для детей
    3 месяца
    Далее
  • Hello world
    Создание 3D‑игр в ROBLOX для детей и подростков
    9 месяцев
    Далее
Решения вопроса 1
@aelfimov
Разбирался с той же проблемой.
data = port2:read(1) должно быть так data = port2:read(1, 1) вторая еденица - время ожидания данных. и обязательно сбрасывать порт после или до сессии port:flush()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы