[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Parsing binary data from an RS232 connection
- From: Cedric Mauclair <cedric.mauclair@...>
- Date: Thu, 12 Dec 2019 19:34:25 +0000
On December 12, 2019 12:23:29 PM UTC, Marc Balmer <marc@msys.ch> wrote:
>
>
>> Am 07.12.2019 um 15:24 schrieb Cedric Mauclair
><cedric.mauclair@gmail.com>:
>>
>> On December 7, 2019 10:00:46 AM UTC, Marc Balmer <marc@msys.ch>
>wrote:
>>> We have a module 'csp' (Characater Sequence Parser) for this, where
>you
>>> can define sequences to be detected in data streams and call a
>function
>>> if the sequence pattern gets detected:
>>>
>>> local p = csp.new(defaultHandler)
>>>
>>> p:sequence('\027*', reset)
>>> p:sequence('\027!', softReset)
>>> p:sequence('\027B0', b0)
>>> p:sequence('\027B1', b1)
>>> p:sequence('\013', function () print('newline') end)
>>> p:sequence('\029A0', b0)
>>> p:sequence('\029A3', b1)
>>> p:sequence('\027B%c-', b)
>>> p:sequence('\029B%c', b)
>>> p:sequence('\027=%c%c', pos)
>>> p:sequence('\x05%S\x0d', function (s) print('string', s) end)
>>>
>>> -- decimals
>>>
>>> p:sequence('\027[%d', decimal)
>>> p:sequence('\027p%d;', decimal)
>>>
>>> p:dump()
>>>
>>> p:parse('\027[45x\n')
>>> p:parse('\027p42;abc\n')
>>>
>>> We used it to decode ESC/POS printer commands.
>>>
>>> Nut sure though if this would match you usecase.
>>>
>>>> Am 07.12.2019 um 03:38 schrieb Tim McCracken
>>> <Tim.McCracken@Utelety.com>:
>>>>
>>>>
>>>> Does anyone have a suggestion for parsing the data or even an
>>> existing project? Any and all input is welcome.
>>>>
>>>> Thanks!
>>>> Russell
>>>>
>>>>
>>>> Russell,
>>>> I have been working on a “smart buffer” for just this issue,
>although
>>> it is not complete yet. However, it might give you some ideas on how
>to
>>> proceed. It is NOT pure Lua, but rather consists of two userdata
>object
>>> – the “smart buffer” and the serial port driver that takes the smart
>>> buffer as an argument.
>>>>
>>>> The serial port driver simply reads and writes binary data from the
>>> smart buffer. Then in Lua, the application can read and write
>various
>>> sized variables from the smart buffer. For example, the library has
>the
>>> following functions/methods:
>>>>
>>>> Sequential Access: (pushes to the TX buffer, pops from the RX
>buffer)
>>>> get_byte(), get_word(), put_word(value)
>>>>
>>>> Random Access:
>>>> get_byte(offset), get_word(access), put_word(offset, value)
>>>>
>>>> Of course, if you are writing a userdata library, it may be just as
>>> easy to fully decode the serial protocol in ‘C’ and use callbacks to
>>> Lua to process the data. In my experience, this may actually be a
>>> better approach for “structured” protocols such as those used for
>>> industrial automation (Modbus) or SCADA (DNP3).
>>>>
>>>> Tim
>>
>> Hi everyone,
>>
>> Seems like a very interesting module. Is it sharable?
>
>We have not published it under an an open source license, if it is that
>what you mean. We thought it was to specialised (we used it to
>implement printer simulators).
>
>
>
>> --
>> CM.
>>
Yes, that was indeed the meaning of the question. Thanks anyway.
--
CM.