微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 西门子S7-300 PLC与模拟屏串行通信

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

时间:12-20 来源:互联网 点击:

数据是通过一定的通信线路来实现的。微机在进行数据的发送和接收时通信线路上的数据流动方式有三种:单工、半双工、全双工。rs232和rs422使用全双工模式,rs485使用半双工模式。模拟屏工作模式:rs232全双工/rs485半双工;西门子plc工作模式:rk512全双工四线制(rs422);3964r全双工四线制(rs422);ascii全双工四线制(rs422);ascii半双工两线制(rs485);初始化,将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 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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top