c#发展

注册

 

发新话题 回复该主题

快速入门正运动技术运动控制器自定义通讯 [复制链接]

1#

控制器的串口和网口默认使用MODBUS协议通讯,若对端设备不支持MODBUS协议,可开启自定义通讯模式(无协议)通讯。

串口和网口均可开启自定义通讯。

串口和网口自定义通讯的开启方法不同,均使用指令开启自定义通讯,读写通道数据所用的读写指令是相同的。

串口使用SETCOM指令开启自定义通讯,网口使用OPEN#开启自定义通讯,选择正确的PORT通道开启通讯。

串口和网口自定义通讯读写指令:

读取指令:GET#

发送指令:PRINT#和PUTCHAR#

本文测试举例的产品是正运动技术的一款快速开发16轴的运动控制系统的ZMC16独立型脉冲运动控制器。

在正式学习之前,我们先来介绍ZMC16控制器。其支持多达24轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;采用优化的网络通讯协议可以实现实时的运动控制。

ZMC16通过ZDevelop开发环境来调试,ZDevelop是一个很方便的编程、编译和调试环境。应用程序还可以使用VC,VB,VS,C++Builder,C#,等软件来开发。调试时可以ZDevelop软件同时连接到控制器,程序运行时需要动态库zmotion.dll。

ZMC16具有16个轴,可支持多达24个虚拟轴。ZMC16可以通过扩展模块来扩展轴。

ZMC16板上自带24+15个通用输入口,8+15个通用输出口(前15轴另带1个输入口,2个输出口),2个0-10VAD,2个0-l0VDA。

ZMC16带1个RS22串口,1个RS,1个RS,1个以太网接口。

ZMC16带一个CAN总线接口,支持通过ZCAN协议来连接扩展模块。

ZMC16带一个U盘接口。

每轴输出脉冲频率可达8MHz。

以下是本文的主要内容。

一串口自定义通讯(无协议)1.开启方法

开启自定义串口通讯需要选择port编号,默认RS22为port0,RS为port1,使用指令将port配置为自定义串口通讯模式。

SETCOM指令除了可以配置串口的通讯基本参数外,还可以选择参数配置通讯协议,开启自串口定义通讯模式将mode=0无协议模式,填写串口基本参数和开启的port编号。

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

开启示例:

RS22(PORT0):SETCOM(,8,1,0,0,0,2,)

RS(PORT1):SETCOM(,8,1,0,1,0,2,)

2.读写方法

网口或串口自定义通讯采用的指令相同。

自定义通道中读取字符:GET#

自定义通道中发送字符:PRINT#、PUTCHAR#

两个指令一次只能发送一个数据,若要发送多个数据,可采用数组。PRINT#与PUTCHAR#的区别是前者发送的数据为字符串,一次只能发送一个数据,发送的数组为ASCII码;后者均为ASCII码。

(1)GET#

语法1:GET#PORT,VARIABLE

语法2:GET#PORT,ARRAY[(startindex)][,maxchares]

语法:charesget=GET#PORT,VARIABLE

语法4:charesget=GET#PORT,ARRAY[(startindex)][,maxchares]

port:通道号

variable:存放的变量名

startindex:存放数组的起始地址

maxchares:存放的最多数量

语法1、2没有读取到会阻塞,这个函数一般在多任务里面进行调用。

语法、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一次发送一个字符串

()PUTCHAR#

语法1:PUTCHAR#PORT,字符

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

port:通道号

index:开始输出的位置

numes:输出的字节个数,二进制方式

例一:发送字符为ASCII码,不能直接发送字符串

PUTCHAR#11,tempchar一次可发送多个字符,逗号隔开

例二:发送数组为ASCII码

PUTCHAR#11,Data一次发送一个字符串

.通讯例程

控制器通过总线开启自定义通讯读取三菱绝对值编码器数据。

二网口自定义通讯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系列控制器以上固件版本;XPLC系列控制器以上固件版本。

TCP在收发数据前,必须和对方建立可靠的连接,然后再传输数据,大大提高了数据通信的可靠性。

UDP在收发数据前,不建立连接,当它想传送时就去抓取来自应用程序的数据,并尽可能快地把它扔到网络上,可能会丢包。UDP程序结构较简单,信息包比较小只有8个字节,TCP的信息包有20个字节。

2.读写方法

读写指令与串口相同。UDP读取时只能使用GET#语法4。

.TCP通讯例程

使用自定义网口通道port11,程序如下。

运行效果:

4.UDP通讯例程

使用自定义网口通道port11,程序如下。

运行效果:

正运动技术运动控制器的自定义通讯就讲到这里,更多学习视频及图文详解请

分享 转发
TOP
发新话题 回复该主题