西门子S7-300 PLC与模拟屏串行通信
数据是通过一定的通信线路来实现的。微机在进行数据的发送和接收时通信线路上的数据流动方式有三种:单工、半双工、全双工。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
S7-300PLC模拟屏串行通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)