隨著物聯(lián)網(wǎng)技術(shù)蓬勃發(fā)展,Modbus 設(shè)備數(shù)據(jù)采集上報(bào)需求日益增加,本文將具體介紹如何利用 EsDA 快速實(shí)現(xiàn)Modbus RTU Master數(shù)據(jù)轉(zhuǎn)UDP Client數(shù)據(jù),縮短產(chǎn)品研發(fā)時(shí)間。
?簡(jiǎn)介隨著時(shí)代的發(fā)展,數(shù)據(jù)上云等需求越來(lái)越普遍,不同協(xié)議之間的數(shù)據(jù)轉(zhuǎn)換,也成了用戶(hù)普遍的需求之一。本文將帶大家快速實(shí)現(xiàn)將EPC6450-AWI工控板的Modbus RTU數(shù)據(jù),快速轉(zhuǎn)發(fā)成UDP客戶(hù)端數(shù)據(jù),并傳送給UDP服務(wù)器,工作框架如圖1.1。
圖1本文主要使用本公司的EPC6450-AWI型號(hào)工控板,外接使用Modbus RTU協(xié)議傳輸?shù)臏貪穸?a href="http://m.xsypw.cn/tags/變送器/" target="_blank">變送器,讀取相關(guān)溫濕度數(shù)據(jù),并創(chuàng)建UDP客戶(hù)端,向PC機(jī)上的UDP服務(wù)器實(shí)時(shí)發(fā)送溫濕度數(shù)據(jù)。 入門(mén)基礎(chǔ)
本章內(nèi)容,主要使用modbus_master_in、modbus_parse_in、fscript、log、push、tcpudp_client節(jié)點(diǎn)。用戶(hù)在進(jìn)行閱讀之前,需具備一定基礎(chǔ)的AWFlow Designer開(kāi)發(fā)經(jīng)驗(yàn)。若剛開(kāi)始接觸,可閱讀以下文章,進(jìn)行基礎(chǔ)知識(shí)的學(xué)習(xí)。
- EsDAMPC-ZC1入門(mén)(一)——軟件安裝
- EsDAMPC-ZC1入門(mén)(二)——LED控制
- EsDA應(yīng)用串口服務(wù)器——UDPServer
?硬件前提
1. EPC6450-AWI型號(hào)工控板
圖2
2.USB轉(zhuǎn)TTL類(lèi)型串口設(shè)備
圖3
3.溫濕度變送器(ModbusRTU協(xié)議,RS485接口)
圖4
此傳感器,內(nèi)部使用了Modbus RTU協(xié)議,數(shù)據(jù)分別存儲(chǔ)在地址為0(溫度)和1(濕度)上。
4.Type-C線、網(wǎng)線、杜邦線若干
圖5 ?硬件連接圖
圖6
將USB轉(zhuǎn)TLL接口與DUART接口相接(此處注意RXD接TXD,TXD接RXD),Type-C供電線與工控板Type-C接口相接,網(wǎng)口接NET0接口,溫濕度變送器上的A/B信號(hào)線分別于工控板上的RS485A/RS485B相連,+電源線接于5V,-地線接于GND。
?本章流圖解析
圖7
1. 本流圖節(jié)點(diǎn)列表
- modbus_master_in節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)讀取從機(jī)的相關(guān)寄存器地址中的數(shù)據(jù)。
- modbus_parse_in節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)解析modbus_master_in獲取的數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)化成對(duì)應(yīng)類(lèi)型的數(shù)值數(shù)組。
- fscript1節(jié)點(diǎn),該節(jié)點(diǎn)主要負(fù)責(zé)對(duì)modbus_parse_in節(jié)點(diǎn)所生成的數(shù)值數(shù)組進(jìn)行提取,并格式化輸出對(duì)應(yīng)的溫濕度數(shù)據(jù)。
- fscript2節(jié)點(diǎn),該節(jié)點(diǎn)主要負(fù)責(zé)對(duì)PC上的UDP服務(wù)器發(fā)送的數(shù)據(jù)流進(jìn)行讀取與解析,并傳送給log節(jié)點(diǎn)。
- log節(jié)點(diǎn),該節(jié)點(diǎn)主要負(fù)責(zé)把接收到的fscript節(jié)點(diǎn)輸出的數(shù)據(jù),顯示于串口與調(diào)試口。
- push節(jié)點(diǎn),該節(jié)點(diǎn)主要負(fù)責(zé)將接收到的fscript節(jié)點(diǎn)輸出的數(shù)據(jù),傳送至udp_server_ex節(jié)點(diǎn)。
tcpudp_client節(jié)點(diǎn),該節(jié)點(diǎn)主要負(fù)責(zé)將得到的push節(jié)點(diǎn)數(shù)據(jù),轉(zhuǎn)發(fā)給PC上位機(jī)上的UDP服務(wù)器。
2. 數(shù)據(jù)流向
通過(guò)RS485接口與Modbus RTU協(xié)議讀取溫濕度變送器的數(shù)據(jù),對(duì)該數(shù)據(jù)進(jìn)行數(shù)值化生成對(duì)應(yīng)的數(shù)值數(shù)組,對(duì)生成的數(shù)值數(shù)組進(jìn)行提取,格式化輸出對(duì)應(yīng)的溫濕度情況,并將信息顯示在串口與調(diào)試窗口上,以及發(fā)送至PC上位機(jī)上的UDP服務(wù)器窗口,進(jìn)行數(shù)據(jù)交互。
?節(jié)點(diǎn)解析
1.modbus_master_in節(jié)點(diǎn)
圖8
該節(jié)點(diǎn)關(guān)鍵參數(shù)一覽:
- 主機(jī)參數(shù)配置,此處配置與配置串口參數(shù)同理,配置如下:
- 圖9
(可參照學(xué)習(xí)EsDAMPC-ZC1應(yīng)用——串口服務(wù)器(一),以及EsDAMPC-ZC1應(yīng)用——串口服務(wù)器(二))
- 讀取模式,該屬性將決定節(jié)點(diǎn)的觸發(fā)方式。分別有:(1)循環(huán)讀取數(shù)據(jù),該模式節(jié)點(diǎn)將以用戶(hù)設(shè)定的周期定時(shí)輸出數(shù)據(jù),如周期內(nèi)數(shù)據(jù)未被刷新,則在下一周期輸出;
(2)根據(jù)輸入的信息讀取從機(jī)設(shè)備的數(shù)據(jù),讀取成功則向下一節(jié)點(diǎn)輸出數(shù)據(jù)。可使用push節(jié)點(diǎn)向此節(jié)點(diǎn)輸入讀取所需要的參數(shù)信息,具體請(qǐng)查看輸入?yún)?shù)。此處我們選用periodic read data模式,即第(1)種。
從機(jī)ID,從機(jī)設(shè)備的ID號(hào),數(shù)值為0-255。此處從機(jī)ID為1,具體用戶(hù)可根據(jù)實(shí)際情況修改。
輸出周期,數(shù)值為0-65535,此處我們?cè)O(shè)置為1000。
寄存器地址,該值為讀取的起始寄存器地址,數(shù)值為0-65535,此處我們?cè)O(shè)置為0。
讀取數(shù)量,數(shù)值為0-1000,此處我們?cè)O(shè)置為2,即讀取兩個(gè)數(shù)據(jù)(分別為溫度和濕度)。
- 寄存器類(lèi)型,讀取的寄存器類(lèi)型。分別有:(1)讀取線圈量,此類(lèi)型的數(shù)據(jù)將輸出uint8_t指針類(lèi)型的payload;(2)讀取離散量,此類(lèi)型的數(shù)據(jù)將輸出uint8_t指針類(lèi)型的payload;(3)讀取保持寄存器,此類(lèi)型的數(shù)據(jù)將輸出uint16_t指針類(lèi)型的payload;
(4)讀取輸入寄存器,此類(lèi)型的數(shù)據(jù)將輸出uint16_t指針類(lèi)型的payload。此處我們?cè)O(shè)置為read holding resgisters,即第(3)種。
2.modbus_parse_in節(jié)點(diǎn)
圖10
該節(jié)點(diǎn)關(guān)鍵參數(shù)一覽:
- 數(shù)據(jù)轉(zhuǎn)換模式,該模式有:(1)單地址數(shù)據(jù)轉(zhuǎn)換,此模式只對(duì)某一地址的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,因此輸出payload是對(duì)應(yīng)地址的單個(gè)數(shù)據(jù)值; (2)多地址數(shù)據(jù)轉(zhuǎn)換,此模式對(duì)指定地址及數(shù)量的數(shù)據(jù)進(jìn)行同一的轉(zhuǎn)換,并將轉(zhuǎn)換后的值存入array對(duì)象; (3)全地址數(shù)據(jù)轉(zhuǎn)換,此模式對(duì)輸入的所有數(shù)據(jù)進(jìn)行同一的轉(zhuǎn)換,并將轉(zhuǎn)換后的值存入array對(duì)象。注:數(shù)據(jù)地址及長(zhǎng)度必須在modbus輸入節(jié)點(diǎn)的讀取范圍內(nèi),否則轉(zhuǎn)換將失敗。此處我們選擇multi-address address parse模式,即第(2)種。
- 數(shù)據(jù)轉(zhuǎn)換起始地址,此處設(shè)置為0。
- 轉(zhuǎn)換數(shù)量,此處設(shè)置為2。
- 數(shù)據(jù)轉(zhuǎn)換類(lèi)型,讀取的數(shù)據(jù)格式,對(duì)讀取的數(shù)據(jù)進(jìn)行位整合,例: int32_t:將數(shù)據(jù)地址開(kāi)始的4byte整合成int32_t類(lèi)型的值。此處我們選擇16bits-unsigned int類(lèi)型。
- 大小端選擇,此處選擇配置讀取的存儲(chǔ)大小端模式,此處我們?cè)O(shè)置為小端模式。
3. fscript1節(jié)點(diǎn)
該節(jié)點(diǎn)為腳本節(jié)點(diǎn),具體腳本如下。
a = msg.payload
output.payload = "temp:" + array_get(a, 0)/10 + "C, " + "humi:" + array_get(a, 1)/10 + "RH"
此腳本主要實(shí)現(xiàn)將modbus_parse_in節(jié)點(diǎn)所生成的數(shù)值數(shù)組提取數(shù)值,并進(jìn)行格式化處理,輸出對(duì)應(yīng)的溫濕度數(shù)據(jù)。
4.fscript2節(jié)點(diǎn)
該節(jié)點(diǎn)為腳本節(jié)點(diǎn),具體腳本如下。
b = istream_read_string(msg.istream, 100, 1000)msg.payload = b
此腳本主要實(shí)現(xiàn)讀取 tcpudp_client 節(jié)點(diǎn)接收到的客戶(hù)端數(shù)據(jù),并將數(shù)據(jù)傳送給下一個(gè)節(jié)點(diǎn)(log節(jié)點(diǎn))。
5. push節(jié)點(diǎn)
圖11
該節(jié)點(diǎn)用法較為簡(jiǎn)單,直接填寫(xiě)需要進(jìn)行傳送的目標(biāo)節(jié)點(diǎn)即可。6.tcp_client節(jié)點(diǎn)
圖12
該節(jié)點(diǎn)主要實(shí)現(xiàn)將push節(jié)點(diǎn)發(fā)送而來(lái)的數(shù)據(jù),傳達(dá)給UDP服務(wù)器。
該節(jié)點(diǎn)關(guān)鍵參數(shù)一覽:
使能,為true則允許建立連接,為false則禁止建立連接,此處我們選擇true。
協(xié)議,此處選擇UDP。
主機(jī)號(hào),此處填PC上位機(jī)上所創(chuàng)建的UDP服務(wù)器的IP,為192.168.137.136。
端口號(hào),此處設(shè)置為7777。
本地端口號(hào),此處也設(shè)置為7777。
重試間隔,此處設(shè)置為1000,單位為ms,表示斷開(kāi)連接后,若使能參數(shù)為true
則1000ms后便重新連接。
空閑下線,值為0則關(guān)閉該功能,在該時(shí)間內(nèi)無(wú)數(shù)據(jù)通信則斷開(kāi)連接,此處設(shè)置為0。
心跳包與注冊(cè)包,具體請(qǐng)看節(jié)點(diǎn)的幫助文檔,本章此處不填。
保活時(shí)間,此參數(shù)僅在TCP協(xié)議模式下有效,此處我們?cè)O(shè)置為120。
7.log節(jié)點(diǎn)
圖13
該節(jié)點(diǎn)主要實(shí)現(xiàn),將上一個(gè)節(jié)點(diǎn)傳輸而下的數(shù)據(jù),打印至串口和調(diào)試窗口上,一個(gè)很好用的調(diào)試信息反饋節(jié)點(diǎn)。
?流圖下載1.點(diǎn)擊下拉框
圖142.點(diǎn)擊配置按鈕
圖153.配置IP地址與端口號(hào)
圖16
若用戶(hù)不知道流圖下載的端口號(hào),可以在板子重啟時(shí),調(diào)試串口種打印信息獲取,或者在shell命令窗口使用ipconfig命令獲取網(wǎng)口配置。4.先選擇配置,后點(diǎn)擊下載按鈕
圖17
圖185.下載完成
圖19
?效果驗(yàn)證
1. UDP服務(wù)器
此處需要使用一款助手工具,本章便用sscom工具進(jìn)行效果展示。1.1UDP服務(wù)器接收到的設(shè)備數(shù)據(jù)
圖20點(diǎn)擊創(chuàng)建連接
1.2 UDP服務(wù)器接收到的設(shè)備數(shù)據(jù)圖21設(shè)備數(shù)據(jù)1.3UDP服務(wù)器向設(shè)備下發(fā)數(shù)據(jù)
圖22下發(fā)數(shù)據(jù)
2. UDP客戶(hù)端
可見(jiàn)客戶(hù)端接收到的數(shù)據(jù)如下。
圖23查看UDP客戶(hù)端接收數(shù)據(jù)
圖24接收數(shù)據(jù)詳情到此,本章結(jié)束,如果您對(duì)此有興趣,那就趕快行動(dòng)起來(lái)吧!
-
MODBUS
+關(guān)注
關(guān)注
28文章
1821瀏覽量
77319 -
UDP
+關(guān)注
關(guān)注
0文章
327瀏覽量
34047 -
ESDA
+關(guān)注
關(guān)注
0文章
28瀏覽量
7530 -
RTU
+關(guān)注
關(guān)注
0文章
418瀏覽量
28766
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
EtherCAT轉(zhuǎn) 4 路Modbus RTU網(wǎng)關(guān)-三格電子
![EtherCAT<b class='flag-5'>轉(zhuǎn)</b> 4 路<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>網(wǎng)關(guān)-三格電子](https://file1.elecfans.com//web3/M00/02/DB/wKgZO2diO_uAVrv5AACgNIUco1U51.jpeg)
Profibus PA轉(zhuǎn)Modbus RTU協(xié)議網(wǎng)關(guān)
![Profibus PA<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>協(xié)議網(wǎng)關(guān)](https://file1.elecfans.com//web2/M00/07/5A/wKgZombwGHSAD9k1AAC_bPWEhEY990.jpg)
Modbus RTU轉(zhuǎn)CC-link協(xié)議網(wǎng)關(guān)(Modbus RTU轉(zhuǎn)CC-link)
![<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>轉(zhuǎn)</b>CC-link協(xié)議網(wǎng)關(guān)(<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>轉(zhuǎn)</b>CC-link)](https://file1.elecfans.com/web2/M00/05/DC/wKgZombfrU-AOGw0AAKv-cw_KUw942.png)
Profibus-PA轉(zhuǎn)Modbus-RTU協(xié)議網(wǎng)關(guān)(Profibus-PA轉(zhuǎn)Modbus-RTU)
![Profibus-PA<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus-RTU</b>協(xié)議網(wǎng)關(guān)(Profibus-PA<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus-RTU</b>)](https://file1.elecfans.com/web2/M00/06/B4/wKgaombesuyANQsXAAFBw0V4Q28553.png)
EtherCAT主站轉(zhuǎn)Modbus RTU網(wǎng)關(guān)(EtherCAT轉(zhuǎn)Modbus RTU)
![EtherCAT主站<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>網(wǎng)關(guān)(EtherCAT<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>)](https://file1.elecfans.com/web2/M00/04/0F/wKgZombJmN6AGcuFAAEor7btuCk962.png)
Profibus DP主站轉(zhuǎn)Modbus RTU網(wǎng)關(guān)(Modbus RTU轉(zhuǎn)Profibus DP)
![Profibus DP主站<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>網(wǎng)關(guān)(<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>轉(zhuǎn)</b>Profibus DP)](https://file1.elecfans.com/web2/M00/04/EA/wKgaombIgduADp9aAAFBQPcZdwI516.png)
Modbus RTU轉(zhuǎn)CC-Link協(xié)議網(wǎng)關(guān)(CC-Link轉(zhuǎn)Modbus RTU)
![<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>轉(zhuǎn)</b>CC-Link協(xié)議網(wǎng)關(guān)(CC-Link<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>)](https://file1.elecfans.com//web2/M00/06/90/wKgaombb-cyAas06AAB6XwjfMa4293.jpg)
EtherNet/IP轉(zhuǎn)Modbus-RTU主站網(wǎng)關(guān)(EtherNet/IP轉(zhuǎn)Modbus-RTU)
![EtherNet/IP<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus-RTU</b>主站網(wǎng)關(guān)(EtherNet/IP<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus-RTU</b>)](https://file1.elecfans.com/web2/M00/05/1E/wKgaombMIuGAMqO0AAK22mjr9qA153.png)
EtherNet/IP轉(zhuǎn)Modbus-RTU主站協(xié)議網(wǎng)關(guān)(JM-EIP-RTU)
![EtherNet/IP<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus-RTU</b>主站協(xié)議網(wǎng)關(guān)(JM-EIP-<b class='flag-5'>RTU</b>)](https://file1.elecfans.com/web2/M00/05/1E/wKgaombMIuGAMqO0AAK22mjr9qA153.png)
EtherCAT轉(zhuǎn)Modbus RTU協(xié)議網(wǎng)關(guān)(YC-ECT-RTU)
![EtherCAT<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>協(xié)議網(wǎng)關(guān)(YC-ECT-<b class='flag-5'>RTU</b>)](https://file1.elecfans.com//web2/M00/04/FC/wKgaombJmf-ASm3TAAB3Qt1U4po135.jpg)
Modbus RTU、Modbus TCP轉(zhuǎn)MQTT網(wǎng)關(guān)實(shí)現(xiàn)Modbus設(shè)備與云平臺(tái)的無(wú)縫通信
![<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>、<b class='flag-5'>Modbus</b> TCP<b class='flag-5'>轉(zhuǎn)</b>MQTT網(wǎng)關(guān)實(shí)現(xiàn)<b class='flag-5'>Modbus</b>設(shè)備與云平臺(tái)的無(wú)縫通信](https://file1.elecfans.com/web2/M00/FD/E4/wKgZomafa62AHtzCAAKmcyMNOwg385.png)
ProfiNet轉(zhuǎn)RS485/Modbus Rtu協(xié)議網(wǎng)關(guān)
![ProfiNet<b class='flag-5'>轉(zhuǎn)</b>RS485/<b class='flag-5'>Modbus</b> <b class='flag-5'>Rtu</b>協(xié)議網(wǎng)關(guān)](https://file1.elecfans.com/web2/M00/EE/1D/wKgaomZqQsaAP9vSAAGby7Kb2P4644.png)
Modbus RTU轉(zhuǎn)PROFINET協(xié)議轉(zhuǎn)換網(wǎng)關(guān) HT1S-PNS485-S10
CCLinkie轉(zhuǎn)Modbus RTU在紡紗設(shè)備領(lǐng)域應(yīng)用
![CCLinkie<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>在紡紗設(shè)備領(lǐng)域應(yīng)用](https://file1.elecfans.com/web2/M00/C6/4B/wKgaomX88k-AC5JmAACyihPhcrk270.png)
CCLinkie轉(zhuǎn)Modbus RTU在紡紗設(shè)備領(lǐng)域應(yīng)用
![CCLinkie<b class='flag-5'>轉(zhuǎn)</b><b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>在紡紗設(shè)備領(lǐng)域應(yīng)用](https://file1.elecfans.com/web2/M00/C5/61/wKgZomX88e6ATlFSAAVVfyUwyDE647.png)
評(píng)論