技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > ?快速入門|篇二十一:正運(yùn)動技術(shù)運(yùn)動控制器自定義通訊

?快速入門|篇二十一:正運(yùn)動技術(shù)運(yùn)動控制器自定義通訊

時(shí)間:2020-12-31 09:58:20來源:正運(yùn)動技術(shù)

導(dǎo)語:?

  視頻教材:《正運(yùn)動技術(shù)運(yùn)動控制器自定義通訊》    

  上一節(jié)講了運(yùn)動控制器MODBUS通訊,今天我們來學(xué)習(xí)一下,運(yùn)動控制器的自定義通訊。

  控制器的串口和網(wǎng)口默認(rèn)使用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)品是正運(yùn)動技術(shù)的一款快速開發(fā)16軸的運(yùn)動控制系統(tǒng)的ZMC316獨(dú)立型脈沖運(yùn)動控制器。

  在正式學(xué)習(xí)之前,我們先來介紹ZMC316控制器。其支持多達(dá)24軸直線插補(bǔ)、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動控制。

  ZMC316通過ZDevelop開發(fā)環(huán)境來調(diào)試,ZDevelop是一個(gè)很方便的編程、編譯和調(diào)試環(huán)境。應(yīng)用程序還可以使用VC,VB, VS, C++Builder, C#,等軟件來開發(fā)。調(diào)試時(shí)可以ZDevelop軟件同時(shí)連接到控制器,程序運(yùn)行時(shí)需要動態(tài)庫zmotion. dll。

  

  運(yùn)動控制

  

  ZMC316具有16個(gè)軸,可支持多達(dá)24個(gè)虛擬軸。ZMC316可以通過擴(kuò)展模塊來擴(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總線接口,支持通過ZCAN協(xié)議來連接擴(kuò)展模塊。

  ZMC316帶一個(gè)U盤接口。

  每軸輸出脈沖頻率可達(dá)8MHz。

  

  運(yùn)動控制

  

  ZMC316接線圖

  以下是本文的主要內(nèi)容。

                               串口自定義通訊(無協(xié)議)    

  1.開啟方法

  開啟自定義串口通訊需要選擇port編號,默認(rèn)RS232為port0,RS485為port1,使用指令將port配置為自定義串口通訊模式。

  SETCOM指令除了可以配置串口的通訊基本參數(shù)外,還可以選擇參數(shù)配置通訊協(xié)議,開啟自串口定義通訊模式將mode=0無協(xié)議模式,填寫串口基本參數(shù)和開啟的port編號。

  語法:SETCOM (baudrate,databits,stopbits,parity,port[,mode] [,variable] [,timeout])

  

  運(yùn)動控制

  

  開啟示例:

  RS232(PORT0):SETCOM (38400,8,1,0,0,0,2,1000)

  RS485(PORT1):SETCOM (38400,8,1,0,1,0,2,1000)

  2.讀寫方法

  網(wǎng)口或串口自定義通訊采用的指令相同。

  自定義通道中讀取字符:GET #

  自定義通道中發(fā)送字符:PRINT #、PUTCHAR #

  兩個(gè)指令一次只能發(fā)送一個(gè)數(shù)據(jù),若要發(fā)送多個(gè)數(shù)據(jù),可采用數(shù)組。PRINT #與PUTCHAR #的區(qū)別是前者發(fā)送的數(shù)據(jù)為字符串,一次只能發(fā)送一個(gè)數(shù)據(jù),發(fā)送的數(shù)組為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:存放數(shù)組的起始地址

      maxchares:存放的最多數(shù)量

  語法1、2沒有讀取到會阻塞,這個(gè)函數(shù)一般在多任務(wù)里面進(jìn)行調(diào)用。

  語法3、4會返回讀取到的字節(jié)數(shù)。

  串口和網(wǎng)口的TCP通訊四種語法均可使用,網(wǎng)口的UDP通訊時(shí)使用語法4, 采用數(shù)組來接收,數(shù)組長度不要比一次的UDP包長度小。

  例一:讀取字符

  GET # 11,tempchar '從自定義網(wǎng)口通道11獲取單個(gè)字符到tempchar

  讀取結(jié)果:

  

  運(yùn)動控制

  

  例二:讀取到數(shù)組

  GET #11,array(0),5 '一次獲取最多5字符到數(shù)組,后收到的數(shù)據(jù)覆蓋之前的數(shù)據(jù)

  讀取結(jié)果:

  

  運(yùn)動控制

  

  例三:讀取到數(shù)組(UDP模式下只能使用此語法)

  CHARES=GET #11, Data, 10 '從通道11獲取數(shù)據(jù)到數(shù)組,讀取數(shù)據(jù)長度設(shè)為10

  讀取結(jié)果:

  

  運(yùn)動控制

  

               (2)PRINT #    

  PRINT # PORT, "字符串"

  port:通道號

  例一:發(fā)送字符串

  PRINT # 11, tempchar '一次發(fā)送一個(gè)字符串

  

  運(yùn)動控制

  

  例二:發(fā)送數(shù)組為ASCII碼

  PRINT # 11, Data '一次發(fā)送一個(gè)字符串

  

  運(yùn)動控制

  

               (3)PUTCHAR #    

  語法1:PUTCHAR # PORT, 字符

  語法2:PUTCHAR # PORT, ARRAY(index, numes)

  port:通道號

  index:開始輸出的位置

  numes:輸出的字節(jié)個(gè)數(shù), 二進(jìn)制方式

  例一:發(fā)送字符為ASCII碼,不能直接發(fā)送字符串

  PUTCHAR # 11, tempchar '一次可發(fā)送多個(gè)字符,逗號隔開

  

  運(yùn)動控制

  

  例二:發(fā)送數(shù)組為ASCII碼

  PUTCHAR # 11, Data '一次發(fā)送一個(gè)字符串

  

  運(yùn)動控制

  

  3.通訊例程

  控制器通過485總線開啟自定義通訊讀取三菱絕對值編碼器數(shù)據(jù)。

  '//*****返回?cái)?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 '接收的一個(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ù),會堵塞所在任務(wù)。

  RunTask 5,get_Char

  delay (100)

  '命令數(shù)組的值根據(jù)從站三菱的自定義通訊的協(xié)議要求寫的

  '\x01\x31\x30\x32\x02\x39\x31\x03\x30\x32

  '目前的從站地址為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"開始進(jìn)入接收函數(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

                               網(wǎng)口自定義通訊    

  1.開啟方法

  開啟自定義通訊時(shí)要填入端口編號,首先要查看控制器自定義通訊的通道號,可在在線命令發(fā)送?*port打印查看,如下圖,ECUSTOM為自定義網(wǎng)口通道。

  

  運(yùn)動控制

  

  使用網(wǎng)口連接上控制器之后打印的各通道狀態(tài)如下,未使用的通道狀態(tài)為0,已使用的通道狀態(tài)為1對于串口,串口通道狀態(tài)不管有沒有使用始終為1。

  第三個(gè)通道為ETH網(wǎng)口通道,被ZDevelop軟件占用。

  

  運(yùn)動控制

  

  開啟網(wǎng)口自定義通訊,選擇port11,此時(shí)狀態(tài)如下:

  

  運(yùn)動控制

  

  網(wǎng)口自定義通訊使用OPEN #指令開啟,通過此指令選擇主從端。

  OPEN #PORT, "mode", portnum [, ipaddress]

      port:通訊通道,參見PORT描述,選擇自定義網(wǎng)絡(luò)通道。

      mode:訊主從,“TCP_CLIENT”-從,“TCP_SERVER”–主,“UDP_CLIENT”-UDP從,“UDP_SERVER”–UDP主。

      portnum:TCP或UDP端口號, 主端為本地端口號, 從端為對方端口號。

      ipaddress:對方IP地址,字符串,從端的時(shí)候要提供。

      UDP_SERVER必須先接收對方的數(shù)據(jù),才能發(fā)送回?cái)?shù)據(jù)(除非用PORT_TARGET先強(qiáng)制指定對方)。

      UDP_CLIENT本地端口號隨機(jī),必須先發(fā)送給對方,對方才能知道端口號,此模式時(shí)不是指定對方的包會丟棄掉。

      UDP自定義通訊需要4系列控制器20170628以上固件版本;XPLC系列控制器 20170702以上固件版本。

      TCP在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接,然后再傳輸數(shù)據(jù),大大提高了數(shù)據(jù)通信的可靠性。

      UDP在收發(fā)數(shù)據(jù)前,不建立連接,當(dāng)它想傳送時(shí)就去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上,可能會丟包。UDP程序結(jié)構(gòu)較簡單,信息包比較小只有8個(gè)字節(jié),TCP的信息包有20個(gè)字節(jié)。

  2.讀寫方法

  讀寫指令與串口相同。UDP讀取時(shí)只能使用GET #語法4。

  3.TCP通訊例程

  使用自定義網(wǎng)口通道port11,程序如下。

  OPEN #11, "TCP_SERVER",945 '使用自定義網(wǎng)口通道2,控制器作為主端,端口號945

  GLOBAL tempchar

  GLOBAL CONST datamax=20 '定義數(shù)組空間的大小

  GLOBAL Data(datamax) '定義數(shù)組

  GLOBAL datanum '定義數(shù)組編號

  datanum=0

  ClearData() '清空數(shù)組

  WHILE 1

      tempchar = 0 '清除之前的字符

      GET #11,tempchar '獲取單個(gè)字符到tempchar

      PRINT datanum,tempchar '打印出字符的ASCII碼

      Data(datanum) = tempchar '保存到數(shù)組

      datanum = datanum + 1

      IF datanum = datamax THEN '超過數(shù)組空間,清空數(shù)組

          datanum = 0

          ClearData()

      ENDIF

      IF tempchar = 59 THEN '號終止位;

              PRINT #11,"ok" '發(fā)送字符串

          ENDIF

     WEND

  END

  GLOBAL SUB ClearData()

      FOR i = 0 TO datamax-1 '清除數(shù)組空間內(nèi)容

          Data(i) = 0

      NEXT

  END SUB

  運(yùn)行效果:

  

  運(yùn)動控制

  運(yùn)動控制

  

  4.UDP通訊例程

  使用自定義網(wǎng)口通道port11,程序如下。

  OPEN #11, "UDP_SERVER",945 '使用自定義網(wǎng)口通道2,控制器作為主端,端口號945

  GLOBAL CHARES

  GLOBAL CONST datamax=10 '定義數(shù)組空間的大小

  GLOBAL Data(datamax) '定義數(shù)組

  ClearData() '清空數(shù)組

  WHILE 1

      CHARES=GET #11, Data, 10 '從通道11獲取數(shù)據(jù)到數(shù)組,數(shù)據(jù)長度設(shè)為10

      IF CHARES > 0 THEN

          Data(CHARES) = 0 '設(shè)置結(jié)束0

          PRINT Data '打印字符串

      ENDIF

  WEND

  END

  GLOBAL SUB ClearData()

      FOR i = 0 TO datamax-1 '清除數(shù)組空間內(nèi)容

          Data(i) = 0

      NEXT

  END SUB

  運(yùn)行效果:

  

  運(yùn)動控制

  運(yùn)動控制

  

  正運(yùn)動技術(shù)運(yùn)動控制器的自定義通訊就講到這里,更多學(xué)習(xí)視頻及圖文詳解請關(guān)注我們的公眾號“正運(yùn)動小助手”。

  本文由正運(yùn)動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:干貨集錦 | 旋轉(zhuǎn)軸定位精度五...

下一篇:2020收官之作:C5X-10新增支...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號