说说西门子200smart modbus自由口通讯的那些事16

已锁定

WWCWWC

西门子1847工业学习平台

  • 帖子

    9112
  • 精华

    157
  • 被关注

    1473

论坛等级:至圣

注册时间:2008-07-26

钻石 钻石 如何晋级?

说说西门子200smart modbus自由口通讯的那些事16

1029

3

2017-07-09 20:23:53

说说西门子200smart modbus自由口通讯的那些事16

   前天,与一个“坛友”聊自由口通讯的那些问题,当聊到一个通讯项目中一个正常的发送、接收轮询进程时,需要插入一个外部中断(目的是优先执行这一串定义好了的发送数据指令),这个功能使那位坛友陷入了通讯的“迷茫”。我在聊这个通讯过程中,大致了解到这个外部中断优先于正常的自由口通讯轮询的工作机制,相当于控制系统中的急停按钮(或许这个比喻的不十分恰当),但我理解是这么个意思。当需要执行外部中断(发送数据指令时)断开发送或者接收通讯指令,优先执行外部中断连接的发送数据指令,在QQ聊天中回复了一个简单的思路,就是需要调用中断分离指令,不知道经过这几天的时间那位“坛友”把这个问题处理了没有。

   今天先来说说中断分离指令(DTCH),理解这个指令还是比较容易的,打开F1帮助也有比较详细的说明。由于忘记带通讯电缆,无法进行实际的自由口通讯演示,我就这个中断分离指令的应用做一个简单的演示。

   假设,先定义一个定时中断,在定时中断子程序中编辑INC_DW(中断次数的累加),同时,再定义外部输入I0.0上升沿中断,当启用外部I0.0上升沿中断时,停止定时中断(即中断分离定时中断),当外部中断执行完毕后,为方便中断分离的理解,定时中断的启用沿用手动启用的方式,便于观察指令执行的过程概念。

编程思路:

1)  首先定义2个中断,定时中断及外部I0.0的上升沿中断,定时中断采用SMB34所对应的中断事件号10,I0.0上升沿中断所对应的中断事件号0。

2)  当需要人工启用I0.0的上升沿中断时,启用中断分离指令(DTCH),停止定时中断,启用外部I0.0的上升沿中断

3)  假设,上升沿中断执行完毕,手动启用一个标志位M0.0,重新启用初始化中断的操作

程序步骤:

1)  定义一个中断初始化子程序在主程序中调用

2)  在定时中断子程序中编辑定时中断的次数累加,并存放到数据区VD100

3)  在外部I0.0的上升沿中断子程序中编辑中断次数的累加,并存放到数据区VD104,当人工需要执行外部I0.0的上升沿中断时,分离定时中断事件号10,停止执行定时中断而改为执行外部中断

4)  当外部I0.0上升沿中断子程序执行完毕,人工启用M0.0,返回到定时中断的执行中

程序:假设设置定时中断周期100mS

定义中断:

在主程序中调用:

在定时中断子程序中编辑定时中断次数累加程序:

在外部I0.0上升沿中断子程序中编辑中断次数及分离定时中断,图示:

为方便观察控制程序的运行,打开“状态图表”,输入VD100(定时中断次数);VD104外部I0.0上升沿中断次数,并在主程序中添加人工手动启用定时中断及外部I0.0的上升沿中断,图示:执行第二次外部I0.0的上升沿中断时

程序运行的结果功能满足中断分离及重新调用的需要,虽然看似与通讯中断没有关联,但停止中断的调用是可以借鉴了的,望那位“坛友”看到此贴能够得到一些帮助和启发,其中,你需要启用发送、接收中断的分离,待外部I0.0上升沿中断结束后,再重新启用这2个通讯中断,原则上就是把M0.0的标志位改为SM4.5(prot0口)、SM4.6(prot1口)替代,人工重新启用一般在通讯项目中不被常用,目的也是为了快速进入正常的通讯轮询,另外,你还需要考虑由于外部I0.0上升沿执行时被终止了的发送、接收指令,如何再次发送、接收数据的关联。


说说西门子200smart modbus自由口通讯的那些事16 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8945条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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