西门子S7-300 PLC与模拟屏串行通信

来源:网络  作者:网络转载   2019-10-08 阅读:952
1 引言   模拟屏能简单、明了地反映现场的实时数据和状态信息,应用十分广泛。为了使现场信息及时、准确、动态地显示在模拟屏上,要求数据采集设备和模拟屏之间进行通信。   现场信息量比较大,如果每个信号都独立连接到模拟屏,信号线数量多、耗线多,不经济,走线不便,故障率高,采用串行通信可克服以上缺点。   现在通信方式多种多样、速度越来越快,但串行通信在控制范畴一直占据着极其重要的地位。它不仅没有因时代的进步而淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。与并行通信相比,它传输速度慢(并行一次传8位,串行传1位),但并行通信数据电压传输过程中,容易因线路因素使标准电位发生变化(常见的电压衰减、信号间互相串音干扰)。传输距离越远,问题越严重、数据错误越容易发生。相比之下,串行通信处理的数据电压只有一个标准电位,数据不易漏失。   常用的串行通信有两种,一种为rs232,另一种为rs422/485。工业环境常会有噪声干扰传输线路,在用rs232进行数据传输时,经常会受到外界电气干扰而使信号发生错误。rs232串行通信的信号标准电位是参考接地端而来的,干扰信号在原始信号和地线上均会产生影响,原始信号加上干扰信号后,依然传送到接收端,而地线部分的信号则不能传送到接收端。因此,信号便发生了扭曲。rs422/485传输的是差分信号,在发送端分成正负两部分,到达接收端通过相减,还原成原来信号,两条信号线受到的干扰的程度相同,这就防止了噪声干扰。本文以plc和模拟屏通信为例介绍通过rs485实现点对点串行通信。   2 模拟屏的通信规约及设备   (1) 通信规约   rs232c/485串行口:速率9600bps,1位起始位,8位数据位,1位停止位,无奇偶校验位;传输报文内容以字节为单位,在信道中的传送顺序是:低字节先送,高字节后送;字节内低位先送,高位后送;数据格式为16进制数;异步通信。   (2) 设备   开关量处理器;开关量指示灯;模拟量处理器;模拟量显示器;时钟;通信处理器;中央控制器。   3 信息传输途径设备和功能   (1) 途径:数据采集通过plc完成,plc向模拟屏传输数据,控制模拟屏状态。rs485连接图如图1所示:       图1 rs485连接电缆图   (2) 主要相关设备:中央处理器cpu 314;点到点通信模块cp341-rs422/485。   (3) 功能:—向模拟屏发送模拟量数据;—向模拟屏发送开关量信息;—控制屏状态,包括:全屏亮暗、全屏信号分合、 变位帧闪光;—设定和改变时钟时间。   4 通信实现的方法   4.1 初始化   就串行通信而言,交换数据的双方利用传输在线的电压改变来达到数据交换的目的。如何从不断改变的电压状态中解析出其中的信息,双方必须有一套共同的译码方式,遵守一定的通信规则。这就是通信端口初始化。   通信端口初始化有以下几个项目必须设置或确认:   (1) 通信模式   串行通信分同步和异步两种模式。同步传输在通信的两端使用同步信号作为通信的依据,异步传输则使用起始位和停止位作为通信的判断。模拟屏通信模式:异步传输;西门子plc通信模式:异步传输;二者通信模式相同。   (2) 数据的传输速率   异步通信双方并没有一个可参考的同步时钟作为基准。这样双方传送的高低电位代表几个位就不得而知了。要使双方的数据读取正常,就要考虑到传输速率。收发双方通过传输在线的电压改变来交换数据,但发送端发送的电压改变的速率必须和接收端的接受速率保持一致。模拟屏的通信速率:9600bps;西门子plc通信速率:600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps,57600bps,76800bps。初始化,将plc波特率设为:9600bps   (3) 起始位及停止位   当发送端准备发送数据时,会在所送出的字符前后分别加上高电位的起始位及低电位的停止位。接收端会因起始位的触发而开始接收数据,并因停止位的通知而确定数据的字符信号已经结束。起始位固定为1位,而停止位则有1,1.5,2等多种选择。模拟屏的停止位: 1位;西门子plc的停止位:1位或2位。初始化,将plc数据停止位设为:1位。   (4) 数据的发送单位   不同的协议会用到不同的发送单位(欧美一般用8位、日本一般用7位组成一字节),使用几位合成一字节,双方必须一致。模拟屏的数据发送单位: 8位为一字节;西门子plc的数据发送单位:7位或8位为一字节。初始化,将plc数据发送单位设为:8位。   (5) 校验位的检查   为了预防错误的产生,使用校验位作为检查的机制。校验位是用来检查所发送数据正确性的一种校对码,它分奇偶校验,也可无校验。模拟屏校验位:none;西门子plc校验位:none,odd,even;初始化,将plc校验位设为:none。   (6) 工作模式   交换数据是通过一定的通信线路来实现的。微机在进行数据的发送和接收时通信线路上的数据流动方式有三种:单工、半双工、全双工。rs232和rs422使用全双工模式,rs485使用半双工模式。模拟屏工作模式:rs232全双工/rs485半双工;西门子plc工作模式:rk512 全双工四线制(rs422);3964r全双工四线制(rs422);ascii全双工四线制(rs422);ascii半双工两线制(rs 485);初始化,将plc工作模式设为:ascii半双工两线制(rs485)。   (7) 数据流控制—握手   传输工作进行时,发送速度若大于接收速度,而接收端的cpu处理速度不够快时,接收缓冲区就会在一定时间后溢满,造成后来发送过来的数据无法进入缓冲区而漏失。采用数据流控制,就是为了保证传输双方能正确地发送和接收数据,而不会漏失。数据流控制一般称为握手,握手分为硬件握手和软件握手。模拟屏数据流控制:none;西门子plc数据流控制:none。要通过用户程序询问和控制。   (8) 错误预防—校验码   在传输的过程中,数据有可能受到干扰而使原来的数据信号发生扭曲。为了监测数据在发送过程中的错误,必须对数据作进一步的确认工作,zui简单的方式就是使用校验码。模拟屏校验码:异或校验和。要在plc上编校验码程序。   4.2 数据发送   (1) 将同步字及测量值db36.dbw21开始的数据送到db42.dbw12开始的数据区去,为向串口发送做准备。程序如下:   遥测*帧(fc36)   l w#16#eb90   传送两次同步字eb90,分别给db42.dbw12和db42.dbw14   t db42.dbw12   l w#16#eb90   t db42.dbw14   l b#16#61   //将报文类型字“61”送给db42.dbb16   t db42.dbb16   l w#16#100   //*帧将起始地址“0100”送给db42.dbw17   t db42.dbw17   //第二帧将起始地址“0120”送给db42.dbw17   l w#16#40   //将正文字节数“40”(64字节)送给db42.dbw19   t db42.dbw19   l db36.dbw21   //*帧将db36.dbw21开始的32个字的模拟量   caw 送到db42.dbw21开始的区域   t db42.dbw21   l db36.dbw23   caw   t db42.dbw23   …………………   l db36.dbw83   caw   t db42.dbw83   opn db42 //遥信校验   l p#17.0 //第二帧与*帧相同   t md100   l dbw[md100]   t mw10   l 33   t mw16   l mw16   next: t mw12   l md100   l p#2.0   +d   t md100   l dbw[md100]   l mw10   xow   t mw10   l mw12   loop next   l md100   l p#2.0   +d   t md100   l mw10   t mw14   l mw14   slw 8   t dbw[md100]   l mw10   aw w#16#ff00   t mw10   l mw10   l dbw[md100]   xow   t dbw[md100]   l dbw16   t mw18   l mw18   aw w#16#ff00   t mw18   l mw18   l dbw[md100]   xow   t dbw[md100]   (2) 将db42.dbw12开始,长度为95个字的数据送到串行端口,程序如下:   //supply laddr, db_no,dbb_no,len   l 256 // laddr   t db40.dbw2   l 42 // db_no   t db40.dbw4   t db42.dbw4   l 12 // dbb_no   t db40.dbw6   t db42.dbw6   l 95 // len   t db40.dbw8   t db42.dbw8   //send with instance-db   call fb8 , db21   sf :=’s’   req :=db40.dbx0.0   r :=db40.dbx0.1   laddr :=db40.dbw2   db_no :=db40.dbw4   dbb_no :=db40.dbw6   len :=db40.dbw8   r_cpu_no:=   r_typ :=   r_no :=   r_offset :=   r_cf_byt :=   r_cf_bit :=   done :=db40.dbx0.4   error :=db40.dbx0.5   status :=db40.dbw12   // generate edge p_snd_rk_req   an db40.dbx0.0 // p_snd_rk_req   s db40.dbx0.0   // set p_snd_rk_req   o db40.dbx0.4 // p_snd_rk_done   o db40.dbx0.5 // p_snd_rk_error   r db40.dbx0.0 // p_snd_rk_req   // check “complete without error”   an db40.dbx0.4   // check p_snd_rk_done if p_snd_rk_done equals 0,   jc cher   // jump to cher and check p_snd_rk_error   //”complete without error”   // p_snd_rk_done=1   l db42.dbw0   //“complete without error”   +1 // increment counter   t db42.dbw0   nop //further user function   nop   nop   be   // check “complete with error”   // p_snd_rk_error=1   cher: an db40.dbx0.5   //check p_snd_rk_error   bec //if no error occurred, jump to end   //“complete with error”   l db42.dbw2   //“complete with error”   +1 //increment counter   t db42.dbw2   l db40.dbw12   t db40.dbw14 //save status   nop //error-handling   nop   nop   be   (3) 数据刷新,程序如下:   an m2.4   l s5t#100ms   sd t0   a t0   jnb _007   l w#16#1   l md4   rrd   t md4   set   save   clr   _007: a br   = l20.0   a l20.0   a(   l md4   l l#0   ==d   )   jnb _008   l 1   t md4   _008: nop 0   a l20.0   bld 102   = m2.4   a(   o m5.0   o m6.4   )   jnb _003   call fc36   _003: nop 0   a(   o m4.0   o m5.4   )   jnb _004   call fc38   _004: nop 0
标签: S7
打赏

免责声明:
本站部份内容系网友自发上传与转载,不代表本网赞同其观点;
如涉及内容、版权等问题,请在30日内联系,我们将在第一时间删除内容!

购物指南

支付方式

商家合作

关于我们

微信扫一扫

(c)2008-2018 DESTOON B2B SYSTEM All Rights Reserved
免责声明:以上信息由相关企业或个人自行免费发布,其真实性、准确性及合法性未证实。请谨慎采用,风险自负。本网对此不承担任何法律责任。

在线咨询

在线咨询:

QQ交流群

微信公众号