回复:应用探讨—S7-200 自由口通信

一粒尘

  • 帖子

    45
  • 精华

    1
  • 被关注

    15

论坛等级:游士

注册时间:2007-09-26

普通 普通 如何晋级?

发布于 2010-12-29 15:57:27

87楼

下面是我从MICRO/WIN帮助文件里改的一段自由口通信程序,实现接收到后(结束字为H0A),再发回去。
1、补充了发送完成中断启动接收服务程序
2、增加了模式开关切换通信口的模式,当开关切换由RUN切换到TERM时,为PPI从属模式;当开关由TERM切换到RUN时,P0口为自由口模式。
3、上一条有局限性,在用软件启动和停止PLC时,P0口初始化为自由口,不论PLC模式开关是在TERM还是RUN位置

程序如下
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 主程序
LD SM0.1 // 首次扫描时,
MOVB 16#09, SMB30 // 初始化自由端口:
// - 选择9600波特
// - 选择8个数据位
// - 选择无校验
MOVB 16#B0, SMB87 // 初始化RCV信息控制字节:
// - RCV被启用
// - 检测到信息字符结束
// - 将空闲行条件检测为
// 信息开始条件。

MOVB 16#0A, SMB89 // 将信息字符结束设为hex OA(换行符)。
MOVW +5, SMW90 // 将空闲行超时设为5毫秒。
MOVB 100, SMB94 // 将最大字符数设为100。
ATCH INT0, 23 // 将中断附加在接收完成事件上。
ATCH INT2, 9 // 将中断2附加在传送完成事件上。
ENI // 启用用户中断
RCV VB100, 0 // 为端口0在VB100位置启用带缓冲区的接收服务

Network 2
LD SM0.7 //PLC上模式开关状态:
//"RUN"时,SM0.7=1
//"TERM"时,SM0.7=0
EU
O SM0.1
S SM30.0, 1
R SM30.1, 1 //[SM30.1 SM30.0]=[0 1]为P0口为自由口通信
RCV VB100, 0 //切换到自由口后,先开接收服务
LD SM0.7
ED
R SM30.0, 2 //[SM30.1 SM30.0]=[0 0]为P0口为PPI从属模式


END_ORGANIZATION_BLOCK

INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 中断0
// 接收完成中断例行程序
LDB= SMB86 16#20 // 如果接收状态显示接收结束字符,
MOVB 10 SMB34 // 则附加一个10毫秒计时器,
ATCH INT_1 10 // 触发传送
CRETI // 并返回。
NOT
RCV VB100 0 // 如果因任何其他原因接收完成,
// 则开始新的接收。

END_INTERRUPT_BLOCK

INTERRUPT_BLOCK INT_1:INT1
TITLE=中断程序注释
BEGIN
Network 1 // 中断1
// 10毫秒计时器中断
LD SM0.0
DTCH 10 // 分离计时器中断
XMT VB100, 0 // 将信息传送端口0中的用户

Network 2 // 网络标题

END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_2:INT2
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题

LD SM0.0
RCV VB100, 0 //准备接收

END_INTERRUPT_BLOCK
管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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