S7-200PLC通讯程序(为了保证自由口通讯方式下接收数据的可靠性,提出设置静止线定时器和接收器)

已锁定

上官轩言

  • 帖子

    9
  • 精华

    0
  • 被关注

    1

论坛等级:新手

注册时间:2010-05-28

普通 普通 如何晋级?

S7-200PLC通讯程序(为了保证自由口通讯方式下接收数据的可靠性,提出设置静止线定时器和接收器)

3051

5

2010-06-07 09:33:33

S7-200PLC硬件功能完善,指令系统丰富。可为用户提供多种通讯方式:PPI方式,MPI方式,自由通讯口方式等。应用自由通讯口方式,使S7-200PLC可以与任何通信协议已知,具有串口通讯的智能设备和控制器(如打印机、变频器、上位PC机等)进行通信,也可以用于两个CPU之间简单的数据交换。该通信方式使可通信的范围大大增大,使控制系统配置更加灵活、方便。
采用PLC自由通讯口方案,PLC工作于从站,PC处于主站模式,PLC从站只响应来自主站的申请。主站向PLC从站发送指令格式的报文,读指令00为向从站PLC申请产生于PLC的数据,读取水压,频率,变频泵号,工频台数,辅助泵状态等数据;写指令01为向PLC传送产生于主站的数据,包括压力设定值和控制器输出值。在自由口通信模式下,通信协议完全由用户程序控制。通过设定特殊存储字节SMB30(端口0)或SMB130(端口1)允许自由口模式,用户程序可以通过使用发送中断、接收中断、发送指令(XMT)和接收指令(RCV)对通信口操作。
应用发送指令(XMT),可以将发送数据缓冲区(TBL)中的数据通过指令指定的通信端口(PORT)发送出去,发送完成时将产生一个中断事件,数据缓冲区的第一个数据指明了要发送的字节数。应用接收指令(RCV),可以通过指令指定的通信指定端口(PORT)接收信息并存储与接收数据缓冲区(TBL)中,接收完成也将产生一个中断事件,数据缓冲区的第一个数据指明了要发送的字节数。
初始化程序:
LD SM0.0 // 开机始终为ON
MOVB 16#9,SMB30 //自由口通信,选择9600波特,8位数据位,无校验
MOVB 16#2, VB0 //预设PLC地址
MOVD &VB1000, VD20 //设置接收缓冲区,将其首地址传给指针VD20
MOVD &VB1200, VD30 //设置发送缓冲区,将首地址传给VD30
MOVD VD20, VD24 //指针值保存
MOVD VD30, VD34
MOVB 8, SMB34 //设置8ms的定时器0时基中断
ATCH 0,8 //接收字符连接到中断0,连接静止线定时器和接收器
ATCH 1,10
file://定时中断0,连接到中断1
ENI //开中断
为了保证通讯接收的可靠性,程序采用前导符,PLC地址,静止线接收,结束字符。首字符的确认可通过设置前导符来完成,并且通过比较还可以剔除部分干扰字符。首字符确认:
Network 1 //判断前导符
LD SM0.0
AB<> SMB2, 16#40
file://不是前导符则跳出中断
RETI
Network 2 //终止定时中断
LD SM0.0
DTCH 10 //断开时基中断
Network 3 //是前导符则连接中断3
LD SM0.0
AB= SMB2, 16#40
ATCH 3, 8
静止线是通讯过程中的一个检测用时间,即设定的数据传输过程中无任何数据的任意2点的间隔时间。静止线的设计和处理包括长度的确定及定时器和接收器的设计。
INT_ // 静止线定时器
LD SM0.0
ATCH 1, 10 //静止线定时器采用8ms的时基中断。
INT_1 // 静止线接收器
LD SM0.0
ATCH 2, 8 //开始接收字符
尾字符的确认和校验处理:
Network 1 // 接收及计算校验码
LDN M0.0
LDB<> SMB2, 16#2A // 判断是否为第一个结束符
MOVB SMB2,*VD24 //不是则保存数据并计算异或值
XORW SMW1, AC0
INCD VD24
INCD VB40
Network 2 //如果是第一个结束符,则对M0.0置位,并跳出中断,
//接收下一个字符,看是否为第二个结束符
LDN M0.0
AB= SMB2,16#2A
S M0.0, 1
MOVB SMB2, AC1
RETI
Network3
LD M0.0
AB<> SMB2, 16#0A //判断第二个结束符,如不是则继续执行
AB<> SMB2,16#2A //判断又是第一个结束符?不是则执行保存数据,

XORW AC1, AC0 //异或运算,并对M0.0复位。
MOVB VB300, *VD24
INCD VD24
MOVB SMB2, *VD24
XORW SMW1, AC0
INCD VD24
INCD VB40
INCD VB40
R M0.0, 1
RETI
Network 4 //如果又是第一个结束符,则上一个是有用的数据,需要保存
LD M0.0
AB= SMB2, 16#2A
XORW AC1, AC0
MOVB VB1300, *VD24
INCD VD24
MOVB SMB2, AC1
RETI
Network 5 //如前一个为2A,现在接收到0A,则接收完毕,启动延时中断
LD M0.0
AB= SMB2, 16#0A
DTCH 8 //断开接收状态,准备组织发送
MOVB 20, SMB34
ATCH 5, 10 //连接中断5,根据接收到的信息组织数据发送
对不方便设置尾字符的,可以采用计数的方式对中间字符进行接收,计数到则执行一个专门中断程序来执行接收结束的处理。对尾字符的判断处理采用以下流程进行处理。校验采用从PLC地址号开始,与数据(不包括两个连续的尾字符)进行异或校验。每接收一个字符就进行尾字符判断,如果不是尾字符则在接收的同时进行异或校验。
S7-200PLC通讯程序(为了保证自由口通讯方式下接收数据的可靠性,提出设置静止线定时器和接收器) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33263条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。