企业简介

西门子自动化与驱动集团(A&D)是西门子股份公司中最大的集团之一,是西门子工业领域的重要组成部分。作为自动化和驱动领域的世界先驱,A&D 目前拥有 70,500 多名雇员,遍布 193 个国家,在2005/06财政年度(截止到2006年9月30日)销售业绩高达128亿欧元, 接受订单达141亿欧元。我们始终致力于给您带来新理念和新技术,为您在全世界,特别是在中国的发展助一臂之力。

  • 公司类型:供应商

联系方式
  • 西门子自动化与驱动集团自动化系统部
  • 地址:北京市朝阳区望京中环南路7号邮政信箱: 8543
  • 邮编:100102
  • 电话:010-64768888
  • 传真:010-64764915
  • 网址:http://www.ad.siemens.com.cn/
  • Email:adweb@siemens.com
  • 联系人:
案例详细
标题西门子S7-300 PLC与模拟屏串行通信
技术领域机器视觉
行业电子制造
简介
内容 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) 错误预防—校验码

    在传输的过程中,数据有可能受到干扰而使原来的数据信号发生扭曲。为了监测数据在发送过程中的错误,必须对数据作进一步的确认工作,最简单的方式就是使用校验码。模拟屏校验码:异或校验和。要在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  m

    d100

    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