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

無料無料技术资料

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

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

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

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

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

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

2. APIの概要

関数の機能パラメータ説明書は
easydb_open(flashaddr, createIfNotExist, dataRowSize, maxCount)flashaddr Flash開始アドレス;createIfNotExist 0=オンのみ/1=存在しない場合に作成;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開始、存在しない場合は作成、単一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と厳密に等しくなければなりません。長くても短くても失敗する。英語のセミコロンで区切ります。中国語のセミコロンではなく、テーブルコントロールの解析ルールと整列します。④ハンドルはグローバルライフサイクルリソースon_initは1回オープンし、操作前にハンドルが0ではなく、インデックスが範囲内であることを確認します。カスタムファームウェアにはAPIがあり、通常のファームウェアにはない。

Guangzhou Dai Cai Technology Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)LUAチュートリアル“簡易データベース”、著作権はDai Cai Technologyに帰属します。

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

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

エンジニア会員

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

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

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

发表回复

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