发表于:2012/7/11 16:49:57
#0楼
打算用s7 200plc 通过自由口与三菱A700变频器通讯
在网上看了些资料找到了一篇于三菱F700通讯的其中有程序:
通信采用以下步骤:
向变频器发送要求数据(变频器不会自动发送数据),经变频器等待时间后,从变频器向plc发送返回数据,等待变频器处理事件后,进行再处理。plc与变频器通信以ascii码(16进制)进行。plc对变频器进行运行状态监控、运行频率设置、启动、停止等操作。
下面用实例来介绍自由口模式下的通信,plc向变频器发送20hz频率
主程序:
网络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接收完中断,连接到中断2
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
想问下从变频器传回的数据有什么用,程序中传回的数据放到了VB149,在中断程序2中为什么每次传送接收完后
mb10要加1当超过3次,退出不再发送 还有 中断程序2 网络2里 ab= vb150, 16#06 //接收数据无错误,退出
他是不是写错了应该是VB149把? #06是不是就是变频器传回来的值,,,,谢谢。
在网上看了些资料找到了一篇于三菱F700通讯的其中有程序:
通信采用以下步骤:
向变频器发送要求数据(变频器不会自动发送数据),经变频器等待时间后,从变频器向plc发送返回数据,等待变频器处理事件后,进行再处理。plc与变频器通信以ascii码(16进制)进行。plc对变频器进行运行状态监控、运行频率设置、启动、停止等操作。
下面用实例来介绍自由口模式下的通信,plc向变频器发送20hz频率
主程序:
网络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接收完中断,连接到中断2
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
想问下从变频器传回的数据有什么用,程序中传回的数据放到了VB149,在中断程序2中为什么每次传送接收完后
mb10要加1当超过3次,退出不再发送 还有 中断程序2 网络2里 ab= vb150, 16#06 //接收数据无错误,退出
他是不是写错了应该是VB149把? #06是不是就是变频器传回来的值,,,,谢谢。
[此贴子已经被作者于2012/7/11 16:55:13编辑过]