S7-200与ACS510MODBUS通讯例程 点击:0 | 回复:1



gmx_1234

    
  • 精华:162帖
  • 求助:0帖
  • 帖子:2321帖 | 15回
  • 年度积分:0
  • 历史总积分:13671
  • 注册:2006年5月31日
发表于:2010-10-16 18:04:21
楼主

问:小弟有个S7-200控制ACS510变频器的项目,拟采用MODBUS通讯,但手上尚无实物,想先学习下PLC程序如何实现与变频器通讯的,比如读取电流、写入频率等。



答:变频器与plc配套应用是常见的自动化集成系统。由plc发出启动、停止、运行频率等指令,来控制变频器的运转及频率输出,达到控制生产过程自动化目的。基于串行通讯的变频器与plc集成技术具有的优点得到广泛的工程重视。本文介绍三菱变频器f700与西门子plc s7-200在自由口模式下的串行通信,达到plc对变频器的便捷控制。






2 变频器与plc的连接

plc s7-200与三菱变频器通信采用rs485接口的串行方式。s7-200侧为九针接口,三菱变频器为rs485端子,采用二线式连接。


3 通讯系统设计
3.1 plc的自由口通信模式


s7-200支持自由口通信模式。自由口模式使s7-200可以与许多通信协议公开的其他设备和控制器进行通信。波特率为1200~115200 b/s(可调整)。



自由口模式的数据字节格式总是有一个起始位、一个停止位,用户可以选择7位或者8位数据,也可以选择是否有校验位以及是奇校验还是偶校验。
在自由口模式下,通过使用发送中断、接收中断、发送指令(xmt)和接收指令(rcv),为所有通信活动编程。在自由口模式下,通信协议完全由用户程序控制。
3.2 三菱变频器专用协议
在自由口模式下,plc与变频器通信遵循三菱变频器专用协议。首先,按照变频器通讯规格对变频器参数进行设置(具体参照变频器手册)。其次通信采用以下步骤:
向变频器发送要求数据(变频器不会自动发送数据),经变频器等待时间后,从变频器向plc发送返回数据,等待变频器处理事件后,进行再处理。plc与变频器通信以ascii码(16进制)进行。plc对变频器进行运行状态监控、运行频率设置、启动、停止等操作。这些数据的收发采用不同的数据模式。如运行频率采用附表所示数据模式。





4 自由口通信编程设计
下面用实例来介绍自由口模式下的通信,plc向变频器发送20hz频率。(要使频率写入有效,开始时plc先向变频器发送“写入”指令,命令代码‘fb’。)


主程序:

网络1:
ld sm0.1 //初始化
movb 16#09, smb130 //端口1自由口模式,波特率9600,每个字符8位,无校验
movb 16#b0, smb187 //写接收指令控制字,允许rcv,检测信息结束字符、空闲线起始条件
movb 16#0d, smb189 //设置信息结束字符为16#0d(回车符)


movw +5, smw190 //设置空闲线检测时间间隔为5ms
movb 100, smb194 //设置最大字符数为100

网络2: 内
ld sm0.0
movb 16#0d, vb100 //发送数据字符数为13
movb 16#05, vb101 //通讯要求


movb 16#30, vb102 //变频器站号01 内
movb 16#31, vb103

movb 16#44, vb104 //频率写入命令代码
movb 16#44, vb105



movb 16#31, vb106 //等待时间1×10ms

movb 16#32, vb107 //发送频率20hz 

movb 16#30, vb108 

movb 16#30, vb109 

movb 16#30, vb110

movb 16#44, vb111 //求和校验码de



movb 16#45, vb112



movb 16#0d, vb113 //结束字符



movb 0, mb10

网络3:


ld sm0.0 



atch int_0:int0, 26 //端口1发送完中断,连接到中断0
atch int_2:int2, 24 //端口1接收完中断,连接到中断

eni //允许中断


网络4:


ld sm0.0
r sm187.7, 1 //禁止接收(避免接收发送冲突)


rcv vb149, 1


xmt vb100, 1 //开始发送
中断程序0:
网络1:


ld sm0.0

movb 5, smb35
atch int_1:int1, 11 //定时中断到中断1



中断程序1: 

网络1:

ld sm0.0
dtch 11


s sm187.7, 1 //允许接收
rcv vb149, 1 //开始接收
中断程序2:
网络1:


ld sm0.0



incb mb10 //每发送接收完一次mb10加1


ab= mb10, 3 //当超过3次,退出不再发送
creti 内
网络2:
ldb= smb186, 16#20 //接收无误条件下
ab= vb150, 16#06 //接收数据无错误,退出


creti
not //否则,再发送



r sm187.7, 1
rcv vb149, 1

xmt vb100, 1




st008

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 21回
  • 年度积分:0
  • 历史总积分:88
  • 注册:2012年11月03日
发表于:2012-12-06 23:40:47
1楼

我在做这个项目,请指教。411627018


相关主题

官方公众号

智造工程师