加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

S7-200自由口通讯程序

(2012-03-26 13:53:59)
标签:

s7200

自由口通讯

杂谈

分类: PLC
S7-200自由口通讯程序
2010-02-08 16:14

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

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                                       //校验错误,向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                       //PLCPC发送数据

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                       //PLCPC接受数据

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                                    //发送数据异或校验

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

     SM4.5

XMT    VB150, 0

INT_7: 结束中断服务程序

LD     SM0.0

DTCH                                    //关闭发送中断

MOVB   6, SMB34

ATCH   INT_0:INT0, 10              //返回中断入口

ATCH   INT_1:INT1, 8

INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,

接受四个0XFF,程序本身不做任何处理

CRETI

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有