詳細介紹
ABB/SAMC11POWSAMC11POW57171847
ABB/SAMC11POWSAMC11POW57171847
控制器的串口和網(wǎng)口默認使用MODBUS協(xié)議通訊,若對端設(shè)備不支持MODBUS協(xié)議,可開啟自定義通訊模式(無協(xié)議)通訊。
串口和網(wǎng)口均可開啟自定義通訊。
串口和網(wǎng)口自定義通訊的開啟方法不同,均使用指令開啟自定義通訊,讀寫通道數(shù)據(jù)所用的讀寫指令是相同的。
串口使用SETCOM指令開啟自定義通訊,網(wǎng)口使用OPEN #開啟自定義通訊,選擇正確的PORT通道開啟通訊。
串口和網(wǎng)口自定義通訊讀寫指令:讀取指令:GET #;發(fā)送指令:PRINT #和PUTCHAR #。
本文測試舉例的產(chǎn)品是正運動技術(shù)的一款快速開發(fā)16軸的運動控制系統(tǒng)的ZMC316獨立型脈沖運動控制器。
在正式學習之前,我們先來介紹ZMC316控制器。其支持多達24軸直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實現(xiàn)實時的運動控制。
ZMC316通過ZDevelop開發(fā)環(huán)境來調(diào)試,ZDevelop是一個很方便的編程、編譯和調(diào)試環(huán)境。應(yīng)用程序還可以使用VC,VB, VS, C++Builder, C#,等軟件來開發(fā)。調(diào)試時可以ZDevelop軟件同時連接到控制器,程序運行時需要動態(tài)庫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個以太網(wǎng)接口。
ZMC316帶一個CAN總線接口,支持通過ZCAN協(xié)議來連接擴展模塊。
ZMC316帶一個U盤接口。
每軸輸出脈沖頻率可達8MHz。
3.通訊例程
控制器通過485總線開啟自定義通訊讀取三菱值編碼器數(shù)據(jù)。
'//*****返回數(shù)據(jù)幀中有用的字符串長度為8****
global Dim CmdBuff(10) '發(fā)送命令數(shù)組
global Dim GetBuff(30) '接收的字符串
for i=0 to 29
GetBuff(i)=0
next
global Dim TempChar '接收的一個字節(jié)
TempChar=0
global Dim GetNum '接收字節(jié)個數(shù)
GetNum=0
global sanReturn '任務(wù)完成后的返回值,方便PC讀取
sanReturn=0
SetCom(19200,8,1,2,1,0) '建立485連接
'必須創(chuàng)建新任務(wù),因為Get指令如果得不到數(shù)據(jù),會堵塞所在任務(wù)。
RunTask 5,get_Char
delay (100)
'命令數(shù)組的值根據(jù)從站三菱的自定義通訊的協(xié)議要求寫的
'x01x31x30x32x02x39x31x03x30x32
'目前的從站地址為1,修改從站地址后要修改校驗碼
CmdBuff(0,$01,$31,$30,$32,$02,$39,$31,$03,$30,$32)
PutChar #1,CmdBuff '往485串口發(fā)送數(shù)據(jù)
TICKS=1000
while(1)
if GetNum=14 AND (GetBuff(2)=97 OR GetBuff(2)=65) then
? "485 success"
'把返回數(shù)據(jù)幀的有用內(nèi)容放入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"開始進入接收函數(shù)"
While 1
Get #1,TempChar '接收串口返回字符
print"接收到的字符數(shù)",GetNum TempChar
GetBuff(GetNum)=TempChar
GetNum=GetNum+1
'判斷返回的數(shù)據(jù)楨長度是否正確
if(GetNum=14)Then
exit while '長度超出退出while循環(huán)
endif
Wend
End Sub