時間:2020-12-31 09:58:20來源:正運動技術
視頻教材:《正運動技術運動控制器自定義通訊》
上一節講了運動控制器MODBUS通訊,今天我們來學習一下,運動控制器的自定義通訊。
控制器的串口和網口默認使用MODBUS協議通訊,若對端設備不支持MODBUS協議,可開啟自定義通訊模式(無協議)通訊。
串口和網口均可開啟自定義通訊。
串口和網口自定義通訊的開啟方法不同,均使用指令開啟自定義通訊,讀寫通道數據所用的讀寫指令是相同的。
串口使用SETCOM指令開啟自定義通訊,網口使用OPEN #開啟自定義通訊,選擇正確的PORT通道開啟通訊。
串口和網口自定義通訊讀寫指令:讀取指令:GET #;發送指令:PRINT #和PUTCHAR #。
本文測試舉例的產品是正運動技術的一款快速開發16軸的運動控制系統的ZMC316獨立型脈沖運動控制器。
在正式學習之前,我們先來介紹ZMC316控制器。其支持多達24軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等;采用優化的網絡通訊協議可以實現實時的運動控制。
ZMC316通過ZDevelop開發環境來調試,ZDevelop是一個很方便的編程、編譯和調試環境。應用程序還可以使用VC,VB, VS, C++Builder, C#,等軟件來開發。調試時可以ZDevelop軟件同時連接到控制器,程序運行時需要動態庫zmotion. dll。
ZMC316具有16個軸,可支持多達24個虛擬軸。ZMC316可以通過擴展模塊來擴展軸。
ZMC316板上自帶24+15個通用輸入口,8+15個通用輸出口(前15軸另帶1個輸入口,2個輸出口),2個0-10V AD, 2個0-l0V DA。
ZMC316帶1個RS232串口,1個RS485,1個RS422,1個以太網接口。
ZMC316帶一個CAN總線接口,支持通過ZCAN協議來連接擴展模塊。
ZMC316帶一個U盤接口。
每軸輸出脈沖頻率可達8MHz。
ZMC316接線圖
以下是本文的主要內容。
壹 串口自定義通訊(無協議)
1.開啟方法
開啟自定義串口通訊需要選擇port編號,默認RS232為port0,RS485為port1,使用指令將port配置為自定義串口通訊模式。
SETCOM指令除了可以配置串口的通訊基本參數外,還可以選擇參數配置通訊協議,開啟自串口定義通訊模式將mode=0無協議模式,填寫串口基本參數和開啟的port編號。
語法:SETCOM (baudrate,databits,stopbits,parity,port[,mode] [,variable] [,timeout])
開啟示例:
RS232(PORT0):SETCOM (38400,8,1,0,0,0,2,1000)
RS485(PORT1):SETCOM (38400,8,1,0,1,0,2,1000)
2.讀寫方法
網口或串口自定義通訊采用的指令相同。
自定義通道中讀取字符:GET #
自定義通道中發送字符:PRINT #、PUTCHAR #
兩個指令一次只能發送一個數據,若要發送多個數據,可采用數組。PRINT #與PUTCHAR #的區別是前者發送的數據為字符串,一次只能發送一個數據,發送的數組為ASCII碼;后者均為ASCII碼。
(1)GET #
語法1:GET #PORT, VARIABLE
語法2:GET #PORT, ARRAY[(startindex)] [,maxchares]
語法3:charesget = GET #PORT, VARIABLE
語法4:charesget = GET #PORT, ARRAY[(startindex)] [,maxchares]
port:通道號
variable:存放的變量名
startindex:存放數組的起始地址
maxchares:存放的最多數量
語法1、2沒有讀取到會阻塞,這個函數一般在多任務里面進行調用。
語法3、4會返回讀取到的字節數。
串口和網口的TCP通訊四種語法均可使用,網口的UDP通訊時使用語法4, 采用數組來接收,數組長度不要比一次的UDP包長度小。
例一:讀取字符
GET # 11,tempchar '從自定義網口通道11獲取單個字符到tempchar
讀取結果:
例二:讀取到數組
GET #11,array(0),5 '一次獲取最多5字符到數組,后收到的數據覆蓋之前的數據
讀取結果:
例三:讀取到數組(UDP模式下只能使用此語法)
CHARES=GET #11, Data, 10 '從通道11獲取數據到數組,讀取數據長度設為10
讀取結果:
(2)PRINT #
PRINT # PORT, "字符串"
port:通道號
例一:發送字符串
PRINT # 11, tempchar '一次發送一個字符串
例二:發送數組為ASCII碼
PRINT # 11, Data '一次發送一個字符串
(3)PUTCHAR #
語法1:PUTCHAR # PORT, 字符
語法2:PUTCHAR # PORT, ARRAY(index, numes)
port:通道號
index:開始輸出的位置
numes:輸出的字節個數, 二進制方式
例一:發送字符為ASCII碼,不能直接發送字符串
PUTCHAR # 11, tempchar '一次可發送多個字符,逗號隔開
例二:發送數組為ASCII碼
PUTCHAR # 11, Data '一次發送一個字符串
3.通訊例程
控制器通過485總線開啟自定義通訊讀取三菱絕對值編碼器數據。
'//*****返回數據幀中有用的字符串長度為8****
global Dim CmdBuff(10) '發送命令數組
global Dim GetBuff(30) '接收的字符串
for i=0 to 29
GetBuff(i)=0
next
global Dim TempChar '接收的一個字節
TempChar=0
global Dim GetNum '接收字節個數
GetNum=0
global sanReturn '任務完成后的返回值,方便PC讀取
sanReturn=0
SetCom(19200,8,1,2,1,0) '建立485連接
'必須創建新任務,因為Get指令如果得不到數據,會堵塞所在任務。
RunTask 5,get_Char
delay (100)
'命令數組的值根據從站三菱的自定義通訊的協議要求寫的
'\x01\x31\x30\x32\x02\x39\x31\x03\x30\x32
'目前的從站地址為1,修改從站地址后要修改校驗碼
CmdBuff(0,$01,$31,$30,$32,$02,$39,$31,$03,$30,$32)
PutChar #1,CmdBuff '往485串口發送數據
TICKS=1000
while(1)
if GetNum=14 AND (GetBuff(2)=97 OR GetBuff(2)=65) then
? "485 success"
'把返回數據幀的有用內容放入VR寄存器中,方便PC讀取
for i = 0 to 7
VR(100+i) = GetBuff(i+3)
next
sanReturn=1
exit while
elseif TICKS<0 then
? "ERROR"
STOPTASK 5
exit while
endif
wend
end
global Sub Get_Char()
print"開始進入接收函數"
While 1
Get #1,TempChar '接收串口返回字符
print"接收到的字符數",GetNum TempChar
GetBuff(GetNum)=TempChar
GetNum=GetNum+1
'判斷返回的數據楨長度是否正確
if(GetNum=14)Then
exit while '長度超出退出while循環
endif
Wend
End Sub
貳 網口自定義通訊
1.開啟方法
開啟自定義通訊時要填入端口編號,首先要查看控制器自定義通訊的通道號,可在在線命令發送?*port打印查看,如下圖,ECUSTOM為自定義網口通道。
使用網口連接上控制器之后打印的各通道狀態如下,未使用的通道狀態為0,已使用的通道狀態為1對于串口,串口通道狀態不管有沒有使用始終為1。
第三個通道為ETH網口通道,被ZDevelop軟件占用。
開啟網口自定義通訊,選擇port11,此時狀態如下:
網口自定義通訊使用OPEN #指令開啟,通過此指令選擇主從端。
OPEN #PORT, "mode", portnum [, ipaddress]
port:通訊通道,參見PORT描述,選擇自定義網絡通道。
mode:訊主從,“TCP_CLIENT”-從,“TCP_SERVER”–主,“UDP_CLIENT”-UDP從,“UDP_SERVER”–UDP主。
portnum:TCP或UDP端口號, 主端為本地端口號, 從端為對方端口號。
ipaddress:對方IP地址,字符串,從端的時候要提供。
UDP_SERVER必須先接收對方的數據,才能發送回數據(除非用PORT_TARGET先強制指定對方)。
UDP_CLIENT本地端口號隨機,必須先發送給對方,對方才能知道端口號,此模式時不是指定對方的包會丟棄掉。
UDP自定義通訊需要4系列控制器20170628以上固件版本;XPLC系列控制器 20170702以上固件版本。
TCP在收發數據前,必須和對方建立可靠的連接,然后再傳輸數據,大大提高了數據通信的可靠性。
UDP在收發數據前,不建立連接,當它想傳送時就去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上,可能會丟包。UDP程序結構較簡單,信息包比較小只有8個字節,TCP的信息包有20個字節。
2.讀寫方法
讀寫指令與串口相同。UDP讀取時只能使用GET #語法4。
3.TCP通訊例程
使用自定義網口通道port11,程序如下。
OPEN #11, "TCP_SERVER",945 '使用自定義網口通道2,控制器作為主端,端口號945
GLOBAL tempchar
GLOBAL CONST datamax=20 '定義數組空間的大小
GLOBAL Data(datamax) '定義數組
GLOBAL datanum '定義數組編號
datanum=0
ClearData() '清空數組
WHILE 1
tempchar = 0 '清除之前的字符
GET #11,tempchar '獲取單個字符到tempchar
PRINT datanum,tempchar '打印出字符的ASCII碼
Data(datanum) = tempchar '保存到數組
datanum = datanum + 1
IF datanum = datamax THEN '超過數組空間,清空數組
datanum = 0
ClearData()
ENDIF
IF tempchar = 59 THEN '號終止位;
PRINT #11,"ok" '發送字符串
ENDIF
WEND
END
GLOBAL SUB ClearData()
FOR i = 0 TO datamax-1 '清除數組空間內容
Data(i) = 0
NEXT
END SUB
運行效果:
4.UDP通訊例程
使用自定義網口通道port11,程序如下。
OPEN #11, "UDP_SERVER",945 '使用自定義網口通道2,控制器作為主端,端口號945
GLOBAL CHARES
GLOBAL CONST datamax=10 '定義數組空間的大小
GLOBAL Data(datamax) '定義數組
ClearData() '清空數組
WHILE 1
CHARES=GET #11, Data, 10 '從通道11獲取數據到數組,數據長度設為10
IF CHARES > 0 THEN
Data(CHARES) = 0 '設置結束0
PRINT Data '打印字符串
ENDIF
WEND
END
GLOBAL SUB ClearData()
FOR i = 0 TO datamax-1 '清除數組空間內容
Data(i) = 0
NEXT
END SUB
運行效果:
正運動技術運動控制器的自定義通訊就講到這里,更多學習視頻及圖文詳解請關注我們的公眾號“正運動小助手”。
本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-06-06
2025-05-19
2025-04-30
2025-04-11
2025-04-08
2025-03-31