来自西门子技术支持热线的故事:S7-200累加器----不能不说的秘密

已锁定

西门子Auto

官方工程师

  • 帖子

    132
  • 精华

    16
  • 被关注

    227

论坛等级:侠圣

注册时间:2007-08-03

普通 普通 如何晋级?

来自西门子技术支持热线的故事:S7-200累加器----不能不说的秘密

16706

29

2012-10-15 11:21:55

star star star
众所周知S7-200拥有AC0~3共计4个累加器,累加器是可以象存储器一样使用的读写设备。例如,可用它来向子程序传递参数,也可以从子程序返回参数,或者存储计算的中间结果。当然也可以使用累加器(只能使用AC1~3)存储或传递指针。
在热线上曾有客户需要实现这样一个数据传递功能:数据块中预置VD0~VD396共计100个双字的初始数据,通过定时中断程序(或其他中断方式)将这100个双字依次转移到VD1000~VD1396。程序思路:在主程序给AC1写入指针(&VB0),AC2写入指针(&VB1000),然后在中断程序中对AC1和AC2累加器做累加,每次累加4个字节的偏移量,并在中断程序中将AC1指针中的数值依次传送到AC2指针中指定的V区位置(例如,第一次中断,VD4传给VD1004;第二次中断,VD8传给VD1008……);上述编程思路清晰,貌似没有问题;下载程序测试后,却发现功能没有实现。
同时用户反映,若将累加器AC1和AC2用V区地址代替,数据传递功能能实现,这究竟是为什么呢?
通过如下程序对累加器进行测试:



图1 主程序



图2 子程序



图3 中断程序

首先,操作M0.0和M0.1分别置1时,主程序和子程序中的累加器AC1都进行了加1操作,并通过VD1000得到输出值。
然后,通过外部信号I0.0接通硬件中断后,中断子程序中的累加器AC1进行了加100的操作,并通过VD1008得到输出值。
测试发现中断程序中的累加器AC1的值并未得到来自主程序中的累加器的值的传递(否则,VD1008应为102),状态表如下:



图4 状态监控表

仔细查阅《S7-200可编程控制器系统手册》中关于中断程序的内容,其中第155页有关于累加器的说明,截图如下:



借此案例提醒使用S7-200的工程师,在主程序和中断程序中使用同一累加器时有这么个小小的“秘密”需要注意。
来自西门子技术支持热线的故事:S7-200累加器----不能不说的秘密 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33779条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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