找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
利用DP网络接头进行连接,西门子200通讯口的A,B与仪表通讯口的A,B分别连接,连接线用西门子紫色DP电缆。
程序可直接调用西门子200modbus通讯库。
STEP 7-Micro/WIN指令库通过包括专门设计用于modbus设备的预配置子程序和中断例行程序的方法,使与modbus主站通讯更加简便。您可以利用modbus协议指令配置S7-200,将其用作modbus 从站或主设备。
可以在STEP 7-Micro/WIN指令树的“库”文件夹中找到这些指令。当您在程序中加入一条USS modbus指令时,项目中会自动增加一个或多个相关子程序。
modbus从站协议指令可以配置S7-200,将其用作modbus RTU从站,与modbus主设备通讯。
modbus主设备协议指令可以配置S7-200,将其用作modbus RTU主设备,与一个或多个modbus从站通讯。
modbus指令安装在STEP 7朚icro/WIN指令树的"协议库"文件夹中。有了这些新指令, 您可以将S7-200用作modbus设备。当您在程序中加入modbus指令时,会在项目中自动增加一个或多个相关子程序。
modbus主设备协议库有两个版本。一个版本使用CPU的端口0,另一个则使用CPU的端口1。端口1协议库的POU名中带有"_P1"(MBUS_CTRL_P1),表示POU使用CPU上的端口1。在其它方面,这两个modbus主设备协议库完全一致。
modbus从站协议库仅支持端口0通讯。
在某厂真空烧结特种陶瓷炉控制系统中,采用了上下位机的主从控制结构。上位机是S7-200系列的CPU226 型PLC,下位机是日本岛电的FP93、法国朔高美的DIRIS Ap等智能仪表。S7-200 PLC通讯模式有两种:一种是点对点(PPI)通讯协议,用于PLC之间或者SIEMENS公司的人机接口间的通讯;另一种是完全柔性的、由用户自己定义的自由口(FREE PORT )通讯协议,用于与具有RS232或者RS485通讯端口的智能型外围设备通讯。由于下位智能仪表的通讯协议不同,故上位机PLC只能采用自由口模式进行通讯。用通讯的方法交换数据,连线少,信息量大,传输距离远,抗干扰能力强,是PLC与智能仪表等可靠交换数据较好的方法。限于篇幅,本文仅介绍用自由口模式实现PLC与FP93智能仪表的通讯。
2.S7-200系列PLC的自由口通讯模式
所谓自由口模式,就是用户根据上位机或者下位机的通讯协议,在PLC中自行编写符合外围智能设备通讯程序的一种通讯方法。自由接口模式允许程序通过使用接收中断、发送中断、发送指令(XMT)和接收指令(RCV)控制S7-200 CPU的通讯端口,它支持ASCII和二进制协议。可使用特殊内存字节SMB30(用于0号端口)和SMB130(用于1号端口)启用自由接口模式。
自由接口模式仅限在S7-200处于RUN(运行)模式时才成为激活状态。将S7-200设为STOP(停止)模式会使所有的自由接口通讯暂停,通讯端口则返回至在S7-200系统块中配置的PPI协议设置[2]。
3.硬件连接及协议简介
3.1 硬件连接
S7-200 PLC串行接口为RS485,它具有许多突出的优点。首先,RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力和良好的抗噪声干扰性;其次,总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复;再次,RS-485用于多点互连时非常方便,可以省掉许多信号线,并且应用RS-485 可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器[3]。故此,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。本系统即采用RS485接口组成、只需二根屏蔽双绞线传输的半双工网络。其通讯网络如图1所示。
图1 PLC与智能仪表通讯连线示意图
其通讯过程为:上位机S7-200 PLC是讲者,下位FP93 智能仪表等是听者,并按主、从方式进行通讯,多台仪表的通讯靠地址(设备号)的不同来区分。通讯中,发送方需将发送线置于低阻态。发送完成后,发送线需重新恢复到高阻关闭态。接收方在接收数据完成后,又成为发送方。因此,RS485接口存在着双向数据总线转换冲突问题。在上位机PLC可由软件调整,下位可由仪表的RS485延时时间窗口调整。
3.2 PLC发送数据格式
1)PLC读仪表参数数据命令格式,如表1所示。
表1 PLC读FP93仪表数据格式
字节1 字节2-3 字节4 字节5 字节6-9 字节10 字节11 字节12-13 字节14
2 1-99 1 R 0-65535 0-9 3 13
通讯的起始符 下位仪表FP93地址 FP93地址的子地址 通讯读命令 通讯数据地址 读仪表参数的个数 数据发送结束符 BCC校验码 全报文结束符
2)PLC写仪表参数数据命令格式,如表2所示。
表2 PLC向FP93仪表写参数数据格式
字节1 字节2-3 字节4 字节5 字节6-9 字节10 字节11 字节12-15 字节16 字节17-18 字节19
2 1-99 1 W 0-
65535 0 , 3 13
通讯的起始符 下位仪表FP93地址 仪表地址的子地址 通讯写命令 通讯数据地址 写参数的个数固定为1 数据项的引导符 写入数据的内容 数据发送结束符 BCC校验码 全报文结束符
注:1)在读写命令中,BCC校验码为第2字节到校验码前的所有数据的异或和,取低字节转换为ASCII码; 2)在读写命令中,通讯起始符、数据结束符与报文结束符为字符的十进制数,其他字节为字符的ASCII值;3)每次最多可读10个参数,可写1个参数,当读写参数超过时,可分多次进行读写;4)写命令时,应先将LOC(机内)模式至成COM(通讯)状态(对应地址018C):由LOC状态转换成COM状态不能由仪表窗口完成,只能由上位机完成,而由COM状态转换成LOC状态上位机、仪表窗口均可完成[4]。
例如,要将地址为1的FP93仪表控制输出比例带1(对应地址0400H)的值设为40:第一步要将LOC模式至成COM状态,命令格式为2+01+1+W+018C+0+逗号+0001+3,按规则转换为ASCII数据即02H+3031H+31H+57H+30313843H+30H+2CH+30303031H+03H,从第2字节到03H作异或运算,运算结果的低字节为E7H,再转换为两个ASCII字符是4537H,把它们跟在原来的ASCII字符序列中,最后加上全报文结束符0DH,就构成了一个完整的数据发送报文,可以用XMT命令发送出去;第一步仪表回应正确后,第二步才能用与第一步同样的方法将地址0400写为40(16进制数0028),其整个报文为02H+3031H+31H+57H+30343030H+30H+2CH+30303238H+03H+3742H+0DH,仪表回应正确后,才完成整个设定功能。
3.3 FP93温控智能仪表响应数据格式
PLC读仪表参数正确:返回通讯起始符02H+FP93地址+子地址+读命令52H+3030H+2CH+送回数据+数据结束符03H+BCC校验码+报文结束符0DH
PLC写仪表参数正确:返回通讯起始符02H+FP93地址+子地址+写命令57H+3030H +数据结束符03H+BCC校验码+报文结束符0DH
PLC读仪表参数错误:返回通讯起始符02H+FP93地址+子地址+读命令52H+3037H +数据结束符03H+BCC校验码+报文结束符0DH
PLC写仪表参数错误:返回通讯起始符02H+FP93地址+子地址+写命令57H+3037H +数据结束符03H+BCC校验码+报文结束符0DH
4.PLC的通讯编程
PLC与智能仪表FP93通信,编程在PLC方,智能装置不需要编程。
4.1 PLC各部分程序说明
为了实现以上协议,在PLC中编制了以下程序:
主程序:PLC上电第一周期调用初始化子程序,并在条件满足时分别调用发送读子程序和发送写子程序;
初始化子程序:约定通讯的通讯方式、波特率、数据位数、停止位数、校验方式等,并复位某些重要的变量;
发送读子程序:准备好PLC向FP93发送读指令时要发送的数据,在条件满足时调用BCC校验子程序得到要求发送数据的校验结果并放入发送缓冲区,然后将读仪表参数指令发送出去;
发送写子程序:准备好PLC向FP93发送写指令时要发送的数据,在条件满足时调用BCC校验子程序得到要求发送数据的校验结果并放入发送缓冲区,然后将写仪表参数指令发送出去;
BCC校验子程序:将要校验的数据进行异或校验,并将结果转换为对应的ASCII码,为发送读/写指令做准备或与接收到的数据校验结果比较,看收到的数据是否有效;
发送完成中断程序:规定接收数据格式并接收读/写数据的结果;
接收完成中断程序:对接收到的数据进行校验,如果结果正确,将正确数据放入指定的数据单元以供使用。
4.2 部分调试通过的程序及其注释
1)初始化子程序
网络1
LD SM0.0 //S7-200上电后,SM0.0始终接通
LPS //逻辑压栈
MOVB 16#09,SMB30 //设置通讯方式,SMB30为通讯参数设定字节,把9赋给它, 含义是无奇偶校验,8位数据位,波特率9600bit/s,端口0用自由口方式通讯
ATCH INT_0, 9 //规定发生事件9(发送结束字符),引发中断事件0
ATCH INT_1, 23 //规定发生事件23(收到结束字符),引发中断事件1
ENI //开中断,S7-200默认中断是关闭的
2)发送读子程序
网络9 //本网络将要读取参数的个数变为ASCII码
LD L0.0 //局部布尔型变量,由全局变量给入
EU //微分上升沿,时间到,只ON一个周期
-I +1, LW5 //整数相减,局部变量地址LW5中值减1,结果放入LW5
MOVW 16#30, VW5154 //全局变量地址VW5154中赋值16进制数30(48)
+I LW5, VW5154 //整数相加,LW5和VW5154中值相加,结果放入VW5154
MOVD LD7, VD5175 //局部变量地址LD7中值放入全局变量地址VW5154
网络10 //本网络将要读取参数的地址、个数放入发送缓冲区发送出去
LD L0.0 //同上
EU //同上
LPS //同上
MOVD LD1, VD5041 // LD1中值放入地址VW5041
AENO //对ENO进行操作
MOVB VB5155, VB5045// VB5155中值放入地址VB5045
LRD //读逻辑栈
CALL SBR4 //调用子程序4,即BCC校验子程序
LRD //同上
R SM87.7, 1 //复位SM87的第7位(它管理端口0能否接收信息,0时禁止接收,1时允许接收信息)
LRD //同上
RCV VB5057, 0 //复位SM87的第7位后,禁止从端口0接收数据
LRD //同上
XMT VB5035, 0 //从端口0发送以VB5035开始的数据,发送字节个数等于VB5035中的值
程序中地址以L开始的地址全为局部变量。使用它们建立不引用绝对地址或全局符号的可移动子程序,不仅使子程序适用性更好(调用时仅需给定局部变量值),而且使用临时变量(说明为TEMP的局部变量)进行计算,可以方便地释放PLC内存。例如,本子程序使用时可将L0.0作为条件、LD1为要读取的仪表地址、LW5为要读的参数个数、LD7为读回参数要放地址的指针,在调用时指定这些变量即可在不同条件下读取不同个数的参数。
另外,S7-200的通讯端口为RS-485接口,RS-485接口为半双工接口,因此,编写PLC程序的关键是避免在通讯端口上同时发送和接收。将SM87.7置0,禁止在端口0接收信息,再执行RCV指令,停止端口0的接收,然后执行XMT指令将读指令发送出去,就可有效的避免因同时发送和接收造成的通讯冲突,从而保证程序的正常运行。
3)发送完成中断程序
网络1
LD M31.7 //接收信息的条件
MOVB 16#F0, SMB87 //设定接收信息,接收两字符间的允许空闲时间由SMW90设
//定,并由SMB88指定开始接收字符,SMB89指定结束字符
MOVB 16#02, SMB88 //指定2为接收信息起始字符
MOVB 16#0D, SMB89 //指定回车符为信息结束字符
MOVW +10, SMW90 //信息间字符接收时间不大于10ms
MOVB 255, SMB94 //信息最大长度为255字节
网络2
LD M31.7 //同上
S SM87.7, 1 //置位SM87最高位,允许接收信息
RCV VB5057, 0 //按设定接收条件接收信息,并存放在以VB5057开始的单元中,其中VB5057中存放接收信息的字节个数
4)接收完成中断程序
网络1
LD M31.7 //同上
AB= VB5062, 16#52 //字节比较,确认发送命令是读命令
LPS //同上
AW= VW5063, 16#3030 //字比较,确认发送读指令正确
LPS //同上
CALL SBR4 //同上
AW= VW5127, *VD5156 //字比较,确认校验结果正确
ATH VB5066, *VD5175, VB5140
//将VB5066起始、VB5140指定字节个数的多个字节由ASCII
//码转换为16进制数,并存放入VD5175指针指定的单元中
S M31.6, 1 //设定正确标志位
LPP //逻辑弹出
AW<> VW5127, *VD5156 //指令发送错误
S M31.5, 1 //指定错误标志
LPP //同上
AW<> VW5063, 16#3030 //校验结果错误
S M31.5, 1 //指定错误标志
5.结束语
该系统自2007年1月运行以来,效果良好,几乎没出现通讯中断或死机现象,证明了用通讯交换数据,连线少,信息量大,由于用的是数字量而不是模拟量,抗干扰能力强。同时,还可增大传送的距离,提高PLC的控制能力及扩大PLC的控制领域[5],使自动化从设备级发展到生产线级、车间级甚至于工厂级,实现在信息化基础上的自动化(e自动化),最终为实现智能化工厂(Smart Factory)、透明工厂(Transparent Factory)及全集自动化系统提供技术支持。
问题2:仪表中读寄存器命令格式为:地址,起始寄存器高位,低位,终止寄存器高位,终止寄存器低位,CRC.
仪表应答为:地址,字节计数*2,寄存器数据1----寄存器数据M,CRC.
这在程序里怎么实现读仪表数据?
答:http://*s.jdzj.com/showart.asp?art_id=6877
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!