Visual HMI Free Serial Protocol(パッシブ):on_uart_recvカスタムフレームParse

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

カスタムプロトコル(パッシブ):Visual HMIにはDCBUS、XGUS、Modbus(RTU/TCPマスター/スレーブ)、三菱 FX 2 N、デルタDVP、シーメンスPPIなどのプロトコルが組み込まれていますが、実際のフィールドには常にあります。プライベート·プロトコル受け取るために。LUAはシリアルポートを制御し、カスタムフレームの送受信解析を実現します。この記事は受動的です:データを受信したら、Parseするだけです。

1. APIの概要

関数の機能説明書は
uart_setup(ch, baudrate, databits, stopbit, parity)ストップビット0=1ビット/1=1.5ビット;パリティ0=なし/1=奇数/2=偶数。セカンダリシリアルポートは呼び出して有効にする必要があります、メインシリアル(ch=0)はデータのみを
on_uart_recv(ch, packet)パッシブ受信コールバック、パケットは1のバイトテーブルから添字を持つ。下請け/接着可能自分で分析する必要がある。
uart_send(ch, packet)送信バイトテーブル
set_free_protocol(en)1=メインシリアルポートスクリプトの引き継ぎ(フリープロトコル);0=プロジェクト構成の元のプロトコルを復元する

メインシリアルポート(ch=0)がon_uart_recvをトリガする条件:エンジニアリング構成プロトコルが“カスタム”に設定されているか、スクリプト内でset_free_protocol 1。メインシリアルポートがModbusなどの組み込みプロトコルで占有されている場合、on_uart_recvは呼び出されません。。DCBUS/XGUSシリアルパラメータ固定:1ビットストップビット、チェックなし。

2.プロトコルの例:LED照明制御

フレーム構造:

方向性はフレームヘッド1B長さ1B機能コード2BデータnBフレームテール2B
デバイス→画面0x5A関数コードからフレーム末尾までのバイト数0x0001~0xFFFFVariableシングル0xFC 0xFF
画面→デバイス0xA9同上、同じ同上、同じVariableシングル0xFC 0xFF

長さ=関数コード2 B+データnB +フレームテール2 B = n+4、ビッグエンド。機能コード:0 x 00 01 =スイッチ、0 x 00 02 =明るさ、0 x 00 03 =名前変更。

3.ステートマシンParse(処理下請け/接着パック)

recvBuf = {}        - 受信バッファ
STATE_IDLE、STATE_LETH、STATE_DATA = 0 1 2
= STATE_IDLE
フレームレン= 0

function on_uart_recv ch packet
  for i = 1 #packet do
    b =パケット[i]
    if state == STATE_IDLE then
      b == 0 x 5 aの場合
        state = STATE_LENGTH
        recvBuf = {}
      End of Endシングル
    elseif == STATE_LETH then
      frameLen = b                 2番目のバイト:長さ
      = STATE_DATA
      recvBuf = {b}
    elseif state == STATE_DATA
      table.insert recvBuf b
      #recvBuf = frameLen thenの場合
        1つのフレームを閉じてParseする
        parse_recvBuf
        = STATE_IDLE
      End of Endシングル
    End of Endシングル
  End of Endシングル
End of Endシングル

function parse_frame buf
  local func = buf[2] 8 0xFF func 0xFF}
  for i = 1 #payload do table.insert pkt payload[i] end
  table.insert pkt 0xFC; table.insert pkt 0xFF
  uart_send 0 p
End of Endシングル

Return toはハードウェア割り込みではなく、システムタスクポーリングがトリガーされます。コールバックで時間のかかるOperation(大きな文字列スプライシング、ファイルの読み書き)を行わないでください。

4つの穴Uart_setupを設定しないと閉じます。on_initで使用するすべてのセカンダリポートを初期化します。パケットは完全なフレームではありません。下請けバンドルはステートマシンParseをバッファする必要があり、これがパッシブプロトコルのバグの90%の原因です。③メインシリアルポートが内蔵プロトコルによって占有された場合、コールバックを受信できないプロジェクト内で“カスタム”を設定するか、set_free_protocol 1;④長さがはっきり(この例=関数コード2+データn+フレームテール2)では、1つのフレームを間違えることはできません。

Guangzhou Dai Technology Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)からの整理LUAチュートリアル“Custom Protocol-Passive Receiver”、著作権はDai Dai Technologyに帰属します。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.