湖北襄樊中国西门子一级供货商
主程序MAIN(只给出与通信有关程序)
LD SM0.1
MOVB 1, VB1
//设置站地址
LD SM0.7
EU
O SM0.1
CALL SBR_0
//运行或模式开关从TERM打到ON时定义通信口为自由口
ED
CALL SBR_1
//模式开关从ON拨到TERM时定义通信口为PPI从站
子程序SBR_0
LD SM0.0
MOVB 16#09, SMB30
ENI
ATCH INT_11, 8
//定义通信口0为自由口模式,9.6K波特率,无校验,8位数据位,连接接收字符中断为中断程序INT_11
子程序SBR_1
MOVB 16#C0, SMB30
DTCH 8
DTCH 9
//恢复普通PPI通信设置
中断程序INT_11
AB= SMB2, VB1
MOVW +5, VW200
MOVD &VB640, VD688
ATCH INT_12, 8
//若站地址正确,连接接收字符中断到中断程序INT_12,并使VW200=5来计数,在INT_12中连续接收五个字节;若站地址错误,则继续由INT_11接收字节数据,要在S7-300中程序中将其余六个字节的高位进行设计,避免出现为内容1或2地址信息的字节,即使传输过程中因外界干扰,其余六个字节出现为1或2的假地址情况,程序也会在接下来1~2个接收过程中,因INT_13中断程序中的校验指令作用,得到错误校验值,而恢复到正常接收状态。
中断程序INT_12
MOVB SMB2, *VD688
INCD VD688
DECW VW200
//接收5个字节
LD SM1.0
MOVB 1, VB639
MOVW VW639, VW700
XORW VW641, VW700
ATCH INT_13, 8
//通过异或指令进行数据校验,连接接收字符中断到中断程序INT_13,即由第七个字节触发中断程序INT_13
中断程序INT_13
//中断分离
LDW= VW700, VW643
MOVD VD640, VD400 //校验正确,将控制信息数据存到VB400~VB402
MOVB 6, VB600
MOVB VB1, VB601
BMB VB100, VB602, 5
ATCH INT_14, 9
XMT VB600, 0
//校验正确,使能发送,发送6字节数据VB601~VB606,连接发送指令结束到中断程序INT_14
LDW<> VW700, VW643
//校验不正确,连接接收字符中断到中断程序INT_11,进行新一次接收
中断程序INT_14
//发送结束则连接接收字符中断到中断程序INT_11,进行新一次接收