時間:2020-12-25 10:37:27來源:正運動技術(shù)
視頻教材:《視頻教材:正運動技術(shù)運動控制器MODBUS通訊》
材料準備
1.電腦1臺
2.控制器2個
3.+24V直流電源1個
4.驅(qū)動器+電機若干
5.交換機1個
6.控制器接線端子若干
7.網(wǎng)線若干
8.連接線若干
另:IO設(shè)備、擴展模板等根據(jù)需求選用。
控制器接線配置
MODBUS 通訊協(xié)議簡介
MODBUS協(xié)議是一個通用的標準協(xié)議,幾乎所有的控制設(shè)備和智能化儀表都支持MODBUS協(xié)議,這樣不同廠家的設(shè)備之間就可以互相通訊,連接到同一個控制網(wǎng)絡(luò)。
MODBUS的串行傳輸模式分為:RTU模式和ASCII模式,RTU模式通訊傳輸?shù)臄?shù)據(jù)為二進制數(shù)據(jù),ASCII模式通訊傳輸?shù)臄?shù)據(jù)為ASCII碼,RTU模式的通訊速率比ASCII模式快。
MODBUS發(fā)展至今包含好幾種協(xié)議模式:控制器的串口和網(wǎng)口的默認協(xié)議均為MODBUS協(xié)議,其中串口為MODBUS_RTU協(xié)議,網(wǎng)口為MODBUS_TCP協(xié)議。
控制器支持MODBUS_RTU模式的串口:RS232、RS485、RS422,當從串口接收到數(shù)據(jù)時,會直接根據(jù)報文中的數(shù)據(jù)進行控制。
控制器支持的網(wǎng)口協(xié)議MODBUS_TCP接口:EtherNET網(wǎng)口。
網(wǎng)口主要用于與PC與人機界面通訊。
控制器的串口和網(wǎng)口在 MODBUS協(xié)議下讀寫數(shù)據(jù),使用MODBUS相關(guān)指令讀寫,數(shù)據(jù)保存在MODBUS寄存器中傳遞。也可以通過指令將串口或網(wǎng)口配置為無協(xié)議模式,采用自定義通訊指令讀寫數(shù)據(jù)。
ZMC316 系列脈沖型控制器各接口配置如下:
通訊接口包含RS232,RS485,RS422,以太網(wǎng),U盤,CAN接口。
自帶16個脈沖軸,面板上包含15個脈沖接口和3個編碼器接口,第16個脈沖軸由OUT輸出口控制。
支持使用擴展模塊擴展至24個脈沖軸,支持多達24軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實現(xiàn)實時的運動控制。
應(yīng)用程序可以使用ZDevelop軟件或VC、VB、VS、C++、LabVIEW、C#等軟件來開發(fā)。
01 三類串口說明
RS232串口常用于連接PC或人機界面
RS485串口常用于與控制裝置和智能儀表的通訊控制
RS422串口只有個別型號控制器才有此接口
RS232
控制器的RS232接口可以做MODBUS主站或從站,支持1個主站發(fā)送數(shù)據(jù),1個從站接收數(shù)據(jù)。做主站時,可連接驅(qū)動器、變頻器、溫控儀等,進行數(shù)據(jù)讀出與寫入的控制。做從站時,可連接人機界面,用來監(jiān)控運行狀態(tài),常用于連接PC或人機界面。
控制器的RS232接口采用DB9公頭,使用相應(yīng)的連接線連接兩個設(shè)備。
RS232的標準接線只需要三根線即可,2根數(shù)據(jù)信號TXD和RXD,1根地線EGND,數(shù)據(jù)信號TXD與RXD交叉連接,再將EGND連到一起。
接線參考如下:
RS485
主要提供主/從站的多臺通訊設(shè)備聯(lián)機,理論上支持128個節(jié)點。做主站時,可連接驅(qū)動器、變頻器、溫控儀等,進行數(shù)據(jù)讀出與寫入的控制;做從站時,能與PLC通訊,可連接人機界面,用來監(jiān)控運行狀態(tài)。
RS485接口采用差分傳輸方式,通過判斷A與B之間的電壓差來確定是高電平或低電平。
控制器的RS485接口采用了簡易接線方式,如下圖所示,控制器的485A、485B、EGND地線, 分別接第一個從站的A、B、地線, 然后再接第二個從站的A、B、地線(A 接 A, B 接 B,信號共地),并且控制器和最后一個從站的485A 和485B 要并聯(lián)120 歐電阻防止信號反射,線纜需要使用屏蔽雙絞線,避免信號干擾,每個節(jié)點支線的距離要小于3m。
RS422
控制器的RS422接口可以做MODBUS 主站或從站,支持1發(fā)10收。
控制器的RS422接口采用了簡易接線方式,為四線制,接線時需要接5根線,RX+/RX-(接收信號)、TX+/TX- (發(fā)送信號)、一根信號地線。
控制器的RS422接口相比RS485和RS232,布線成本高,接線容易弄錯,包含422接口的控制器型號很少。
02 串口參數(shù)
連接串口使用:串口通常可選RS232串口或RS485串口,不管哪種串口,除了端口號和接線方法有所不同,默認參數(shù)與操作指令都是相同的。
串口默認參數(shù)為:波特率38400,數(shù)據(jù)位8,停止位1,校驗位無,采用SETCOM指令配置串口參數(shù)??刂破髦匦律想姾?,SETCOM參數(shù)會還原成默認值,所以請在程序開頭寫SETCOM設(shè)置。
控制器所有串口的MODBUS協(xié)議站號ADDRESS為1-127,缺省=1。
在一個MODBUS網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù),否則無法通訊。
控制器默認PORT0(COM0)為RS232串口,PORT1(COM1)為RS485串口,PORT2(COM2)為RS422串口,支持在線命令窗口發(fā)送?*setcom打印查看,或在“控制器狀態(tài)”窗口查看。
SETCOM指令除了可以配置串口的通訊基本參數(shù)外,還可以選擇參數(shù)配置通訊協(xié)議,設(shè)置控制器為主端設(shè)備還是從端設(shè)備,默認為從端,還可以開啟自定義通訊模式(即mode=0無協(xié)議模式)。
語法:SETCOM (baudrate,databits,stopbits,parity,port[,mode] [,variable] [,timeout])
mode參數(shù)選擇協(xié)議:
1.與觸摸屏通訊時,mode參數(shù)選擇協(xié)議:4
Port0:setcom(9600,8,1,0,0,4,2,1000)
Port1:setcom(9600,8,1,0,1,4,2,1000)
2.控制器通過RS485做主站時,mode參數(shù)選擇協(xié)議:14
Port1:setcom(38400,8,1,0,1,14,2,1000)
03 網(wǎng)口參數(shù)
控制器網(wǎng)口支持MODBUS-TCP協(xié)議,出廠默認IP地址為192.168.0.11,可使用IP_ADDRESS指令修改IP地址或在修改IP地址窗口修改,修改一次永久生效。
控制器至少包含2個網(wǎng)口通道,可在在線命令發(fā)送?*port打印查看,如下圖,網(wǎng)口的端口號為502。
ZMC432通道
ZMC316通道
不同的控制器可通過網(wǎng)口互聯(lián),EtherNET網(wǎng)線接口只有一個,可使用交換機,網(wǎng)口互聯(lián)的前提是兩個控制器均有CONNECT通道,用MODBUSM_DES2指令開啟連接。
04 串口/網(wǎng)口讀寫
MODBUS通訊通過功能碼告訴被尋址到的終端執(zhí)行何種功能,如運行命令、讀取監(jiān)控狀態(tài)、修改參數(shù)、讀取參數(shù)等,MODBUS協(xié)議制定了相關(guān)的功能碼。
控制器也可直接使用MODBUS通訊功能碼,為方便使用,將一些常用的功能碼直接封裝為Basic指令,如下表Basic指令對應(yīng)功能碼。
串口和網(wǎng)口通訊的連接方法不同,讀寫都是使用同一套指令,數(shù)據(jù)由MODBUS寄存器存儲。
1.MODBUS寄存器
MODBUS通訊的數(shù)據(jù)使用MODBUS寄存器存儲,控制器的MODBUS寄存器符合MODBUS標準通訊協(xié)議,分為位寄存器和字寄存器兩類。
位寄存器:MODBUS_BIT(布爾型)。
字寄存器:包含MODBUS_REG(16位整型)、MODBUS_LONG(32位整型)、MODBUS_IEEE(32位浮點型)、MODBUS_STRING(8位字節(jié)型)。
控制器中MODBUS字寄存器占用同一片系統(tǒng)變量空間,其中一個LONG占用兩個REG地址,一個IEEE也占用兩個REG地址,使用時要注意錯開字寄存器編號地址。
所以要注意MODBUS_REG、MODBUS_LONG、MODBUS_IEEE地址在用戶應(yīng)用程序中不能重疊。
控制器的MODBUS存儲空間安排如下:
2.MODBUS讀寫相關(guān)指令
3.MODBUS讀/寫語法格式相同,如下所示:
MODBUSM_REGGET (startreg, num, local_reg)
startreg:對端的寄存器起始編號,從0開始
num:寄存器個數(shù)
local_reg:從本地系統(tǒng)MODBUS寄存器中取值,起始編號
MODBUSM_REGSET (startreg, num, local_reg)
startreg:對端的寄存器起始編號,從0開始
num:寄存器個數(shù)
local_reg:從本地系統(tǒng)MODBUS寄存器中取值,起始編號
使用示例:
MODBUSM_REGGET(0,10,100) '把對端位寄存器0~9復(fù)制到通訊本地的寄存器100~109
MODBUSM_REGSET(0,10,100) '把本地位寄存器100~109設(shè)置到通訊對端的寄存器0~9
4.建立MODBUS通訊
(1)串口
MODBUSM_DES (address[,port],[timer],[resendset])
ADDRESS1 = MODBUSM_DES([port])
address:對端的modbus協(xié)議站號
port:當前modbus主通訊的port號
timer:消息超時時間設(shè)置,缺省1000ms。
resendset:超時消息重發(fā)設(shè)置,0-不重發(fā),1-SEND指令重發(fā),2-SEND與MODBUSM指令都重發(fā)。
(2)網(wǎng)口
MODBUSM_DES2 (id,port,"desipaddress",[timer],[resendset])
id:對方控制器的MODBUS從端ID,缺省1
port:支持兩種模式,?*PORT確認通道號及模式
ETH時,作為MODBUS_TCP主端通道
CONNECT時,做為控制器互聯(lián)通道
desipaddress:字符串, 對方控制器的IP地址
timer:消息超時時間設(shè)置,缺省1000ms
resendset:超時消息重發(fā)設(shè)置,0-不重發(fā),1-SEND指令超時重發(fā),2-SEND與MODBUSM指令都超時重發(fā)。
05 串口通訊例程
控制器RS485做主站與從站的通訊。
工程項目下包含三個文件:
ModbusRead.bas :建立通訊連接,主站讀取從站數(shù)據(jù)。在線命令RUN開啟任務(wù),開啟前先停止寫入任務(wù),開啟語法:RUN "ModbusRead", 1。
ModbusSet.bas :建立通訊連接,主站數(shù)據(jù)復(fù)制到從站。在線命令RUN開啟任務(wù),開啟前先停止讀取任務(wù),開啟語法:RUN "ModbusSet", 2。
ModbusIni.bas :參數(shù)初始化,設(shè)置RS485的主從端,從站節(jié)點個數(shù)等信息。設(shè)為上電自動運行任務(wù)。
例程設(shè)置了一個從站,支持設(shè)置多個從站,從站數(shù)量修改slaveCount參數(shù)。
為了方便觀察數(shù)據(jù),主站和從站均使用的控制器,將兩個控制器通過RS485連接。
注意主站控制器的RS485需要處于ModbusMaster模式,如下圖。從站控制器的RS485需要處于ModbusSlave模式。
ModbusIni.bas文件程序
'************************變量定義*********************
Global slaveCount
slaveCount = 1 '從站的數(shù)量
'因為從站地址ADDRESS不能為0, 0為廣播地址,所以后面的slaveID是從1開始, 所以數(shù)組大小+1
Global slaveID(slaveCount+1)
For i = 1 to slaveCount '索引從1開始
slaveID(i)=i '從站ID從1開始, 一般由撥碼或者從站設(shè)置軟件設(shè)置
Next
Global keepReading, modbusErrorStatus, writeSlaveID
writeSlaveID = 1 '用戶可通過PC程序選擇要寫入哪個從站數(shù)據(jù)
keepReading = 1 '持續(xù)讀取的判斷標志變量, 用戶不需要修改,用做while循環(huán)條件
modbusErrorStatus = 0 '判斷是否通信正常的標志變量
'************************串口參數(shù)設(shè)置*********************
'SETCOM (baudrate,databits,stopbits,parity,port [,mode] [,variable] [,timeout])
'參數(shù)依此為:波特率,數(shù)據(jù)位,停止位,校驗位,串口端口號(默認232端口號0,485端口號為1)
'后三個缺省參數(shù):MODBUS模式(14代表控制器做主站,默認4為從站),MODBUS寄存器設(shè)置(2為缺省, MODBUS寄存器獨立, 不和VR或TABLE映射),通信超時閾值
SETCOM(38400,8,1,0,1,14,2,1000)
ModbusRead.bas文件程序
'互斥操作,防止讀寫同時操作,多個modbus指令同時運行, 會造成通信出錯
'
STOP
"modbusSet.bas"
'用做modbus通信的成功標志變量
modbusErrorStatus = 0 '通訊正常值為
0 ,通訊異常值為
1
while keepReading
For i = 1 to slaveCount
MODBUSM_DES(slaveID(i),1) '和從站1通訊
'MODBUSM_REGGET (0, 8, 10),從站1寄存器0-7的數(shù)據(jù)復(fù)制到主站10-17
MODBUSM_REGGET(0,8,slaveID(i)*10) '獲取對端寄存器值
WAIT UNTIL MODBUSM_STATE <> 1 '等待消息結(jié)束
IF MODBUSM_STATE=0 THEN
?slaveID(i), "號節(jié)點通訊正常"
Else
?slaveID(i), "號節(jié)點通訊出錯!!!"
modbusErrorStatus = 1
'可以在此處加入用戶的錯誤處理程序
Endif
Delay(100) '兩個節(jié)點之間的通信延時
Next
Wend
ModbusSet.bas文件程序
'互斥操作,防止讀寫同時操作
keepReading = 0
STOP "ModbusRead.bas"
modbusErrorStatus = 0
'如果取消對從站ID的判斷(If), 則需要提前寫好所有從站對應(yīng)的主站寄存器數(shù)據(jù)
FOR i = 1 To slaveCount
IF slaveID(i) = writeSlaveID THEN '遍歷從站節(jié)點,writeSlaveID參數(shù)選擇將主站數(shù)據(jù)寫到哪個從站節(jié)點
MODBUSM_DES(slaveID(i),controllerPort) '建立主從站連接
'MODBUSM_REGSET(10, 2, 110),主站寄存器110-111的數(shù)據(jù)傳遞給從站1的10-11
MODBUSM_REGSET(10,2,100 + slaveID(i)*10)
WAIT UNTIL MODBUSM_STATE <> 1 '等待消息結(jié)束
IF MODBUSM_STATE=0 THEN
?slaveID(i), "號節(jié)點通訊正常"
ELSE
modbusErrorStatus = 1
?slaveID(i), "號節(jié)點通訊出錯!!!"
'可以在此處加入用戶的錯誤處理程序
ENDIF
DELAY(100) '兩個節(jié)點之間的通信延時
ENDIF
NEXT
'*****重新恢復(fù)循環(huán)讀取任務(wù),是否需要取決于應(yīng)用*****
DELAY(3000)
'RUN
"ModbusRead.bas"
運行效果
1.MODBUSM_REGGET讀取:讀取從站MODBUSM_REG寄存器0-7共8個數(shù)據(jù)到主站的 MODBUSM_REG寄存器10-17。
從站數(shù)據(jù):
主站初始數(shù)據(jù)均為0,讀取完成主站數(shù)據(jù):讀取了從站的8個數(shù)據(jù)。
2.MODBUSM_REGSET寫入:將主站MODBUSM_REG寄存器110-111共2個數(shù)據(jù)寫入從站的 MODBUSM_REG寄存器10-11。
主站數(shù)據(jù):
讀取完成從站的數(shù)據(jù)如下:讀取了主站的2個數(shù)據(jù)。
06 網(wǎng)口通訊例程
采用兩個控制器通過交換機網(wǎng)口互聯(lián)。
主端控制器IP:192.168.0.11
從端控制器IP:192.168.0.36
分別使用ZDevelop軟件連接這兩個控制器,接線參考如下,采用ETH網(wǎng)口通道5,下載程序后查看運行效果。
主端程序
MODBUS_REG(0)=0
MODBUSM_des2($1 , 5,
"192.168.0.36" )
'主端與從端建立連接,控制器IP不能相同
WHILE 1
FOR i =0 TO 10
MODBUS_REG(0) = i
MODBUSM_REGSET(0,1,0) '主端數(shù)據(jù)寫入從端
MODBUS_REG(0) = 99
MODBUSM_REGGET(0,1,0) '主端從從端讀取數(shù)據(jù)
IF MODBUS_REG(0) <> i THEN '判斷MODBUSM_REGGET(0,1,0)是否讀取成功
PRINT "modbus_reg(0)=" MODBUS_REG(0), "modbusm_state=" MODBUSM_STATE
ENDIF
NEXT
WEND
END
從端程序
ADDRESS= 1 '從端站號
MODBUS_REG(0)= 0
WHILE 1
IF MODBUS_REG(0) <> 0 THEN
PRINT MODBUS_REG(0)
ENDIF
WEND
END
運行效果:
主端先將數(shù)據(jù)傳給從端,修改主站數(shù)據(jù)后,再從從端獲取數(shù)據(jù),獲取數(shù)據(jù)成功,IF條件不滿足,打印不執(zhí)行。
從端接受來自主端的數(shù)據(jù),改變了MODBUS_REG(0)的值,并循環(huán)打印。
07 網(wǎng)口互聯(lián)例程
采用兩個控制器通過交換機網(wǎng)口互聯(lián)。
主端控制器IP:192.168.0.11
從端控制器IP:192.168.0.36
分別使用ZDevelop軟件連接這兩個控制器,采用CONNECT互聯(lián)通道20,必須兩個控制器都包含CONNECT通道才可以正常通訊,下載程序后查看運行效果。
主端程序
MODBUS_REG(0)=0
MODBUSM_des2($1 , 20,
"192.168.0.36" )
'主端與從端建立連接,控制器IP不能相同
WHILE 1
FOR i =0 TO 10
MODBUS_REG(0) = i
MODBUSM_REGSET(0,1,0) '主端數(shù)據(jù)寫入從端
MODBUS_REG(0) = 99
MODBUSM_REGGET(0,1,0) '主端從從端讀取數(shù)據(jù)
IF MODBUS_REG(0) <> i THEN '判斷MODBUSM_REGGET(0,1,0)是否讀取成功
PRINT "modbus_reg(0)=" MODBUS_REG(0), "modbusm_state=" MODBUSM_STATE
ENDIF
NEXT
WEND
END
從端程序
ADDRESS= 1 '從端站號
MODBUS_REG(0)= 0
WHILE 1
IF MODBUS_REG(0) <> 0 THEN
PRINT MODBUS_REG(0)
ENDIF
WEND
END
運行效果:
與網(wǎng)口通訊例程相同,主端先將數(shù)據(jù)傳給從端,修改主站數(shù)據(jù)后,再從從端獲取數(shù)據(jù),獲取數(shù)據(jù)成功,IF條件不滿足,打印不執(zhí)行。
從端接受來自主端的數(shù)據(jù),改變了MODBUS_REG(0)的值,并循環(huán)打印。
正運動技術(shù)運動控制器MODBUS通訊就講到這里,更多學(xué)習(xí)視頻及圖文詳解請關(guān)注我們的公眾號“ 正運動小助手 ”。
本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。
標簽:
上一篇:圖爾克堅固型LTE直線位移傳感器
中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。