快速入门 | 篇二十:正运动技术运动控制器MODBUS通讯

运动控制 专栏收录该内容
75 篇文章 9 订阅

  视频教材:《视频教材:正运动技术运动控制器MODBUS通讯


   材料准备

  1.电脑1台

  2.控制器2个

  3.+24V直流电源1个

  4.驱动器+电机若干

  5.交换机1个

  6.控制器接线端子若干

  7.网线若干

  8.连接线若干

  另:IO设备、扩展模板等根据需求选用。

  

  运动控制

  

  控制器接线配置

   MODBUS

通讯协议简介


  MODBUS协议是一个通用的标准协议,几乎所有的控制设备和智能化仪表都支持MODBUS协议,这样不同厂家的设备之间就可以互相通讯,连接到同一个控制网络。

  MODBUS的串行传输模式分为:RTU模式和ASCII模式,RTU模式通讯传输的数据为二进制数据,ASCII模式通讯传输的数据为ASCII码,RTU模式的通讯速率比ASCII模式快。

  MODBUS发展至今包含好几种协议模式:控制器的串口和网口的默认协议均为MODBUS协议,其中串口为MODBUS_RTU协议,网口为MODBUS_TCP协议。

  控制器支持MODBUS_RTU模式的串口:RS232、RS485、RS422,当从串口接收到数据时,会直接根据报文中的数据进行控制。

  控制器支持的网口协议MODBUS_TCP接口:EtherNET网口。

  网口主要用于与PC与人机界面通讯。

  控制器的串口和网口在 MODBUS协议下读写数据,使用MODBUS相关指令读写,数据保存在MODBUS寄存器中传递。也可以通过指令将串口或网口配置为无协议模式,采用自定义通讯指令读写数据。

  ZMC316 系列脉冲型控制器各接口配置如下:

  通讯接口包含RS232,RS485,RS422,以太网,U盘,CAN接口。

  

  运动控制

  

  自带16个脉冲轴,面板上包含15个脉冲接口和3个编码器接口,第16个脉冲轴由OUT输出口控制。

  支持使用扩展模块扩展至24个脉冲轴,支持多达24轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;采用优化的网络通讯协议可以实现实时的运动控制。

  应用程序可以使用ZDevelop软件或VC、VB、VS、C++、LabVIEW、C#等软件来开发。

   01    三类串口说明

  RS232串口常用于连接PC或人机界面

  RS485串口常用于与控制装置和智能仪表的通讯控制

  RS422串口只有个别型号控制器才有此接口

   RS232

  控制器的RS232接口可以做MODBUS主站或从站,支持1个主站发送数据,1个从站接收数据。做主站时,可连接驱动器、变频器、温控仪等,进行数据读出与写入的控制。做从站时,可连接人机界面,用来监控运行状态,常用于连接PC或人机界面。

  控制器的RS232接口采用DB9公头,使用相应的连接线连接两个设备。

  

  运动控制

  运动控制

  

  RS232的标准接线只需要三根线即可,2根数据信号TXD和RXD,1根地线EGND,数据信号TXD与RXD交叉连接,再将EGND连到一起。

  接线参考如下:

  

  运动控制

  

  RS485

  主要提供主/从站的多台通讯设备联机,理论上支持128个节点。做主站时,可连接驱动器、变频器、温控仪等,进行数据读出与写入的控制;做从站时,能与PLC通讯,可连接人机界面,用来监控运行状态。

  

  运动控制

  

  RS485接口采用差分传输方式,通过判断A与B之间的电压差来确定是高电平或低电平。

  

  运动控制

  

  控制器的RS485接口采用了简易接线方式,如下图所示,控制器的485A、485B、EGND地线, 分别接第一个从站的A、B、地线, 然后再接第二个从站的A、B、地线(A 接 A, B 接 B,信号共地),并且控制器和最后一个从站的485A 和485B 要并联120 欧电阻防止信号反射,线缆需要使用屏蔽双绞线,避免信号干扰,每个节点支线的距离要小于3m。

  

  运动控制

  

  RS422

  控制器的RS422接口可以做MODBUS 主站或从站,支持1发10收。

  控制器的RS422接口采用了简易接线方式,为四线制,接线时需要接5根线,RX+/RX-(接收信号)、TX+/TX- (发送信号)、一根信号地线。

  控制器的RS422接口相比RS485和RS232,布线成本高,接线容易弄错,包含422接口的控制器型号很少。

  

  运动控制

  运动控制

  

   02   串口参数

  连接串口使用:串口通常可选RS232串口或RS485串口,不管哪种串口,除了端口号和接线方法有所不同,默认参数与操作指令都是相同的。

  串口默认参数为:波特率38400,数据位8,停止位1,校验位无,采用SETCOM指令配置串口参数。控制器重新上电后,SETCOM参数会还原成默认值,所以请在程序开头写SETCOM设置。

  控制器所有串口的MODBUS协议站号ADDRESS为1-127,缺省=1。

  在一个MODBUS网络上的所有设备都必须选择相同的传输模式和串口参数,否则无法通讯。

  控制器默认PORT0(COM0)为RS232串口,PORT1(COM1)为RS485串口,PORT2(COM2)为RS422串口,支持在线命令窗口发送?*setcom打印查看,或在“控制器状态”窗口查看。

  SETCOM指令除了可以配置串口的通讯基本参数外,还可以选择参数配置通讯协议,设置控制器为主端设备还是从端设备,默认为从端,还可以开启自定义通讯模式(即mode=0无协议模式)。

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

  

  运动控制

  

  mode参数选择协议:

  1.与触摸屏通讯时,mode参数选择协议:4

  Port0:setcom(9600,8,1,0,0,4,2,1000)

  Port1:setcom(9600,8,1,0,1,4,2,1000)

  2.控制器通过RS485做主站时,mode参数选择协议:14

  Port1:setcom(38400,8,1,0,1,14,2,1000)

   03  

网口参数

  控制器网口支持MODBUS-TCP协议,出厂默认IP地址为192.168.0.11,可使用IP_ADDRESS指令修改IP地址或在修改IP地址窗口修改,修改一次永久生效。

  控制器至少包含2个网口通道,可在在线命令发送?*port打印查看,如下图,网口的端口号为502。

  

  运动控制

  

  ZMC432通道

  

  运动控制

  

  ZMC316通道

  不同的控制器可通过网口互联,EtherNET网线接口只有一个,可使用交换机,网口互联的前提是两个控制器均有CONNECT通道,用MODBUSM_DES2指令开启连接。

   04  

串口/网口读写

  MODBUS通讯通过功能码告诉被寻址到的终端执行何种功能,如运行命令、读取监控状态、修改参数、读取参数等,MODBUS协议制定了相关的功能码。

  

  运动控制

  

  控制器也可直接使用MODBUS通讯功能码,为方便使用,将一些常用的功能码直接封装为Basic指令,如下表Basic指令对应功能码。

  

  运动控制

  

  串口和网口通讯的连接方法不同,读写都是使用同一套指令,数据由MODBUS寄存器存储。

  1.MODBUS寄存器

  MODBUS通讯的数据使用MODBUS寄存器存储,控制器的MODBUS寄存器符合MODBUS标准通讯协议,分为位寄存器和字寄存器两类。

  位寄存器:MODBUS_BIT(布尔型)。

  字寄存器:包含MODBUS_REG(16位整型)、MODBUS_LONG(32位整型)、MODBUS_IEEE(32位浮点型)、MODBUS_STRING(8位字节型)。

  控制器中MODBUS字寄存器占用同一片系统变量空间,其中一个LONG占用两个REG地址,一个IEEE也占用两个REG地址,使用时要注意错开字寄存器编号地址。

  所以要注意MODBUS_REG、MODBUS_LONG、MODBUS_IEEE地址在用户应用程序中不能重叠。

  

  运动控制

  

  控制器的MODBUS存储空间安排如下:

  

  运动控制

  运动控制

  

  2.MODBUS读写相关指令

  

  运动控制

  

  3.MODBUS读/写语法格式相同,如下所示:

  MODBUSM_REGGET (startreg, num, local_reg)

          startreg:对端的寄存器起始编号,从0开始

          num:寄存器个数

          local_reg:从本地系统MODBUS寄存器中取值,起始编号

  MODBUSM_REGSET (startreg, num, local_reg)

          startreg:对端的寄存器起始编号,从0开始

          num:寄存器个数

          local_reg:从本地系统MODBUS寄存器中取值,起始编号

  使用示例:

  MODBUSM_REGGET(0,10,100)     

'把对端位寄存器09复制到通讯本地的寄存器100109

  MODBUSM_REGSET(0,10,100)     '把本地位寄存器100~109设置到通讯对端的寄存器0~9

  4.建立MODBUS通讯

  (1)串口

  MODBUSM_DES (address[,port],[timer],[resendset])

  ADDRESS1 = MODBUSM_DES([port])

          address:对端的modbus协议站号

          port:当前modbus主通讯的port号

          timer:消息超时时间设置,缺省1000ms。

          resendset:超时消息重发设置,0-不重发,1-SEND指令重发,2-SEND与MODBUSM指令都重发。

  (2)网口

  MODBUSM_DES2 (id,port,"desipaddress",[timer],[resendset])

          id:对方控制器的MODBUS从端ID,缺省1

          port:支持两种模式,?*PORT确认通道号及模式

                  ETH时,作为MODBUS_TCP主端通道

                  CONNECT时,做为控制器互联通道

          desipaddress:字符串, 对方控制器的IP地址

          timer:消息超时时间设置,缺省1000ms

          resendset:超时消息重发设置,0-不重发,1-SEND指令超时重发,2-SEND与MODBUSM指令都超时重发。

   05   串口通讯例程

  控制器RS485做主站与从站的通讯。

  工程项目下包含三个文件:

  ModbusRead.bas :建立通讯连接,主站读取从站数据。在线命令RUN开启任务,开启前先停止写入任务,开启语法:RUN "ModbusRead", 1。

  ModbusSet.bas :建立通讯连接,主站数据复制到从站。在线命令RUN开启任务,开启前先停止读取任务,开启语法:RUN "ModbusSet", 2。

  ModbusIni.bas :参数初始化,设置RS485的主从端,从站节点个数等信息。设为上电自动运行任务。

  

  运动控制

  

  例程设置了一个从站,支持设置多个从站,从站数量修改slaveCount参数。

  为了方便观察数据,主站和从站均使用的控制器,将两个控制器通过RS485连接。

  注意主站控制器的RS485需要处于ModbusMaster模式,如下图。从站控制器的RS485需要处于ModbusSlave模式。

  

  运动控制

  

  ModbusIni.bas文件程序

  '************************变量定义*********************

  Global slaveCount

  slaveCount = 1         '从站的数量

  '因为从站地址ADDRESS不能为0, 0为广播地址,所以后面的slaveID是从1开始, 所以数组大小+1

  Global slaveID(slaveCount+1)

  For i = 1 to slaveCount                 '索引从1开始

         slaveID(i)=i                             '从站ID从1开始, 一般由拨码或者从站设置软件设置

  Next

  Global keepReading, modbusErrorStatus, writeSlaveID

  writeSlaveID = 1         '用户可通过PC程序选择要写入哪个从站数据

  keepReading = 1         '持续读取的判断标志变量, 用户不需要修改,用做while循环条件

  modbusErrorStatus = 0         '判断是否通信正常的标志变量

  '************************串口参数设置*********************

  'SETCOM (baudrate,databits,stopbits,parity,port [,mode] [,variable] [,timeout])

  '参数依此为:波特率,数据位,停止位,校验位,串口端口号(默认232端口号0,485端口号为1)

  '后三个缺省参数:MODBUS模式(14代表控制器做主站,默认4为从站),MODBUS寄存器设置(2为缺省, MODBUS寄存器独立, 不和VR或TABLE映射),通信超时阈值

  SETCOM(38400,8,1,0,1,14,2,1000)

  ModbusRead.bas文件程序

  '互斥操作,防止读写同时操作,多个modbus指令同时运行, 会造成通信出错

  '

STOP

"modbusSet.bas"


  

'用做modbus通信的成功标志变量

  modbusErrorStatus = 0 '通讯正常值为

0
,通讯异常值为

1


  while keepReading

      For i = 1 to slaveCount

          MODBUSM_DES(slaveID(i),1)        

 '和从站1通讯

          'MODBUSM_REGGET (0, 8, 10),从站1寄存器0-7的数据复制到主站10-17

          MODBUSM_REGGET(0,8,slaveID(i)*10)        

'获取对端寄存器值

          WAIT UNTIL MODBUSM_STATE <> 1         '等待消息结束

          IF MODBUSM_STATE=0 THEN

              ?slaveID(i),

"号节点通讯正常"

          Else

              ?slaveID(i),

"号节点通讯出错!!!"

              modbusErrorStatus = 1

              

'可以在此处加入用户的错误处理程序

          Endif

          Delay(100) '两个节点之间的通信延时

      Next

  Wend

  ModbusSet.bas文件程序

 

'互斥操作,防止读写同时操作

  keepReading = 0

  STOP "ModbusRead.bas"

  modbusErrorStatus = 0

  '如果取消对从站ID的判断(If), 则需要提前写好所有从站对应的主站寄存器数据

  FOR i = 1 To slaveCount

      IF slaveID(i) = writeSlaveID THEN

'遍历从站节点,writeSlaveID参数选择将主站数据写到哪个从站节点

          MODBUSM_DES(slaveID(i),controllerPort) '建立主从站连接

              

'MODBUSM_REGSET(10, 2, 110),主站寄存器110-111的数据传递给从站1的10-11

              MODBUSM_REGSET(10,2,100 + slaveID(i)*10)

          WAIT UNTIL MODBUSM_STATE <> 1 '等待消息结束

          IF MODBUSM_STATE=0 THEN

              ?slaveID(i),

"号节点通讯正常"

          ELSE

              modbusErrorStatus = 1

              ?slaveID(i),

"号节点通讯出错!!!"

              

'可以在此处加入用户的错误处理程序

          ENDIF

          DELAY(100) '两个节点之间的通信延时

      ENDIF

  NEXT

 

'重新恢复循环读取任务,是否需要取决于应用

  DELAY(3000)

  'RUN

"ModbusRead.bas"


  运行效果

  1.MODBUSM_REGGET读取:读取从站MODBUSM_REG寄存器0-7共8个数据到主站的 MODBUSM_REG寄存器10-17。

  从站数据:

  

  运动控制

  

  主站初始数据均为0,读取完成主站数据:读取了从站的8个数据。

  

  运动控制

  

  2.MODBUSM_REGSET写入:将主站MODBUSM_REG寄存器110-111共2个数据写入从站的 MODBUSM_REG寄存器10-11。

  主站数据:

  

  运动控制

  

  读取完成从站的数据如下:读取了主站的2个数据。

  

  运动控制

  

   06  

网口通讯例程

  采用两个控制器通过交换机网口互联。

  主端控制器IP:192.168.0.11

  从端控制器IP:192.168.0.36

  分别使用ZDevelop软件连接这两个控制器,接线参考如下,采用ETH网口通道5,下载程序后查看运行效果。

  

  运动控制

  

  主端程序

  MODBUS_REG(0)=0

  MODBUSM_des2($1 , 5,

“192.168.0.36”
)

'主端与从端建立连接,控制器IP不能相同


  WHILE 1

          FOR i =0 TO 10

              MODBUS_REG(0) = i

              MODBUSM_REGSET(0,1,0) '主端数据写入从端

              MODBUS_REG(0) = 99

              MODBUSM_REGGET(0,1,0)

'主端从从端读取数据

              IF MODBUS_REG(0) <> i THEN '判断MODBUSM_REGGET(0,1,0)是否读取成功

              PRINT

“modbus_reg(0)=”
MODBUS_REG(0),

"modbusm_state="
MODBUSM_STATE

              ENDIF

          NEXT

  WEND

  END

  从端程序

  ADDRESS=

1
   

  '从端站号

  MODBUS_REG(0)=

0

  WHILE

1

      IF

MODBUS_REG(0) <> 0 THEN

          PRINT

MODBUS_REG(0)

      ENDIF

  WEND

  END

  运行效果:

  主端先将数据传给从端,修改主站数据后,再从从端获取数据,获取数据成功,IF条件不满足,打印不执行。

  从端接受来自主端的数据,改变了MODBUS_REG(0)的值,并循环打印。

   07  

网口互联例程

  采用两个控制器通过交换机网口互联。

  主端控制器IP:192.168.0.11

  从端控制器IP:192.168.0.36

  分别使用ZDevelop软件连接这两个控制器,采用CONNECT互联通道20,必须两个控制器都包含CONNECT通道才可以正常通讯,下载程序后查看运行效果。

  主端程序

  MODBUS_REG(0)=0

  MODBUSM_des2($1 , 20,

“192.168.0.36”
)

'主端与从端建立连接,控制器IP不能相同


  WHILE 1

          FOR i =0 TO 10

              MODBUS_REG(0) = i

              MODBUSM_REGSET(0,1,0) '主端数据写入从端

              MODBUS_REG(0) = 99

              MODBUSM_REGGET(0,1,0)

'主端从从端读取数据

              IF MODBUS_REG(0) <> i THEN '判断MODBUSM_REGGET(0,1,0)是否读取成功

              PRINT

“modbus_reg(0)=”
MODBUS_REG(0),

"modbusm_state="
MODBUSM_STATE

              ENDIF

          NEXT

  WEND

  END

  从端程序

  ADDRESS=

1     '从端站号

  MODBUS_REG(0)=

0

  WHILE

1

      IF

MODBUS_REG(0) <> 0 THEN

          PRINT

MODBUS_REG(0)

      ENDIF

  WEND

  END

  运行效果:

  与网口通讯例程相同,主端先将数据传给从端,修改主站数据后,再从从端获取数据,获取数据成功,IF条件不满足,打印不执行。

  从端接受来自主端的数据,改变了MODBUS_REG(0)的值,并循环打印。

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

正运动小助手
”。

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
8路modbus RTU控制器说明书 产品介绍 本控制器带有8路采集和8路继电器输出,因灵活的使用方式被客户广泛的使用在各个行业及领域。同时带有二次开发协议,方便客户集成到自己的系统中。可以通过串口232发送MODBUS RTU命令,也可以通过RS485发送,方便在标准的触摸屏及组态软件等系统中应用。 技术规格  PCB板尺寸:长(145mm)宽(90mm)高(40mm) [可插拔端子宽是115]  硬件版本号:KMCZE-I8O8-V3.1  软件版本号:KMCZE-I8O8-V1.0T  工作电源:5VDC/12VDC/24VDC/9-28VDC(按订货要求选择一种) 2A  通信方式:DB9接口(串口)/RS485  协议方式:标准的MODBUS-RTU从站协议  信号输入:8路开关量输入  控制通道:8路继电器输出  控制方式:继电器通断(纯开关通断)  最大负载:250VAC/30VDC 10A(每一路都带常开常闭公共)  控制模式:实时控制(发命令控制每一路通断)/延时通断/定次间歇通断 二次开发协议(RS485 MODBUS RTU )  波特率:9600 奇偶校验:0(无) 停止位:1位 控制流:0(无) 全部以16进制发送命令  1、查询输入端口状态(2号命令读开关输入状态,地址:10001-1008) 10001 为X1地址,保存着X1当前状态(第一个开关量采集端口) 10002 为X2地址,保存着X2当前状态(第二个开关量采集端口) 10003 为X3地址,保存着X3当前状态(第三个开关量采集端口) 10004 为X4地址,保存着X4当前状态(第四个开关量采集端口
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

编程小ruo鸡

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值