文档库 最新最全的文档下载
当前位置:文档库 › S7200自由口通讯程序

S7200自由口通讯程序

S7200自由口通讯程序
S7200自由口通讯程序

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 页

相关文档