焊接资讯

您现在的位置是:首页 > 焊条 > 正文

焊条

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

工品易达2022-10-19焊条47

音频教科书:《音频教科书:正体育运动控制技术体育运动磁盘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_TCPUSB:EtherNET达维季夫卡。

达维季夫卡主要就用作与PC与设计模式通信。

磁盘的以太网和达维季夫卡在 MODBUS协定下读写统计数据,使用MODBUS相关指令读写,统计数据保存在MODBUS寄存器中传递。也能通过指令将以太网或达维季夫卡实用性为无协定商业模式,采用自定义通信指令读写统计数据。

ZMC316 系列脉冲型磁盘各USB实用性如下:

通信USB包涵RS232,RS485,RS422,以太网,U盘,CANUSB。

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

全力支持使用扩充模块扩充至24个脉冲轴,全力支持多达24轴直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;采用优化的互联网通信协定能实现实时的体育运动掌控。

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

01三类以太网说明

RS232以太网常用作相连PC或设计模式

RS485以太网常用作与掌控装置和智能仪表板的通信掌控

RS422以太网只有个别型号磁盘才有此USB

RS232

磁盘的RS232USB能做MODBUS主站或从站,全力支持1个主站发送统计数据,1个从站转交统计数据。做主站时,可相连磁盘、变频器、温控仪等,展开统计数据读出与写入的掌控。做从站时,可相连设计模式,用来监控运行状态,常用作相连PC或设计模式。

磁盘的RS232USB采用DB9公头,使用相应的连南桥相连两个电子设备。

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

南桥参考如下:

RS485

主要就提供主/从站的多台通信电子设备联机,理论上全力支持128个节点。做主站时,可相连磁盘、变频器、温控仪等,展开统计数据读出与写入的掌控;做从站时,能与PLC通信,可相连设计模式,用来监控运行状态。

RS485USB采用差分统计数据传输方式,通过判断A与B间的电压差来确定是高电平或低电平。

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

RS422

磁盘的RS422USB能做MODBUS 主站或从站,全力支持1发10收。

磁盘的RS422USB采用了简易南桥方式,为四线制,南桥时需要接5根线,RX+/RX-(转交信号)、TX+/TX- (发送信号)、一根信号地线。

磁盘的RS422USB相比RS485和RS232,布线成本高,南桥容易弄错,包涵422USB的磁盘型号很少。

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铜线USB只有两个,可使用路由器,达维季夫卡互联的前提是两个磁盘均有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) 把对端位寄存器0~9复制到通信本地的寄存器100~109

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通信就讲到这里,更多学习音频及图文详解请关注我们的公众号 正体育运动小助手。

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

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~