OTAアップグレードAPI:HMIのアップグレードロジックとCommunicationプロトコルとデータソースの完全分離アップグレードデータがマザーボードシリアルポート、イーサネット、Wi-Fi、4 Gから来ていても、カスタムプロトコル、Modbus、HTTPを使用していても、HMIは標準APIを介して受信したデータを指定されたフラッシュ領域に書き込む責任があり、解凍が成功した後に自動的にアップグレードを再起動します。HMI MシリーズDxシリーズ対応。
1.️Flashプランニング(アップグレードの失敗/レンガの根本原因)
HMI80480M070を例にとると(標準品 128Mbit = 16MB):
| プロジェクトプロジェクト# | サイズは |
|---|---|
| Flashの総容量 | 16 MB |
| システムファームウェア(OS+ドライバ、Mシリーズ) | 1 MB(DHシリーズ2 MB) |
| 現在のプロジェクトprivate | 4.38 MB |
| 合計使用済み。 | 5.38 10.62 MBである。 |
| OTA開始アドレスの要件 | 最大8 MB(Flashの半分) |
2つの鉄の法則OTA開始アドレスはFlashの後半から始まる必要があります。(残りの10.62 MBであっても≥8MBから)、新旧のプロジェクトのクロスオーバーを避け、アップグレードプロセス中に現在のシステムを実行し続けることができます。OTA書き込み領域は連続的かつアイドル状態でなければならないブロックアドレス機能を使用して高アドレス領域(10~12MBなど)を占めている場合、またはアップグレードパッケージがFlashの半分以上(≈ 10.62 MBパッケージ)を占める場合は、アップグレードできません。
2. APIの概要
| 関数の機能 | パラメータ | 説明書は |
|---|---|---|
ota_init(md5, filesize, addr) | md 5固定“0 123456 7 8 9 abcdef”;filesizeは.binの実際のサイズに厳密に一致します;addr ≥ Flashの半分 | アップグレード先の設定、ファームウェアデータの受信準備 |
ota_write(writeTb) | バイトテーブル、≤ 20 4 8、自動補正0 x 0 0未満 | Flashセクションへのファームウェアのブロック書き込み |
ota_check_upgrade(state) | 送信する1。 | 整合性チェック+解凍+アップグレードのトリガー |
ota_destory() | - | 書き込み済みのOTA 残留データを消去(アップグレード前にクリア) |
on_ota_progress(status, value) | 下の表を参照。 | 検証/解凍の進行状況と結果のコールバック |
on_ota_progressのstatus/valueの組み合わせ
| status | 意味の意味 | value |
|---|---|---|
| 1 | 検証プロセスの開始 | 固定 0です。 |
| 2 | 検証結果の検証 | 0=失敗ファームウェアの破損/MD5の不一致/1=成功 |
| 3 | 解凍の進行状況 | 0から100パーセント |
| 4 | 解凍の結果 | 0=失敗/1=成功 →再起動 |
3.アプリケーション:SD Card Local Upgrade
3.1アップグレードパッケージの準備
プロジェクトコンパイル後の選択量産ダウンロード作成されたファイルにはota.binがあります。使用する前に、ota.binをa.binに変更してSDカールートディレクトリに置きます。

3.2文字を検出+a.binを検索
ota_filame = "a.bin"
ota__start = 8 * 1024 * 1024 --OTA開始アドレス(少なくとも半分のフラッシュ)
flashsize 16 * 1024 * 1024 フラッシュの合計サイズ
function on_update slave vtype
if vtype == VT_LW and addr == useraddr.ota_swich then
sd_dir = 0の場合
list_dir_dir まずSDカードを見る。
elseif usb_dir ~= 0
list_dir usb_dir もう一度、ディスクを見てください。
elseさん
set_string VT_LW useraddr.text "SDカードとUSBが検出されません。OTAアップグレードできません!! ")
End of Endシングル
End of Endシングル
End of Endシングル
function on_list_dir path、、type、fsize
型== 1の場合
if filename == ota_filename then
set_string VT_LW、useraddr.text、"ファイル".. ota_filename..“検出されました”
if fsize + ota__start flashsize then
set_string VT_LW useraddr.text "ota.binファイルサイズが超過しました。アップグレードできません!! ")
elseさん
set_string VT_LW useraddr.text "アップグレード開始!!! ")
set_uint32_LW、.ota_data、fsize
ota.set_uppath.. "/".. ota_
End of Endシングル
End of Endシングル
End of Endシングル
End of Endシングル3.3コアアップグレードプロセスota.lua
function ota. set_upgrade path
ローカル転送サイズ= 0
ローカルサイズ= 0
if file_open path 0 == true then
size = file_size
if size flashsize - ota__start then
ota_roy --残留 OTAデータの除去
local sdota_addr = ota_init(0123456 7 8 9 abcdef,size,ota_addr_start)
--末尾の補間ゼロ長を計算する
local size_complement = 0
サイズ% 20 48 ~= 0の場合
size_ement = 2048 -size % 2048
End of Endシングル
while true doとは
local data = file_read 2048 20 4 8を読む。
if #data 2048 then タグ:0 x 00
for i =#rddata + 1 2048 do rddata[i] = 0x00 end
End of Endシングル
TransferSize = TransferSize + #data
local prg = string. %. 1f TransferSize * 100/size + size_ement
set_uint16 VT_LW、useraddr.progress、math.modf TransferSize * 1000/ size
set_string VT_LW、useraddr.text、ダウンロードの進行状況.. PRG..。quot; %
refresh_screen
ota_data --Flashに書き込み、ゼロ未満
もしsize = TransferSizeが終了した場合
End of Endシングル
file_cl
ota_check_up1 - 検証、解凍
End of Endシングル
End of Endシングル
End of Endシングル
function on_ota_ress status value
ステータス== 1、値== 0の場合
set_string VT_LW、useraddr.text、検証開始
elseifステータス== 2倍
if value == 0 then set_string_LW.text、検証に失敗しました
elseif value == 1 then set_string_LW.text検证成功end
elseifステータス== 3時
set_uint16 VT_LW useraddr.progress value * 10
set_string VT_LW、useraddr.text、解凍の進行状況..価値..。quot; %
refresh_screen
elseifステータス== 4時
if value == 0 then set_string VT_LW useraddr.text解凍に失敗しました
elseif value == 1 then set_string VT_LW、useraddr.text、解凍に成功しましたend
End of Endシングル
End of Endシングル重要なポイント:ota_initのファイルサイズは.binの実際のサイズと厳密に一致しなければなりません。書き込みデータはフルストリーム(毎回≤ 20 4 8、末尾は0 x 0 0); ota_check_upgrade(1)の後、検証失敗はコールバックでStopし、解凍が成功すると自動的にアップグレードを再起動します。
広州大彩科技Visual HMI開発ドキュメント(hmi-doc.gz-dc.com)LUAチュートリアル“OTAアップグレード”、著作権所有の大彩科技。
Leave a Reply