Visual HMI Lua APIの概要:コールバック/Communication/レジスタの読み書き機能のクイックチャート

freeFree Technical Resource

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

Visual HMI PlatformのLua Scriptです。完全なAPIマニュアル:10個のシステムコールバック+ 32個の読み書きレジスタ関数+ 10個の描画関数、合計52個のインタフェース。スクリプトを書く前にこの記事を読んでください。チュートリアルを読むよりも早いです。プラットフォームはLua 5.3に基づく。

0.基本生成されたmain.lua

メニューエンジニアリング→スクリプトプログラミングはデフォルトでmain.luaを生成し、プロトコル対応のデータ型定義を自動的に使用します。

ENCRYPT_= 0        --LUAスクリプト暗号化スイッチ
データ型定義(プロトコルにより変更、以下Modbus)
VT_LW = 1           - 内部変数
_RW = 2           - フラッシュパワーダウンストレージ
VT_0 x = 10          【COIL】
VT_1 x = 11          --入力点離散入力
VT_3x = 12          --入力レジスタ
VT_4x = 13          - レジスタを保持する

function on_end
function on_run screen end
function on_update slave vtype addr end
function on_w screen_id_id end

FX 3 Uプロトコルには、VT_M(内部リレー)、VT_D(Dレジスタ)などのタイプもあります。on_updateのvtypeとget/set関数の最初の引数は、これらの定数を使用します。

1.一般的なコールバック関数(10)

コールバックトリガー·タイミング主なポイント
on_init()システムがLUAをロードした直後に1回実行初期化、dofile-他のluaのロード、初期値の書き込み
on_run(screen)メインサイクルごとに自動呼び出しコアサイクルスケジュール。delay_ms/ロングサイクル/ネットワーク同期/内部set_run_cycle;Modbusマスタ時別高周波書き込みスレーブバス渋滞
on_update(slave,vtype,addr)レジスタ/変数の値が変化したときにトリガーデータ駆動型はポーリングしません。シリアルポート/Modbusマスタ書き込み、on_update set_xxxはトリガされません(再帰防止);グローバルEN_ON_UPDATE_API_CB制御スイッチ
on_screen_change(screen)画面切り替え完了後初期化/同期/リソースロード
on_press(state,x,y)最大100msごとにタッチ状態が変化するstate 0持ち上げ/1押し/2長押し(押して1回だけトリガー);下の座標、点空白もトリガー
on_usb_inserted(driver)ディスク挿入認識driverはドラフト、Mシリーズは“2”で、グローバル変数でされる
on_usb_removed()ディスクを取り出す。クリア文字グローバル変数
on_sd_inserted(dir)SDカード挿入認識dir文字、Mシリーズは“1”
on_sd_removed()SDカードを取り出す。クリア文字グローバル変数
on_parse_timestamp(screen,control,timestamp)アラーム/データ/アクションレコードフォームの時間フィールドのフォーマットcontrolは≠0でなければなりません。make_datetime timestampでカスタム時刻列を返します。

2.読み書きレジスタ関数(32個)

2.0 2つの重要なメカニズム(すべてのセット/get共通)から始めましょう。

メカニズム1 get_xxxはCommunicationオーバーヘッドがゼロです。getシリーズはすべてHMIローカルキャッシュ(メモリイメージ)から読み取り、シリアルフレームを生成しません。HMIバックグラウンドタスクは、PLCから通信変数(ModbusのVT_3 x/VT_4 xなど)を自動的に読み取り、エンジニアリング設定のポーリングサイクルごとにキャッシュします。画面コントロールはアドレスにバインドされ、そのアドレスは自動的にポーリングリストに入ります。スクリプトはプロジェクトによって参照されていないアドレスを読み取り、start_readで明示的に同期を要求します。

メカニズム2:set_xxx()は必ずしもシリアルフレームを送信しません。HMIがホストモード(Modbus Master/DCBUS/XGUS)であること、シリアルポート通知がset_notify(0)によって禁止されていないことの2つの条件のみがアクティブに送信されます。スレーブモードでは、setはローカルミラーのみを更新します。

2.1通信の制御

関数の機能パラメータ説明書は
set_notify(enable)0禁止/1イネーブルデフォルトグローバルシリアルポート送信通知スイッチ。set_notify(0)の後、set_xxxはシリアルコマンドを発行せず、set_notify(1)を再開する。
select_slave(slave_id)インデックス0から。マルチスレーブモードで後続のget/setアクセスのスレーブを切り替える。slave_idは、Modbusステーション番号ではなく、エンジニアリングスレーブリストの配列インデックスです。
set_endian(en)0ビッグエンディアン既定のnCloth/1リトルエンディアンマルチバイトデータ(uint16/32/float)スレーブとする际のエンディアン。Communicationプロトコルがマルチバイトを含むのみ有効
start_read(index,vtype,addr,quantity,cycle,cycle_run,mode)index 0~127;quantity 1~120;cycleポーリングの倍数デフォルト0=サイクルごと; cycle_runサイクル内の回数0-based;mode 0持続/1回のみホストモードバックグラウンドで自動ポーリング。戻り値はなく、データはget_xxxで読み取りキャッシュされます。mode=1はcreate_resp_queの場合
stop_read(index)タスクインデックス指定されたバックグラウンド読取りタスクをStopし、キャッシュは最後の値を保持します
stop_all_read()-すべてのスクリプト起動読み取りタスクをStopします。
set_auto_read(en)1有効-デフォルト/0不可画面バインド変数ポーリングのトータスイッチ。0以降はstart_readが完全に引き継ぐ
create_resp_que()-start_read mode=1を使用して、単一のオンデマンド読み取りを行うレスポンスキューを作成します。
on_cmd_resp(slave,vtype,addr,count,ret,wr)ret 0成功/1例外;wr 0読み取り/1書き込みホストモード通信結果非同期コールバック、応答の受信、タイムアウトトリガー。1回の読書の成功
set_slave_site(idx,slave_id)idxスレーブインデックス;slave_id新しい局番号1~247動的にスレーブステーション番号を変更し、現場ネットワークに適応

2.2ビットOperation。

関数の機能パラメータ説明書は
set_bit(vtype,addr,value,count)value 16ビット符号なし、下位countビットは対象ビットに対応するbit0→ bit1→ +1;countは1~16を选択するbatch bit writeです。Modbusコイル、FX3UのX/Y/S/MのどちらでもOKです。1回のCommunicationで複数のスイッチを書き込み
get_bit(vtype,addr)-1ビットを読み取り、0/1を返します。ローカルキャッシュからの読み取り、Communicationオーバーヘッドゼロ

2.3数値の読み書き(16/32/64ビット)

関数の機能値の範囲アドレススパン
set/get_uint16(vtype,addr,value)0~65535、切り捨て0xFFFFを超えています。1位レジスタ
set/get_int16(vtype,addr,value)-32768~+32767、カットオフ0xFFFFを超えています。1位レジスタ
set/get_uint32(vtype,addr,value)0~4294967295、切り捨て0 x FFFFFFFF2つのレジスタ
set/get_int32(vtype,addr,value)-2^31~2^31-12つのレジスタ
set/get_uint64(vtype,addr,value)0~2^64-14つのレジスタ
set/get_int64(vtype,addr,value)-2^63~2^63-14つのレジスタ
set/get_float(vtype,addr,value)IEEE 75 4単精度2つのレジスタ
set/get_double(vtype,addr,value)IEEE 75 4倍精度4つのレジスタ

すべてのgetシリーズはローカルキャッシュを読み取り、setシリーズは“メカニズム2”を参照してください。

2.4文字列とバッチ

関数の機能パラメータ説明書は
set_string(vtype,addr,str)str最大2 Kバイト、UTF-8またはGBK文字列をアドレスシーケンスに書き込む
get_string(vtype,addr,len)lenオプション、デフォルト128バイト、最大20 4 8文字列の読み取り、自動トランケート
set_uint16_ex(vtype,addr,value1,...,valueN)最大120個の値可変パラメータ一括書き込み連続レジスタ、固定パラメータセットに適した
set_array(vtype,addr,buff)buffはLuaテーブル(ワードの配列)で、最大120ワードです。プログラム生成/動的データに適した一括書き込みテーブル。set_uint16_exとの違い

3.描画機能(10)

draw_xxxはon_draw(screen_id,control_id)コールバック呼び出しが有効になるには、コントロールID ≠ 0でなければなりません。レイヤーはコントロールZ軸(エディタの重ね順)で管理され、control_idによってレイヤー化されます。アクティブ·リフレッシュ·トーンredraw()

関数の機能パラメータ説明書は
set_pen_color(color)RGB565上位5ビットR 0~31/中6ビットG 0~63/下位5ビットB 0~31ブラシ前景のカラーを設定します。赤0xF800、緑0x07E0、青0x001F、白 0xFFFF、黒0x000
draw_line(x0,y0,x1,y1,width)width 1~10現在のブラシに線を引く色を取る
draw_rect(x0,y0,x1,y1,fill)fill 1パディング/0ボーダー左上隅+右下隅座標
draw_rect_alpha(x0,y0,x1,y1,alpha)アルファ0 - 255(0透明/255不透明)半透明のソリッド長方形、マスクレイヤでよく使われる
draw_circle(x,y,r,fill)fill 0ソリッド/非ゼロボイド値は線の厚さ半径+半径。
draw_ellipse(x0,y0,x1,y1,fill)fill 0ソリッド/非ゼロ中空外接矩形楕円の定義
draw_image(image_id,frame_id,dstx,dsty,width,height,srcx,srcy)image_id build/image.xml; frame_idアニメーションフレーム非アニメーション=0ズーム+トリミングをサポートした画像の描画。image_idプロジェクトbuildディレクトリimage.xmlで調べる
draw_text(text,x,y,w,h,font_id,size,color,align,charcode)align 0左/1中央/2右;charcode 0=UTF-8デフォルト/1=GBKエリアテキスト描画、マルチバイト文字サポート
draw_surface(surface,x,y,w,h,srcx,srcy)Surfaceは画面/キャンバスのリソースです。画面切り抜き表示、マルチレイヤー合成用

4.図面例:switchテーブル駆動

ソーステキストすべての描画例はルーチンです:on_update読み取りボタンキー → redraw → on_drawキー値チェックswitchテーブル選択描画関数。線+円を描く場合:

draw_type = 0
mode = { line = 1 rect = 2 rect_= 3 le = 4 pse = 5 imageId = 6 text = 7 }

function on_update slave vtype
  addr === 0 x 1000の場合
    draw_type = get_uint16 VT_LW addr--ワード設定ボタンのキー値
    redraw
  End of Endシングル
End of Endシングル

function on_w screen_id_id
  ローカルスイッチ= {
    [mode.line] = function
      screen_id == 0とcontrol == 1の場合
        set_pen_color 0xFFE0          - 黄色です。
        draw_line 225、253、405、253
        set_pen_color 0xF800          【赤】
        draw_line 508、128、508、378、5
      End of Endシングル
    end
    [mode.circle] = function control
      screen_id == 0とcontrol == 1の場合
        draw_circle 300 253 100 0--ソリッドの円
        draw_circle 450 253 150 1--中空円、線の厚さ1
      End of Endシングル
    end
  }
  if switch[w_type] then switch[w_type]_id end
End of Endシングル
最も簡単に運転できる3つのポイント:get_xxxはキャッシュがリアルタイム値ではないことを読み取るバインドされていないコントロールのアドレスを読み取るには、まずstart_read同期;set_xxxは、スレーブモードでシリアルフレームを送信しません。-MCUは正常ではない、半日ボーレートをチェックしないでください。set_run_cycleとdelay_msはon_runで禁止されています。スケジュールはデッドロックします。図面はon_drawに配置する必要があり、コントロールIDは0ではない。

Guangzhou Dai Tech Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)から整理されたLUAチュートリアル“Lua Script API Function Interface”、著作権は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 *.