一、概述
Model3C芯片是一款基于RISC-V的高性能、國(guó)產(chǎn)自主、工業(yè)級(jí)高清顯示與智能控制MCU,配備強(qiáng)大的2D圖形加速處理器、PNG/JPEG解碼引擎,并支持工業(yè)寬溫。基于Model3C芯片的86彩屏中控面板,通過集成Modbus協(xié)議,實(shí)現(xiàn)了與多種控制設(shè)備的通信和數(shù)據(jù)交換。
二、Modbus協(xié)議簡(jiǎn)介
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn),使得不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。
此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪問其它設(shè)備的過程,如何回應(yīng)來自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。當(dāng)在一Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息并用Modbus 協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了 Modbus 協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測(cè)的方法。
三、Modbus RTU在Model3C芯片方案中的應(yīng)用
通信接口:Model3C芯片方案支持RS-485接口,該接口是Modbus RTU常用的串行通信接口之一。通過RS-485接口,86彩屏中控面板可以與其他Modbus設(shè)備(如PLC、傳感器等)進(jìn)行通信。
通信參數(shù):在Model3C芯片方案中,Modbus RTU通信采用異步通訊模式,具體參數(shù)包括1位起始位、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)位,波特率可根據(jù)實(shí)際需求進(jìn)行配置(如常用的9600波特率)。
報(bào)文格式:Modbus RTU報(bào)文包括設(shè)備地址、功能碼、數(shù)據(jù)域和CRC校驗(yàn)碼等部分。在Model3C芯片方案中,這些報(bào)文格式遵循Modbus協(xié)議規(guī)范,確保通信的準(zhǔn)確性和可靠性。
主從通信:在Modbus RTU通信中,Model3C芯片方案的86彩屏中控面板可以作為主設(shè)備(Master)或從設(shè)備(Slave)進(jìn)行通信。作為主設(shè)備時(shí),它可以主動(dòng)發(fā)起查詢請(qǐng)求;作為從設(shè)備時(shí),它可以響應(yīng)主設(shè)備的查詢請(qǐng)求并提供相關(guān)數(shù)據(jù)。
功能碼:Modbus協(xié)議定義了多種功能碼(如讀取線圈狀態(tài)、寫入線圈狀態(tài)、讀取保持寄存器等),用于實(shí)現(xiàn)不同的通信功能。
在Model3C芯片方案中,這些功能碼得到了全面支持,使得86彩屏中控面板可以實(shí)現(xiàn)與多種Modbus設(shè)備的靈活通信和數(shù)據(jù)交換。
四、rt-thread 使用libmodbus-rtu庫(kù)
libmodbus是一個(gè)與使用Modbus協(xié)議的設(shè)備進(jìn)行數(shù)據(jù)發(fā)送/接收的庫(kù)。該庫(kù)包含各種后端通過不同網(wǎng)絡(luò)進(jìn)行通信(例如,RTU模式下的串口或TCP / IPv6中的以太網(wǎng))。
將libmodbus庫(kù)從軟件包里啟用, libmodbus是基于select操作的,依賴于文件系統(tǒng)和libc,需要在rt-thread中開啟對(duì)應(yīng)的支持。
RS485的話需要指定 modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232); //改為485
modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP); //指定485控制引腳和電平
#include “modbus_rtu_test.h” #include “modbus.h” #include “stdio.h” #include “string.h” #include #include /* 使用BSD socket,需要包含socket.h頭文件 */ #include #include #include #define RS485_RE GET_PIN(G, 8) static void test_thread(void *param) { int slaveaddrs = 3; uint16_t tab_reg[64] = {0}; modbus_t *ctx = RT_NULL; ctx = modbus_new_rtu("/dev/uart2", 9600, ‘N’, 8, 1); modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232); //modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP); modbus_set_slave(ctx, slaveaddrs); modbus_connect(ctx); modbus_set_response_timeout(ctx, 0, 200000); //50ms int num = 0; while (1) { memset(tab_reg, 0, 64 * 2); int regs = modbus_read_registers(ctx, 0, 20, tab_reg); if (regs == -1) { rt_kprintf(“error addrs %d—\n”, slaveaddrs); if(slaveaddrs == 2) { slaveaddrs = 3; } else { slaveaddrs = 2; } modbus_set_slave(ctx, slaveaddrs); } else { rt_kprintf("-->addrs %d", slaveaddrs); rt_kprintf("[%4d][read num = %d]", num, regs); num++; int i; for (i = 0; i < 20; i++) { rt_kprintf("<%#x>", tab_reg[i]); } rt_kprintf("\n"); if(slaveaddrs == 2) { slaveaddrs = 3; } else { slaveaddrs = 2; } modbus_set_slave(ctx, slaveaddrs); } rt_thread_mdelay(500); } //7-關(guān)閉modbus端口 modbus_close(ctx); //8-釋放modbus資源 modbus_free(ctx); } static void rtu77(int argc, char **argv) { //rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT); rt_thread_t tid; tid = rt_thread_create(“test”, test_thread, RT_NULL, 2048, 12, 10); if (tid != RT_NULL) rt_thread_startup(tid); return RT_EOK; } MSH_CMD_EXPORT(rtu77, a rtu test);
五、Modbus RTU布線
Modbus RTU使用串行通信,通常使用RS-232或RS-485接口。
RS-232:這是一種點(diǎn)對(duì)點(diǎn)的通信方式,每個(gè)設(shè)備都需要單獨(dú)的串行線連接到主控器。它使用9針或25針的D-sub連接器,但通常只用到其中的少數(shù)幾個(gè)引腳,如TX(發(fā)送)、RX(接收)、GND(地線)。
RS-485:這是一種多點(diǎn)通信方式,允許多個(gè)設(shè)備共享同一對(duì)雙絞線。RS-485使用一對(duì)雙絞線(通常標(biāo)記為A和B),并使用終端電阻來匹配線路。每個(gè)設(shè)備都有一個(gè)數(shù)據(jù)發(fā)送器(TX)和數(shù)據(jù)接收器(RX)引腳,以及一個(gè)公共地線(GND)。
六、Modbus RTU特點(diǎn)
以RS-485或RS-232作為其物理層實(shí)現(xiàn)。它使用總線式拓?fù)浣Y(jié)構(gòu),允許多個(gè)設(shè)備共享同一通信線路,實(shí)現(xiàn)成本效益和簡(jiǎn)單的布線需求。Modbus RTU的數(shù)據(jù)傳輸采用二進(jìn)制編碼,每個(gè)數(shù)據(jù)幀包含地址碼、功能碼、數(shù)據(jù)和校驗(yàn)碼,通過CRC校驗(yàn)確保數(shù)據(jù)的準(zhǔn)確性。這種協(xié)議特別適合于短距離通信和成本敏感的應(yīng)用場(chǎng)景。
七、總結(jié)
基于Model3C芯片的86彩屏中控面板通過集成Modbus RTU協(xié)議,實(shí)現(xiàn)了與多種控制設(shè)備的通信和數(shù)據(jù)交換。其高性能的通信接口和豐富的通信功能使得該中控面板在工業(yè)控制、智能建筑等領(lǐng)域具有廣泛的應(yīng)用前景。
Model系列芯片芯片基于RT-Thread進(jìn)行開發(fā),而RT-Thread可以通過集成第三方庫(kù)來支持Modbus RTU,因此Model系列芯片完全可以支持Modbus RTU協(xié)議
-
芯片
+關(guān)注
關(guān)注
455文章
50816瀏覽量
423674 -
MODBUS
+關(guān)注
關(guān)注
28文章
1805瀏覽量
77003 -
HMI
+關(guān)注
關(guān)注
9文章
589瀏覽量
48555
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論