本人愿和同道中人共同探讨西门子技术范围包括(200/300/400/Wincc/Hmi)
技术文章参考博客! http://jiansiting.gkbk.com
仪表地址的修改采用周期中断OB35来执行,每中断一次,仪表号加1,直到13为止,然后回到地址1重复执行。至于发送命令的设计则采用如下程序来执行:
L "Computer Link Instru".Instr_No//仪表号1
L 1
= =I //仪表号与1比较,是否该与1号仪表通讯
JCN m010 //如果不是,跳转比较下一号仪表
L B#16#30 //是,将1号仪表的仪表号和BCC送入发送DB中
T "P_SEND Data R".DB_VARO[2]
L B#16#31
T "P_SEND Data R".DB_VARO[3]
L B#16#36
T "P_SEND Data R".DB_VARO[12]
L B#16#43
T "P_SEND Data R".DB_VARO[13]
L 7 //接收数据的DB块地址
T MW 50
JU m100
M010:"Computer Link Instru".Instr_No
//仪表号2
…… //其他仪表如上处理
CALL "P_SEND","P_SEND Instance DB"
//调用发送数据FB块
REQ :=MO.4 //定时时钟脉冲,0.8s
R := "Computer Link Instru".W_En
//隐蔽发送块位
LADDR :=256 //CP340地址
DB_NO :=2 //发送数据块地址
DBB_NO :=0 //发送数据起始地址
LEN :=14 //发送数据长度
DONE :=1.0
ERROR :=1.1
STATUS :=MW100
CP340发送写数据程序的设计
由于系统对仪表进行写数据操作不是一个连续的过程,仅是在需要的时候才发送命令到仪表中,因此,发送写数据程序不能采用连续调用过程,而是采用一个脉冲调用,同时在发送写数据命令时,一定要屏蔽读数据命令的发送。由此,写数据PLC程序设计如下所示:
A M 0.3 //0.5s的脉冲信号,由PLC时钟产生
A "Computer Link Instru".W_En
//屏蔽读取数据命令的发送
JCN m011
CALL "Write Data"
//调用写数据发送命令块
M011: NOP 0
A "Computer Link Instru".W_En
//对屏蔽读取数据命令1s后恢复读取数据命令
FR T 0 //同时,将屏蔽读取命令位置0
L W#16#2001
SD T 0
A T 0
R "Computer Link Instru".W_En
对于写数据发送命令程序块,主要完成填写设置数据地址、BCC码计算、仪表地址的修改和设置数据的填写,最后调用发送FB3将数据发送到对应的仪表。
CP340接收程序的设计
接收程序的设计比较简单,其程序如下:
CALL "P_RCV","P_RCV Instance DB"
//接收数据FB块,FB2
EN_R :=TRUE //TRUE允许数据接收
R :=FALSE
LADDR :=256 // CP340地址
DB_NO :=MW50 //数据放置的DB号
DBB_NO:=0
NDR :=M1.2
ERROR :=M1.3
LEN :=MW104
STATUS:=MW106
而接收数据的DB块,只需要定义成BYTE类型的数组,并且长度不小于39字节就可以了,对于每次从温控仪表中读取的数据放入到不同的DB块中。
由于SR93系列温控仪表发送回来的数据都是将实际的16位数据转换成4位ASCII码传输过来的,如实际数据为42(十六进制:002AH),则在DB块中得到的数据为30H,30H,32H,41H,而且高数据位在DB块的低地址上,因此为了便于上位机的显示就需要对此数据进行转换,其中最高一位的处理方法如下所示,其他位的转换方法与此类似,仅是左移位数不同。
L DB12.DBB 8
//将读到的ASCII码数据放入DBW54中
T DB6.DBB 55
L 0
T DB6.DBB 54
L DB6.DBW 54 //将数据减去30H
L W#16#30
-I
T DB6.DBW 54
L DB6.DBW 54
//将减去30H的结果与9相比
L 9
>I
JCN m100
L DB6.DBW 54
//若结果大于9,说明为A-F的数值,再减去7
L 7 //得到10-15的数值
-I
T DB6.DBW 54
m100: L 12 //将数据左移12位后
L DB6.DBW 54
SLW
T DB6.DBW 54
L DB6.DBW 56
//与保存结果的DBW进行或运算,得到高位的数据
L DB6.DBW 54
OW
T DB6.DBW 56