视频教材:http://www.zmotion.com.cn/video/yemian/tvideos28.html

  上一节讲了运动控制器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

  运行效果:

  

  

  

  

  正运动技术运动控制器的自定义通讯就讲到这里,更多学习视频及图文详解请关注我们的公众号“正运动小助手”。

  本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

快速入门 | 篇二十一:正运动技术运动控制器自定义通讯相关推荐

  1. 快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  2. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

  3. 快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用​

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  4. 快速入门 | 篇十一: 正运动技术运动控制器中断的应用​

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  5. 学习笔记-CCS-MSP430F5529[快速入门篇二]

    由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...

  6. 快速入门 | 篇十八:正运动技术脉冲型运动控制器的使用​

    视频教程:<正运动技术脉冲型运动控制器的使用> 今天,正运动技术来分享一下,脉冲型运动控制器的使用入门.首先,我们从准备工作讲起,然后依次讲控制器与电脑连接.控制器参数设置.驱动器参数设置 ...

  7. 快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  8. 两轴插补速度怎么给定_快速入门 | 篇十七:运动控制器多轴插补运动指令的使用...

    以下是图文详解 本节内容主要分为三大部分:插补运动.轨迹前瞻以及SP速度指令. 一 插补运动 插补是机床数控系统依照一定方法确定刀具运动轨迹的过程,插补是一个实时进行的数据密化的过程,不论是何种插补算 ...

  9. 快速入门 | 篇十七:运动控制器多轴插补运动指令的使用

    视频教程:<视频教程:运动控制器多轴插补运动指令的使用> 以下是图文详解 本节内容主要分为三大部分:插补运动.轨迹前瞻以及SP速度指令. 一 插补运动 插补是机床数控系统依照一定方法确定刀 ...

  10. Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)

                            <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探 ...

最新文章

  1. 重装云服务器上的系统后的重新部署项目
  2. 深入比特币原理(一)——比特币白皮书总结与点评
  3. mysql 跨服务器 etl_mysql数据库跨服务器查询【需要确定mysql支持FEDERATED ,可以参照文章内容自己配置】...
  4. 随想录(rt-patch和linux)
  5. 20141113--SQL 事务
  6. 论文评审最大流_毕业论文_最大流问题及其应用(7)(喜欢就下吧)
  7. 北理在线作业答案c语言,北理乐学C语言答案,最新.doc
  8. SAP中计划策略11测试
  9. 熟练操作mac系统只需十分钟(Mac新手必看)!!
  10. 来自 Repository 的一丝线索,Domain Model 再重新设计
  11. 机器学习这10年我们能在各自的领域做点什么?
  12. Filebeat自定义index和fields
  13. 数据只有被交换共享,才能创造价值 | 推荐收藏
  14. 树莓派4B WIFI 物理网口设置固定IP方法
  15. linux版印象笔记 for deepin
  16. 程序设计C实验二题目一计算员工周工资
  17. C#获取动态key的json对象的值
  18. css实现图片背景颜色变灰变白
  19. 自签名证书和CA机构颁发的证书的区别
  20. 《Reading Wikipedia to Answer Open-Domain Questions》浅析

热门文章

  1. Unity MMORPG游戏的设计(一)前期简单分析
  2. 怎么用计算机连接电视,电脑怎么连接电视当显示屏用
  3. 机器学习中的忒修斯之船:那些“愚弄”专家的著名悖论
  4. 对Python【返回函数与闭包】的一点思考
  5. 很好用的搜网盘资源工具。很多都能找到
  6. OSG 单体化如何生成
  7. php有个schost.exe_window_XP主要15个系统进程,  1.svchost.exe    进程文 - phpStudy...
  8. android系统键盘开关
  9. 最新parity 以太坊客户端2.7.2稳定版配置参数说明
  10. Parallels Desktop的windows虚拟机无法打开iso文件