技术论坛

跟我一起玩200 smart PLC 关于数据的采集

作者 主题
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
主题:跟我一起玩200 smart PLC 关于数据的采集
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 楼主 2017-05-17 08:06:29

跟我一起玩200 smart PLC

关于数据的采集

  昨天晚上,看到一个网友的提问:“说需要将一个变化了的数据,按规定的定时时间有规律存放到一个连续的数据寄存器地址中、、、、、、”。类似处理这样的程序虽然有很多种编程方法,但我想了想,认为这样的方法可以测试一下。

编程思路:

1)  既然是定时存放数据,那做一个定时中断正好符合要求。新建一个定时中断,SMB34该定时中断时间以1mS为最小单位(最大255mS),按网友要求设置为1000mS = 1秒需要10次中断后再采集一次数据。

2)  因为需要将这个变化了的数据,按每秒钟时间逐个存放,使用启用指针编程方法又比较合适。假设,将采集的数据依次逐个存放到指针的起始首地址VD100中,并存放为30个数据。

3)  当数据存放个数到达第31个时,第一个存放的数据将被覆盖新数据值,如此循环。

编程:

1)  在子程序中调用定时中断,SMB34 = 100(mS),中断事件号10,开中断

2)  在主程序初始该子程序

3)  在中断程序中比较数据采集

定义定时中断子程序:



在主程序中调用定义定时中断子程序:



在中断子程序编辑数据采集:VB0存放定时中断次数;VB1存放采集数据个数



将上述程序编译、保存后下载到cpu,新建“状态图表”,启用监控,为方面VD6的数据输入一些随机数据编辑一个小程序在主程序中,这样VD6的数据以每秒1.2递增,当数据大于25.0时,重新返回到1.2开始重复过程。图示:




   从状态图表中可以看到VD100的数据已经被第2次数据采集所覆盖了新值,本程序仅仅是我理解网友提问后自己的思路,若有出入,望那位网友看到后指出,并加以修改。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1395477&b_id=64&s_id=0&num=11

奇侠

经验值: 8830
发帖数: 791
精华帖: 4
回复:跟我一起玩200 smart PLC 关于数据的采集
推荐帖


只看楼主 只看精华 1楼 2017-05-17 08:19:16

那个帖子俺也看了...

学习了,感谢分享


good good study,day day up!!!!
以下网友喜欢您的帖子:

  
侠圣

经验值: 2918
发帖数: 366
精华帖: 0
回复:跟我一起玩200 smart PLC 关于数据的采集
推荐帖


只看楼主 只看精华 2楼 2017-05-17 08:58:52

 很难接触到所有的问题,谢谢分享,开阔眼界


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3003
发帖数: 455
精华帖: 0
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 3楼 2017-05-19 16:20:49

王工的帖子,一定要来学习


Automation
以下网友喜欢您的帖子:

  
游侠

经验值: 559
发帖数: 80
精华帖: 0
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 4楼 2017-05-23 22:17:32
以下是引用WWCWWC在2017-05-17 08:06:29的发言 >楼主

跟我一起玩200 smart PLC

关于数据的采集

  昨天晚上,看到一个网友的提问:“说需要将一个变化了的数据,按规定的定时时间有规律存放到一个连续的数据寄存器地址中、、、、、、”。类似处理这样的程序虽然有很多种编程方法,但我想了想,认为这样的方法可以测试一下。

编程思路:

1)  既然是定时存放数据,那做一个定时中断正好符合要求。新建一个定时中断,SMB34该定时中断时间以1mS为最小单位(最大255mS),按网友要求设置为1000mS = 1秒需要10次中断后再采集一次数据。

2)  因为需要将这个变化了的数据,按每秒钟时间逐个存放,使用启用指针编程方法又比较合适。假设,将采集的数据依次逐个存放到指针的起始首地址VD100中,并存放为30个数据。

3)  当数据存放个数到达第31个时,第一个存放的数据将被覆盖新数据值,如此循环。

编程:

1)  在子程序中调用定时中断,SMB34 = 100(mS),中断事件号10,开中断

2)  在主程序初始该子程序

3)  在中断程序中比较数据采集

定义定时中断子程序:



在主程序中调用定义定时中断子程序:



在中断子程序编辑数据采集:VB0存放定时中断次数;VB1存放采集数据个数



将上述程序编译、保存后下载到cpu,新建“状态图表”,启用监控,为方面VD6的数据输入一些随机数据编辑一个小程序在主程序中,这样VD6的数据以每秒1.2递增,当数据大于25.0时,重新返回到1.2开始重复过程。图示:




   从状态图表中可以看到VD100的数据已经被第2次数据采集所覆盖了新值,本程序仅仅是我理解网友提问后自己的思路,若有出入,望那位网友看到后指出,并加以修改。


请教大神,中断程序网络4,为啥要减124?


 
以下网友喜欢您的帖子:

  
游侠

经验值: 559
发帖数: 80
精华帖: 0
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 5楼 2017-05-23 22:29:51

 请问大神我想按条件采集数据,如VW10=1采集一次,VW10=2采集第二次,程序要在哪加上此条件?请大神赐教,谢谢!


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 楼主 6楼 2017-05-24 08:13:27
以下是引用天天向左在2017-05-23 22:29:51的发言 >5楼

 请问大神我想按条件采集数据,如VW10=1采集一次,VW10=2采集第二次,程序要在哪加上此条件?请大神赐教,谢谢!

取消循环指令,指针的移动按你这个条件进行就可以了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 楼主 7楼 2017-05-24 08:14:27
以下是引用天天向左在2017-05-23 22:17:32的发言 >4楼

请教大神,中断程序网络4,为啥要减124?

以下是引用WWCWWC在2017-05-17 08:06:29的发言 >楼主:跟我一起玩200 smart...

引用楼主详细内容:

跟我一起玩200 smart PLC

关于数据的采集

  昨天晚上,看到一个网友的提问:“说需要将一个变化了的数据,按规定的定时时间有规律存放到一个连续的数据寄存器地址中、、、、、、”。类似处理这样的程序虽然有很多种编程方法,但我想了想,认为这样的方法可以测试一下。

编程思路:

1)  既然是定时存放数据,那做一个定时中断正好符合要求。新建一个定时中断,SMB34该定时中断时间以1mS为最小单位(最大255mS),按网友要求设置为1000mS = 1秒需要10次中断后再采集一次数据。

2)  因为需要将这个变化了的数据,按每秒钟时间逐个存放,使用启用指针编程方法又比较合适。假设,将采集的数据依次逐个存放到指针的起始首地址VD100中,并存放为30个数据。

3)  当数据存放个数到达第31个时,第一个存放的数据将被覆盖新数据值,如此循环。

编程:

1)  在子程序中调用定时中断,SMB34 = 100(mS),中断事件号10,开中断

2)  在主程序初始该子程序

3)  在中断程序中比较数据采集

定义定时中断子程序:



在主程序中调用定义定时中断子程序:



在中断子程序编辑数据采集:VB0存放定时中断次数;VB1存放采集数据个数



将上述程序编译、保存后下载到cpu,新建“状态图表”,启用监控,为方面VD6的数据输入一些随机数据编辑一个小程序在主程序中,这样VD6的数据以每秒1.2递增,当数据大于25.0时,重新返回到1.2开始重复过程。图示:




   从状态图表中可以看到VD100的数据已经被第2次数据采集所覆盖了新值,本程序仅仅是我理解网友提问后自己的思路,若有出入,望那位网友看到后指出,并加以修改。


目的是将指针返回到起始。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19341
发帖数: 2076
精华帖: 72
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 8楼 2017-10-10 11:33:25

感谢W的分享,这是一个关于200/200smart指针的应用例程,就是&和*的灵活应用,我也跟着楼主玩了一把数据采集。

我有几点体会和楼主交流一下:

1,如果子程序只有一段,那么还是把它直接写在主程序中去好了。这个初始化定时中断参数的子程序,只有一段,这段直接写在主程序中,把前面的“always on”换成“first on”,不要为了结构化而结构化,简洁就是美,“less is more!”

2,AC1相当于一个临时变量,用它作指针就要另外加一个VB1来判断确切的地址指针,不如干脆把AC1换做VD2,省了VB1;

另外,逻辑上我更改了一下,当外部信号M0.0(可以当做I0.0)触发时,连续采集100个数据到缓冲区,并累加求和:



这里,用VD0作为地址指针,16#080001F4,表示V区500个字节,即VB500,16#080001F4换算成整数就是134218228


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67540
发帖数: 14782
精华帖: 100
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 9楼 2017-10-10 11:59:25

我更期待出现一个带通;带阻滤波器。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 671
发帖数: 83
精华帖: 0
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 10楼 2017-10-10 16:31:21

能不能贴个完整的 程序呢


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19341
发帖数: 2076
精华帖: 72
回复:跟我一起玩200 smart PLC 关于数据的采集


只看楼主 只看精华 11楼 2017-10-30 22:13:15

 200的指针和300的指针原理上是一样的,都是一个32位存储器,高8位代表存储区(具体的含义要查手册,或者做简单测试也可以)。

每种plc的MCU都有内存分配区(计算机上每个硬件也会自动分配地址的),这个内存分配区一定会公布给编程者了解,比如M区、T区、C区、Q区、V区……,一般为了方便编程员记忆,存储区是用字母开头,但实际上编译后都是16进制或者2进制数,给机器来执行寻址。早期的200plc,V区最大只支持到6000,现在可以到20000,但即便是20000,它也只占一个低字的数据,而地址是一个包含4字节的双字,那么,就用一个高字节来表示存储区。

200编程软件会简单介绍间接寻址,利用通配符&和*转换指针,这种间接寻址相对于300plc来说简单许多,指针操作也易用很多,可以对指针加或者减,200plc做一些小型任务的确是高效而胜任!


大道至简,知易行难
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
跟我一起玩200 smart PLC 关于数据的采集
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。