91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LuatOS:485 總線硬件設(shè)計要點(diǎn)與 exmodbus 庫開發(fā)實(shí)戰(zhàn)

合宙LuatOS ? 來源:合宙LuatOS ? 作者:合宙LuatOS ? 2026-03-19 17:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在工業(yè)物聯(lián)網(wǎng)通信開發(fā)中,485 總線與 Modbus 協(xié)議的組合應(yīng)用十分常見。本文以Air780EHV 系列模組為實(shí)例,圍繞 LuatOS 開發(fā)環(huán)境,詳解 485 總線的硬件設(shè)計細(xì)節(jié),包括其與 UART 的關(guān)聯(lián)、電平匹配處理及不同防護(hù)等級的 TVS 器件選型,同時介紹 LuatOS 輕量化的 exmodbus 擴(kuò)展庫,并給出該庫實(shí)現(xiàn) Modbus RTU 主站通信的代碼示例與相關(guān)文檔查閱渠道。

Air780EHV 系列模組的相關(guān)參數(shù)說明如下:

該模組可適配多種外設(shè),包含 SPI 串口屏、墨水屏、OLED 單色屏、30 萬像素攝像頭,同時具備 CAN、RJ45 以太網(wǎng)、485、USB、UART、SPI、I2C、PWM、GPIO 等接口
網(wǎng)絡(luò)通信方面,模組支持 TCP/UDP、TCP-SSL/TCP-TLS、FTP、MQTT、HTTP、WebSocket、NTP、Modbus 協(xié)議。
模組集成 4G 通信與音頻模塊,可實(shí)現(xiàn)語音通話、錄音播放以及 TTS 功能。
工業(yè)通信中非常經(jīng)典的485總線,硬件設(shè)計中需要注意的細(xì)節(jié),Modbus協(xié)議在LuatOS開發(fā)中的應(yīng)用,詳見下文。

一、485總線接口與UART的關(guān)系

485總線接口本質(zhì)上是UART總線接口的一種應(yīng)用,需要搭配485收發(fā)器芯片實(shí)現(xiàn)。

二、電平匹配問題

在UART與485收發(fā)器芯片的搭配中,最常見需要注意的一個問題是電平匹配。

由于上一章節(jié)參考設(shè)計中Air780EHV和SP3485都是3.3V的IO電平,所以不再需要分立元器件電平轉(zhuǎn)換電路或電平轉(zhuǎn)換芯片。

當(dāng)雙方電平不一致時,則需要分立元器件電平轉(zhuǎn)換電路或電平轉(zhuǎn)換芯片。

常見的分立元器件電平轉(zhuǎn)換電路如下:

三、485總線接口的TVS防護(hù)

工業(yè)現(xiàn)場環(huán)境復(fù)雜,485總線經(jīng)常面臨靜電、浪涌等威脅,因此接口保護(hù)必不可少。

485接口用TVS,常用的型號有SM712系列,如果防護(hù)等級要求較高,也可以選擇如下推薦的型號。

ESD等級防護(hù):適用于一般靜電防護(hù)場景。型號:應(yīng)能微ASM712

TVS等級防護(hù):具備2KV 1.2/50uS浪涌能力。型號:應(yīng)能微SMBJ7.0CAW

TSS等級防護(hù):具備4KV 10/700uS浪涌能力。型號:應(yīng)能微P0080SA

四、Modbus通信協(xié)議

與485總線接口相關(guān)的通信協(xié)議是Modbus。LuatOS的modbus核心庫,但使用難度較高。而exmodbus擴(kuò)展庫——在核心庫的基礎(chǔ)上封裝了更簡潔易用的API,降低開發(fā)難度,易于開發(fā)者集成Modbus通信。

exmodbus最新API文檔詳見資料中心

核心示例持續(xù)更新中!

PROJECT = "RTU_MASTER"
VERSION = "001.000.000"

-- 在日志中打印項(xiàng)目名和項(xiàng)目版本號
log.info("main", PROJECT, VERSION)

local exmodbus = require("exmodbus")

-- 使用 Air8000 開發(fā)板測試打開這兩個
gpio.setup(16, 1)         -- RS485 芯片供電引腳
local rs485_dir_gpio = 17 -- RS485 方向引腳

-- 使用 Air780EPM 開發(fā)板測試打開這三個;
-- gpio.setup(1, 1)          -- Air780EPM RS485 芯片供電引腳
-- gpio.setup(23, 1)         -- Air780EPM vref 腳拉高
-- local rs485_dir_gpio = 24 -- Air780EPM RS485 方向引腳(V1.2 是 25,V1.3 是 24)

-- 創(chuàng)建 RTU 主站配置參數(shù);
-- 說明:創(chuàng)建 RTU 主站時只需要配置如下參數(shù)即可;
local create_config = {
-- 串口配置參數(shù);
mode = exmodbus.RTU_MASTER,      -- 通信模式
uart_id = 1,                     -- UART 端口
baud_rate = 115200,              -- 波特率
data_bits = 8,                   -- 數(shù)據(jù)位
stop_bits = 1,                   -- 停止位
parity_bits = uart.None,         -- 校驗(yàn)位
byte_order = uart.LSB,           -- 字節(jié)順序
rs485_dir_gpio = rs485_dir_gpio, -- RS485 方向引腳
rs485_dir_rx_level = 0,          -- RS485 接收方向電平
}

-- 初始化從站 1 數(shù)據(jù)結(jié)構(gòu)
-- 用于記錄從站 1 保持寄存器 0-1 的值;
local slave1_data = {}

-- 配置讀取從站 1 保持寄存器 0-1 的值;
local read_config = {
raw_request = string.char(
0x01,       -- 從站地址
0x03,       -- 功能碼:讀取保持寄存器
0x00, 0x00, -- 寄存器起始地址
0x00, 0x02, -- 寄存器數(shù)量
0xC4, 0x0B  -- CRC16校驗(yàn)碼
),
timeout = 1000  -- 超時時間 1000 ms
}

-- 創(chuàng)建 RTU 主站實(shí)例
local rtu_master = exmodbus.create(create_config)

-- 判斷主站是否創(chuàng)建成功并記錄日志
if not rtu_master then
log.info("exmodbus_test", "rtu_master 創(chuàng)建失敗")
else
log.info("exmodbus_test", "rtu_master 創(chuàng)建成功")
end

-- 讀取從站 1 保持寄存器數(shù)據(jù)的函數(shù)
local function read_slave1_holding_registers()
log.info("exmodbus_test", "開始讀取從站 1 保持寄存器 0-1 的值")

-- 執(zhí)行讀取操作
local read_result = rtu_master:read(read_config)

-- 根據(jù)返回狀態(tài)處理結(jié)果
if read_result.status == exmodbus.STATUS_SUCCESS then
local resp = read_result.raw_response

-- 特別說明:
-- 接下來的判斷是針對 modbus RTU 標(biāo)準(zhǔn)響應(yīng)格式的應(yīng)答原始幀來解析的
-- 在實(shí)際項(xiàng)目中,應(yīng)根據(jù)自己項(xiàng)目中的實(shí)際應(yīng)答原始幀格式進(jìn)行解析
-- 如果實(shí)際格式與此處演示的格式不一致,需要修改接下來的解析代碼

-- 1. 檢查總長度:必須為 9 字節(jié)(1 地址 + 1 功能碼 + 1 字節(jié)數(shù) + 4 數(shù)據(jù) + 2 CRC)
if #resp ~= 9 then
log.info("exmodbus_test", "響應(yīng)長度錯誤,期望 9 字節(jié),實(shí)際:", #resp)
return
end

-- 2. 檢查從站地址
if string.byte(resp, 1) ~= 0x01 then
log.info("exmodbus_test", "從站地址不匹配,收到:", string.byte(resp, 1))
return
end

-- 3. 檢查功能碼
local func_code = string.byte(resp, 2)
if func_code == 0x83 then
local exc_code = string.byte(resp, 3)
log.info("exmodbus_test", "從站返回異常響應(yīng),異常碼:", exc_code)
return
elseif func_code ~= 0x03 then
log.info("exmodbus_test", "功能碼錯誤,收到:", func_code)
return
end

-- 4. 檢查字節(jié)數(shù)字段(應(yīng)為 4)
local byte_count = string.byte(resp, 3)
if byte_count ~= 4 then
log.info("exmodbus_test", "字節(jié)數(shù)字段錯誤,期望 4,實(shí)際:", byte_count)
return
end

-- 5. 校驗(yàn)CRC
-- 計算前 7 字節(jié)的 CRC
local crc_calculated = crypto.crc16_modbus(resp:sub(1, 7))
-- 提取接收到的 CRC
local crc_received = string.unpack("< I2", resp, 8)
-- 比較 CRC
if crc_calculated ~= crc_received then
log.info("exmodbus_test", "CRC 校驗(yàn)錯誤,計算值:", crc_calculated, ",接收值:", crc_received)
return
end

-- 6. 解析寄存器數(shù)據(jù)(從第 4 字節(jié)開始,大端序)
local data1 = string.unpack(" >I2", resp, 4) -- 寄存器 0,偏移 4
local data2 = string.unpack(" >I2", resp, 6) -- 寄存器 1,偏移 6

-- 7. 記錄數(shù)據(jù)
slave1_data[0] = data1
slave1_data[1] = data2

-- 8. 記錄日志
log.info("exmodbus_test", "成功讀取到從站 1 保持寄存器 0-1 的值,寄存器 0 數(shù)值為", slave1_data[0], ",寄存器 1 數(shù)值為", slave1_data[1])

elseif read_result.status == exmodbus.STATUS_TIMEOUT then
log.info("exmodbus_test", "未收到從站 1 的響應(yīng)(超時)")
end

end

-- 定時任務(wù)函數(shù):每 2 秒調(diào)用一次讀取函數(shù)
local function task()
while true do
if rtu_master then
-- 每 2 秒調(diào)用一次讀取函數(shù)
read_slave1_holding_registers()
else
log.info("exmodbus_test", "rtu_master 未創(chuàng)建,無法執(zhí)行 read_slave1_holding_registers()")
end
sys.wait(2000)
end
end

-- 初始化任務(wù)
sys.taskInit(task)

-- 用戶代碼已結(jié)束---------------------------------------------
-- 結(jié)尾總是這一句
sys.run()
-- sys.run()之后后面不要加任何語句!!!!

以上為 485 總線硬件設(shè)計核心要點(diǎn)及 LuatOS 環(huán)境下 Modbus 協(xié)議應(yīng)用的相關(guān)分享,內(nèi)容涵蓋 485 總線與 UART 的關(guān)系、電平匹配、TVS 防護(hù)以及 exmodbus 擴(kuò)展庫的優(yōu)化內(nèi)容,相關(guān)實(shí)操內(nèi)容可供工程技術(shù)人員參考,用于解決實(shí)際應(yīng)用中的相關(guān)問題。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    3045

    瀏覽量

    91716
  • 硬件設(shè)計
    +關(guān)注

    關(guān)注

    18

    文章

    466

    瀏覽量

    45648
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    159

    瀏覽量

    2721
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    LuatOS框架的使用(上)

    在資源受限的物聯(lián)網(wǎng)終端設(shè)備中,如何實(shí)現(xiàn)快速開發(fā)與穩(wěn)定運(yùn)行是關(guān)鍵挑戰(zhàn)。LuatOS框架通過將Lua語言與底層硬件抽象層深度融合,提供了一套簡潔高效的開發(fā)范式。本文將圍繞
    的頭像 發(fā)表于 01-27 19:38 ?206次閱讀
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    ADC模數(shù)轉(zhuǎn)換實(shí)戰(zhàn)硬件設(shè)計與軟件開發(fā)要點(diǎn)指南!

    ADC硬件設(shè)計與軟件開發(fā)的關(guān)鍵要點(diǎn),為開發(fā)者提供ADC轉(zhuǎn)換的實(shí)戰(zhàn)指導(dǎo)。 本文將分享硬件參考設(shè)計及
    的頭像 發(fā)表于 12-16 13:25 ?443次閱讀
    ADC模數(shù)轉(zhuǎn)換<b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>硬件</b>設(shè)計與軟件<b class='flag-5'>開發(fā)</b><b class='flag-5'>要點(diǎn)</b>指南!

    構(gòu)建可靠USB應(yīng)用:硬件設(shè)計要點(diǎn)LuatOS開發(fā)技巧!

    指導(dǎo)。 本文以Air780EPM系列低功耗模組為例,分享USB接口的硬件設(shè)計要點(diǎn)以及LuatOS高效開發(fā)API,幫助開發(fā)者在設(shè)計中避開常見陷
    的頭像 發(fā)表于 12-15 10:46 ?251次閱讀
    構(gòu)建可靠USB應(yīng)用:<b class='flag-5'>硬件</b>設(shè)計<b class='flag-5'>要點(diǎn)</b>與<b class='flag-5'>LuatOS</b><b class='flag-5'>開發(fā)</b>技巧!

    LuatOS exgnss擴(kuò)展實(shí)戰(zhàn)進(jìn)階:GNSS功能開發(fā)全流程!

    GNSS功能開發(fā)涉及多環(huán)節(jié)協(xié)同,LuatOS exgnss擴(kuò)展是其中的關(guān)鍵樞紐。本文以全流程探秘形式,從硬件準(zhǔn)備、固件燒錄到代碼實(shí)現(xiàn),詳解exgnss
    的頭像 發(fā)表于 11-14 15:24 ?5776次閱讀
    <b class='flag-5'>LuatOS</b> exgnss擴(kuò)展<b class='flag-5'>庫</b><b class='flag-5'>實(shí)戰(zhàn)</b>進(jìn)階:GNSS功能<b class='flag-5'>開發(fā)</b>全流程!

    LuatOS MCU核心全接觸:新手操作與功能測試攻略!

    開啟芯片級開發(fā)實(shí)戰(zhàn)。 一、MCU核心庫函數(shù)功能 MCU核心LuatOS中封裝MCU一些特殊操作的核心模塊,提供了對MCU底層功能的訪問和控制能力,是
    的頭像 發(fā)表于 11-12 14:30 ?325次閱讀
    <b class='flag-5'>LuatOS</b> MCU核心<b class='flag-5'>庫</b>全接觸:新手操作與功能測試攻略!

    USB設(shè)計操作指南:硬件關(guān)鍵與LuatOS API開發(fā)技巧!

    本文以Air780EPM系列低功耗模組為實(shí)例,分享USB接口硬件設(shè)計的要點(diǎn)以及LuatOS高效開發(fā)API的助力作用。旨在指導(dǎo)開發(fā)者在設(shè)計中規(guī)
    的頭像 發(fā)表于 11-11 18:29 ?292次閱讀
    USB設(shè)計操作指南:<b class='flag-5'>硬件</b>關(guān)鍵與<b class='flag-5'>LuatOS</b> API<b class='flag-5'>開發(fā)</b>技巧!

    LuatOS AGPS 輔助定位開發(fā)實(shí)戰(zhàn)教程

    為解決傳統(tǒng) GPS 定位慢、功耗高的痛點(diǎn),AGPS 技術(shù)通過輔助數(shù)據(jù)注入提升效率。本教程以 LuatOS 開發(fā)環(huán)境為基礎(chǔ),循序漸進(jìn)地講解 AGPS 輔助定位的開發(fā)流程,包括 AGPS 服務(wù)器對接
    的頭像 發(fā)表于 10-31 17:34 ?1232次閱讀
    <b class='flag-5'>LuatOS</b> AGPS 輔助定位<b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>教程

    無需硬件,LuatOS模擬器釋放開發(fā)無限可能

    LuatOS PC模擬器以創(chuàng)新技術(shù)打破硬件限制,開發(fā)者無需購置專用設(shè)備,僅憑PC即可完成全流程開發(fā)。高效模擬內(nèi)核確保運(yùn)行穩(wěn)定性,讓創(chuàng)意不受硬件
    的頭像 發(fā)表于 09-18 13:57 ?576次閱讀
    無需<b class='flag-5'>硬件</b>,<b class='flag-5'>LuatOS</b>模擬器釋放<b class='flag-5'>開發(fā)</b>無限可能

    告別硬件負(fù)擔(dān),LuatOS模擬器重塑開發(fā)成本與效率

    ?LuatOS PC模擬器以“零硬件依賴”為核心優(yōu)勢,顯著降低開發(fā)成本與時間消耗。開發(fā)者無需為設(shè)備兼容性發(fā)愁,即可在模擬環(huán)境中高效完成項(xiàng)目開發(fā)
    的頭像 發(fā)表于 09-15 17:18 ?801次閱讀
    告別<b class='flag-5'>硬件</b>負(fù)擔(dān),<b class='flag-5'>LuatOS</b>模擬器重塑<b class='flag-5'>開發(fā)</b>成本與效率

    SFUD驅(qū)動實(shí)戰(zhàn)手冊:串行SPI Flash開發(fā)全流程解析

    統(tǒng)一接口實(shí)現(xiàn)跨硬件兼容,從而降低嵌入式系統(tǒng)的開發(fā)復(fù)雜度,提高軟件的可重用性和可擴(kuò)展性。 LuatOS開發(fā)
    的頭像 發(fā)表于 07-29 13:19 ?764次閱讀
    SFUD驅(qū)動<b class='flag-5'>庫</b><b class='flag-5'>實(shí)戰(zhàn)</b>手冊:串行SPI Flash<b class='flag-5'>開發(fā)</b>全流程解析

    零基礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手開發(fā)實(shí)戰(zhàn)教程!

    無論你是剛接觸物聯(lián)網(wǎng)編程的新手,還是希望拓展技能的技術(shù)愛好者,本教程將為零基礎(chǔ)的讀者提供一條清晰的LuatOS學(xué)習(xí)路徑。從安裝開發(fā)工具到編寫第一個程序,我們將通過實(shí)例講解核心概念,助你快速實(shí)現(xiàn)從理論
    的頭像 發(fā)表于 06-13 17:27 ?653次閱讀
    零基礎(chǔ)學(xué)習(xí)<b class='flag-5'>LuatOS</b>編程:快速上手<b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>教程!

    快速入門——LuatOS:sys多任務(wù)管理實(shí)戰(zhàn)攻略!

    在嵌入式開發(fā)中,多任務(wù)管理是提升系統(tǒng)效率的關(guān)鍵。本教程專為快速入門設(shè)計,聚焦LuatOS的sys,通過實(shí)戰(zhàn)案例帶你快速掌握多任務(wù)創(chuàng)建、調(diào)度與同步技巧。無論你是零基礎(chǔ)新手還是希望快速提
    的頭像 發(fā)表于 05-29 14:36 ?893次閱讀
    快速入門——<b class='flag-5'>LuatOS</b>:sys<b class='flag-5'>庫</b>多任務(wù)管理<b class='flag-5'>實(shí)戰(zhàn)</b>攻略!

    基于LuatOS核心的實(shí)時操作系統(tǒng)開發(fā):從理論到實(shí)踐~

    實(shí)時系統(tǒng)的開發(fā)挑戰(zhàn)在于平衡響應(yīng)時間與系統(tǒng)開銷。LuatOS核心通過時間片輪轉(zhuǎn)與優(yōu)先級混合調(diào)度策略,既保證了高實(shí)時性任務(wù)的即時執(zhí)行,又為低優(yōu)先級任務(wù)提供了公平調(diào)度機(jī)會。其事件驅(qū)動架構(gòu)還支持異步處理
    的頭像 發(fā)表于 05-16 13:56 ?580次閱讀
    基于<b class='flag-5'>LuatOS</b>核心<b class='flag-5'>庫</b>的實(shí)時操作系統(tǒng)<b class='flag-5'>開發(fā)</b>:從理論到實(shí)踐~

    全棧開發(fā)進(jìn)階指南:LuatOS-log從入門到實(shí)戰(zhàn)!

    本文將帶你深入探索LuatOS系統(tǒng)中l(wèi)og的核心原理與實(shí)戰(zhàn)技巧,通過代碼示例解析日志管理、錯誤追蹤及性能優(yōu)化的最佳實(shí)踐,助力全棧工程師構(gòu)建更穩(wěn)健的物聯(lián)網(wǎng)應(yīng)用。 今天,我們一起來認(rèn)識LuatO
    的頭像 發(fā)表于 05-15 16:12 ?2899次閱讀
    全棧<b class='flag-5'>開發(fā)</b>進(jìn)階指南:<b class='flag-5'>LuatOS</b>-log<b class='flag-5'>庫</b>從入門到<b class='flag-5'>實(shí)戰(zhàn)</b>!

    解鎖LuatOS-log:全棧工程師的日志管理實(shí)戰(zhàn)課!

    針對全棧開發(fā)者設(shè)計的實(shí)戰(zhàn)教程,本文聚焦LuatOS平臺log的高效使用,從基礎(chǔ)配置到高級調(diào)試策略,手把手教你搭建可擴(kuò)展的日志系統(tǒng),提升項(xiàng)目維護(hù)效率。 今天,我們一起來認(rèn)識
    的頭像 發(fā)表于 05-12 15:23 ?1554次閱讀
    解鎖<b class='flag-5'>LuatOS</b>-log<b class='flag-5'>庫</b>:全棧工程師的日志管理<b class='flag-5'>實(shí)戰(zhàn)</b>課!