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
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
//暂停响应接受中断
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
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
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
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
|