Visual HMI簡易データベース:easydb_* with Data Logging Control Custom Mode

freeFree Technical Resource

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

簡易データベース(カスタムファームウェア専用)は軽量でファイルシステムを持たない組み込みデータベース:Flashに連続領域を描画し、固定長記録による構造化データ(パラメータ設定、イベントログ、実行記録)、パワーダウンを失わず、オンデマンド初期化の実行をサポートします。データロギングコントロールは、“カスタム”データソースモードでドッキングし、追加、削除、変更、変更プロセス全体を実現します。

1.️フラッシュアドレス計画(変更なし)

簡易データベース直接操作 Flash,ファイル·システムの分離メカニズムがないflashaddrの開始アドレスは、4つの高リスク領域を厳密に避ける必要があります。

  • エンジニアリングリソースストア
  • データ·サンプリング·ブロックストア
  • オペレーション·ログ·ブロック·ストア
  • OTAアップグレードバックアップゾーン

合計占有スペース= dataRowSize × maxCount、アドレスを計画するときにこのスペースをカウントし、他の機能と競合しないでください。

2. APIの概要

関数の機能パラメータ説明書は
easydb_open(flashaddr, createIfNotExist, dataRowSize, maxCount)flashaddr Flash開始アドレス;createIfNotExist 0=オンのみ/1=existenceしない場合に作成;dataRowSize ≧ 1;maxCount最大バー数データベースを開くか作成し、ハンドルを返す0以外の成功、0失敗
easydb_close(db)ハンドルハンドルデータベースのシャットダウン、リソースの解放
easydb_get_count(db)ハンドルハンドル現在有効なレコード数
easydb_get(db, idx)IDXは0から始まる。指定されたインデックスレコードを読み取り、文字列を正常に返し、失敗nil
easydb_add(db, dataset)文字列データ最後にレコードを追加
easydb_update(db, idx, dataset)IDX + 新コンテンツ指定記録の更新、datasetの長さはdataRowSizeと厳密に等しい必要があります
easydb_del(db, idx)idx指定したレコードの削除
easydb_clear(db)ハンドルハンドルすべてのレコードをクリア

3.データログコントロール“カスタム”モード

データソースはカスタム化。システムはデータの行数を知りませんが、2つのコールバックで提供する必要があります。

  • レコード数のコールバックon_get_record_count(screen_id, control_id)easydb_get_count
  • ログ·コンテンツ·コールバックon_get_record_row(screen_id, control_id, row):行目の文字列の内容を返す
function on_get_record_count(screen_id, control_id)
  if screen_id == 0 and control_id == 1 then
    return db.getCnt(g_db_handle)
  end
end

function on_get_record_row(screen_id, control_id, row)
  local ret, msg = db.get(g_db_handle, row)
  if ret == 0 then
    return msg
  end
end

制御構成:データソース=カスタム、文字エンコーディング= UTF 8、ページめくり制御√、制御アドレスLW4000、選択行通知√(LW4004、UINT32)-特定の行を選択すると、インデックスはLW4004に書き込まれ、追加、削除、変更はすべてそれに依存します。

4.アプリケーション:db.luaハンドルカプセル化+追加削除変更

4.1初期化on_init

function on_init
  dofile "db.lua"
  _EN_ON_UPDATA_API_ = 0
  --10 MB開始、existenceしない場合は作成、単一1000バイト、最大1000個
  g_db_le = db.open 10*1024 *1024 1 1000 1000
  if g_db_le == 0 then
    print "ERRORデータベースを開くことができません! ")
    Return To Returnシングル
  End of Endシングル
  db.clear g_db_handle               - 古いデータを消去する(オプション)
  db.add g_db_handle "Alice;Engineer;30"
  db. g_db_le ";Technician;25"
  db.add g_db_handle Charlie;Manager;40
  db. g_db_le "en;Basketball players;36"
  _EN_ON_UPDATA_API_ = 1
End of Endシングル

レコード形式は、セミコロン区切りで、テーブルコントロールの解決ルールと一致し、複数の列を直接マッピングします。

4.2追加削除改(LW5000ボタン配布)

function on_update slave vtype
  addr == 0 x 4004の場合              - ライン通知の選択
    local idx = get_uint32 VT_LW addr
    local ret msg = db.get g_db_le idx
    if ret == 0 then
      local parts = my_it msg ";"
      if parts = nil then
        set_uint16 VT_LW、0x4530、idx   --現在選択されているインデックスを記録する
        set_string_LW 0x4500 parts[1] == nil and "--" or parts[1]
        set_string_LW 0x4510 parts[2] == nil and "--" or parts[2]
        set_string_LW 0x4520 parts[3] == nil and "--" or parts[3]
      End of Endシングル
      show_dialog 1、232、33、50        詳細はウィンドウを参照。
    End of Endシングル
  elseif addr === 0 x 5000 then
    local key = get_uint16 VT_LW addr
    key == 0の場合                    --追加。
      local name = get_string_LW、0x5010
      local position = get_string VT_LW、0x5020
      local age = get_string_LW、0x5030
      db.add g_db_handle name.. ";".. position... ";"..年齢は..。";")
    elseifキー == 1 then                --変更(行を変更)
      local name = get_string VT_LW、0x4500
      local position = get_string VT_LW、0x4510
      local age = get_string_LW、0x4520
      local idx = get_uint16 VT_LW、0x4530
      db.modify g_db_handle idx name.. ";".. position... ";"..年齢..。";")
    Elseifキー == 2 then                削除(選択した行を削除)
      local idx = get_uint16 VT_LW、0x4530
      db.del g_db_handle idx
    End of Endシングル
  End of Endシングル
End of Endシングル

db.luaカプセル化層すべての関数ハンドルチェック+インデックスの範囲外チェック(idx = count return-2)、これはハンドル駆動設計の標準的な姿勢です。不正な場合はエラーコードを返し、決して渡さないでください。

4つの穴flashaddrはエンジニアリングリソース/データサンプリング/オペレーションログ/OTAバックアップの4ゾーンを避ける必要があります。分離なしでフラッシュを直接操作し、間違ったアドレスデータを選択して互いにカバーしたり、タイルを変更したりします。easydb_updateのデータセット長は、作成時のdataRowSizeと厳密に等しくなければなりません。長くても短くても失敗する。英語のセミコロンで区切ります。中国語のセミコロンではなく、テーブルコントロールのParseルールと整列します。④ハンドルはグローバルライフサイクルリソースon_initは1回オープンし、操作前にハンドルが0ではなく、インデックスが範囲内であることを確認します。カスタムファームウェアにはAPIがあり、通常のファームウェアにはない。

Guangzhou Dai Cai Technology Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)LUAチュートリアル“簡易データベース”、著作権はDai Cai 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 *.