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