MAIN: S7200自由口通讯程序
LD SM0.1
CALL SBR_0:SBR0 //初始化子程序
LD SM0.7
= SM30.0
SBR_0: 初始化子程序
LD SM0.0
MOVW +2, VW8 //PLC自由口地址,此处每台机器需设不同的地址LD SM0.0
MOVB 9, SMB30 //通讯参数,波特率9600,自由口通讯
MOVD &VB100, VD40
MOVW +10, VW54
MOVB 12, VB150
MOVB VB9, VB151
MOVD &VB151, VD60
MOVB 6, SMB34
ATCH INT_0:INT0, 10
ATCH INT_1:INT1, 8
ENI
INT_0: 中断程序入口
LD SM0.0
DTCH 10
MOVD VD40, VD46
MOVW +10, VW44
MOVW +10, VW54
ATCH INT_2:INT2, 8 //接受中断起用服务程序INT2
第 1 页
INT_1: 延时转向INT0
LD SM0.0
MOVB 5, SMB34
ATCH INT_0:INT0, 10
INT_2: 接受地址,并判断
LDB= SMB2, VB9 //地址和本机相符
MOVW VW8, AC0
MOVB 255, SMB34
ATCH INT_3:INT3, 8 //起用中断服务INT3,接受包ATCH INT_5:INT5, 10 //起用延时监控服务INT5
CRETI
LDB= SMB2, VB9 //地址和本机不符
NOT
ATCH INT_0:INT0, 10 //返回中断入口
ATCH INT_1:INT1, 8
INT_3: 主接受服务程序,同时做异或校验
LD SM0.0
XORW SMW1, AC0
MOVB SMB2, *VD46
INCD VD46
DECW VW44
LD SM1.0 //完成预定的接受字节数ATCH INT_4:INT4, 8 //起用通讯数据处理主程序
INT_4: 通讯数据处理主服务程序
LD SM0.0
BMB VB100, VB152, 6 //接受报头拷贝到发送报头LD SM0.0
DTCH 8 //暂停响应接受中断
第 2 页
INCD VD46
MOVB SMB2, *VD46
XORW SMW1, AC0
ANDW 16#FF, AC0 //检查异或校验
LDN SM1.0 //异或校验错误
MOVB VB100, AC0
MOVB 16#80, AC1
ORW AC0, AC1
MOVB AC1, VB152
MOVB 16#1, VB158
MOVW +10, VW54
JMP 3 //校验错误,向PC返回错误码
LD SM1.0 //异或正确
MOVW +4, VW34
ATCH INT_8:INT8, 8 //起用服务程序INT8响应接受中断,接受包尾LD SM0.0 //数据处理
LPS
AB= VB101, 0 //V寄存器
MOVD &VB0, VD50
LRD
AB= VB101, 1 //Q寄存器
MOVD &QB0, VD50
LRD
AB= VB101, 2 //I寄存器
MOVD &IB0, VD50
LRD
MOVW +0, VW56
LRD
第 3 页
MOVW VW102, VW58
LPP
+D VD56, VD50
LDB= VB100, 0 //PLC向PC发送数据MOVB VB104, AC0
MOVB VB105, AC1
MUL AC1, AC0
BMB *VD50, VB158, AC0
+I +8, AC0
MOVW AC0, VW54
-I +2, VW54
MOVB AC0, VB150
LDB= VB100, 1 //PLC从PC接受数据
BMB VB106, *VD50, VB105
MOVW +10, VW54
MOVB 12, VB150
LBL 3
LD SM0.0
MOVB 50, SMB34
ATCH INT_6:INT6, 10 //延时起用INT6,置位发送电平MOVD VD60, VD66
MOVB *VD66, AC0
MOVB 0, VB250 //发送数据异或校验次数监视LBL 0 //发送数据异或校验LD SM0.0
INCD VD66
MOVB *VD66, AC1
XORW AC1, AC0
第 4 页
INCB VB250
LDB= VB250, 150 //若校验次数超过150次,退出
MOVB 6, SMB34
ATCH INT_7:INT7, 10
CRETI
LD SM0.0
DECW VW54
LDN SM1.0 //若发送校验未完成预定的次数,跳转到循环0 JMP 0
LD SM0.0
INCD VD66
MOVB AC0, *VD66
LD SM0.0
MOVB VB150, AC0
+I +4, AC0
MOVB AC0, VB150
INT_5: 接受时间监控服务程序
LD SM0.0
MOVD VD40, VD46
MOVW +10, VW44
MOVB 5, SMB34
ATCH INT_1:INT1, 8
ATCH INT_0:INT0, 10
INT_6:发送数据
LD SM0.0
MOVB 250, SMB34
ATCH INT_7:INT7, 10 //起用发送时间监控
ATCH INT_7:INT7, 9 //发送中断(发送完成时触发)起用服务程序INT7
第 5 页
A SM4.5
XMT VB150, 0
INT_7: 结束中断服务程序
LD SM0.0
DTCH 9 //关闭发送中断MOVB 6, SMB34
ATCH INT_0:INT0, 10 //返回中断入口
ATCH INT_1:INT1, 8
INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,接受四个0XFF,程序本身不做任何处理
CRETI
第 6 页