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

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

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

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.ステートマシン解析(処理下請け/接着パック)

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

4つの穴Uart_setupを設定しないと閉じます。on_initで使用するすべてのセカンダリポートを初期化します。パケットは完全なフレームではありません。下請けバンドルはステートマシン解析をバッファする必要があり、これがパッシブプロトコルのバグの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に帰属します。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注