目录
问题的提出
最开始是使用填表程序记录我需要的拔起速度值,但是填表程序最大只能记录100个条目,就算是运用了先入先出/后入先出指令,也比较麻烦,因为要不断写这一行代码,而且并不能帮我生成一个表格出来。
如果我要记录1000个条目甚至更多,靠填表程序记录就不满足我的要求了。
第二次尝试是触摸屏端的数据记录功能,具体可以查看我的这篇文章:🔗西门子触摸屏SMART 700 IE V3数据记录的记录周期,结论是它也无法解决我的问题。
论坛里的人建议还是得从PLC端着手,打电话给西门子的客服,他们的回答是叫我用S7-200的数据归档程序。
问题的初步解决
我买来了256K的存储卡插在了PLC上,也能读取到这一张卡。我顺着官方文档/视频以及数据归档向导(西门子官方文件-数据归档),生成了两个数据归档文件。
下面几张图是其中“右边数据归档”生成的过程图,一些域名命名和V存储区设定,完全是按照它官方文件来做的。
交叉引用看过VB4-VB7没有被占用
与传统不一样的是,这个一段程序不是通过上升沿指令来触发,而是利用主程序中的中断程序来每0.02s来触发。因为传统的方式触发太慢,我需要短时间多次触发且需要把这些数据都记录下来。
下图是主程序的中断程序片段(主程序启动对应子程序20ms一次中断):
下图为子程序关于数据记录的片段(网络10为速度转换计算,网络11为填表程序,网络12为数据归档程序):
数据归档的效果
让拔起速度对应的传感器产生变化,分别使用填表程序和数据归档记录。我在监控状态通过状态表查看填表程序存储区的数据是有的,从VW9000-VW9202,最大条目100条记录了100个,但是数据归档的存取地址VB4却是0,没有变化。
于是我首先通过上载功能从存储卡上传数据归档文件:
已经用PPI线连接PLC和PC,在S7-200 Explorer资源管理器软件里面找到256K存储卡并右击刷新(F5)后,再右击数据归档文件进行的上传,另存为一个.CSV文档。
数据归档文件不对
在S7-200 Explorer资源管理器,我右击这个数据归档文档的属性可以直接看到记录的数据条目为0,且已修改的时间还是昨天的时间,根本不是最新的时间。由此我推测保存在存储卡上的数据根本就没有同步到PC上,所以点开.CSV文件只能看到第一排一些常规标签(时间、日期、需要记录的域名)。 把PPI先拔了再连接电脑,再次刷新依然如此,修改时间没有变,里面的文件当然也没有改变。
我的疑问
在B站、抖音、西瓜视频上搜索关于如何使用S7-200数据归档操作的视频后,发现要不是直接给出的就是西门子官方的视频文件,要么就是不想关的内容(比如整个程序的归档,型号不是S7-200的其他内容)。最终我还是转投西门子官方论坛和提问(🔗西门子此问题的求助帖),发出求助帖后,有人就回复我这根本不能实现,速度太快,而且记录的数据太过于庞大。我知道是这么回事,但是填表程序就能实现,只不过它能够存储的条目有限,只有100个,况且我就是需要这些数据,不然我为什么费这么老大劲干吃力不讨好的事儿。
有人提出可以在HMI触摸屏这一端来解决,我也问过西门子售后客服,虽然趋势试图可以显示实时数据,但是无法把这么短间隔的数据导出来,用U盘的存储功能,把触摸屏里面的历史记录数据导出的时候,其采集周期可以达到100ms,但是记录周期最小只能是1s。也就是说你输出来的在U盘上的表格时间戳最小的间隔是1s。无法满足我的要求。
所以我还是只能寄希望于数据归档了,我的疑问是
1、数据归档是我这样子用的吗?
2、如果是,那为什么我上载的数据记录.csv文件为什么是空的?如果不是,请各位不吝赐教。
虽然我知道这个社区可能关注西门子PLC的人不多,但如果碰到一位大佬刚好看到我这个问题了呢。
非常感谢大家!!!
2024.03.30 第一次更新
在西门子提问有人回答:
无法使用的原因一方面是触发的方式不应该用中断,而是应该用上升沿;
一方面是记录周期还是太快了,0.02s,这个回答说周期0.1s应该是可以的。
接下来我就应该试一试这种方式来做数据记录,这个比起触摸屏的历史趋势图导出的间隔1s记录一个点还是要好一点,起码记录的数据变多了。
2024.03.31 第二次更新
如果把数据归档程序放在中断子程序中:
可以看出会有错误代码132(应该是有错误的,网上没有查到这个代码是指代什么意思),就算前面有数值也无法记录下来。
而将数据归档程序放在主程序中/其他子程序(不是中断子程序):
错误代码是0,也就是没有错误。但是在上载的数据归档文件中还是一个记录条目为0的空文档。于是我检查了一下交叉引用,看有没有地址重复。
从上图看是没有被占用的。两个字代表一个字节。
后来仔细思考发现是老毛病了,忘记数据归档是需要用上升沿P来触发的:
下面是最终的.CSV文档里面记录的数据:
终于有数据了。但是和我预想的数据有差别,因为在状态监控表里面显示的这个数据应该是4381才对,这里显示是0,还是有一点出入。
看来还是得继续探索
1)为什么值对不上?(最后还是没有解决)
2)如何在主程序中每隔0.1s给上升沿发送信号,这里只是展示了256K存储卡确实能记录数据的功能。(主要是那个上载的.CSV表格也不支持查看到毫秒级的时间戳数据啊)
3)如果时间间隔变得比1s小,数据归档还能记录下来吗?这个还不知道(确实不知道它是怎么记录的,一下只记录了一个数据,一下能记录两个数据)
2024.03.31 第三次更新
我在想西门子求助帖的回答说一秒最多记录10~15个数据记录,所以认为是不是我中断程序的间隔给得太短了,于是我将时间间隔20ms改为了100ms,得出来的结果依然是Error代码是132,上载的数据归档文件为空文件。所以不能在中断子程序里面使用数据归档子程序。
和之前一样,把数据归档放到主程序或者其他子程序里面去,这一次有个好消息是,出现了两个数据!
我可能需要放弃这种记录方式是因为以下几点:
- 时间滞后:我当时做完数据记录里面导出文件,可以看得出当时时间是下午17:45,而存储卡里面记录的拔起速度却是17:34,在十多分钟之前;
- 传输数据不对:最后我状态监控的数据拔起速度最大也就20,这里的数据完全不对;
- 时间戳不对:既然我记录的数据在秒级以下,就应该显示毫秒级的单位,上面这张图明显是同一秒但是不同毫秒记录的数据,这一点不喜欢;
- 触发麻烦:如果不能用中断程序触发,需要我把现在的中断子程序弄成一个一般子程序,然后利用上升沿触发,我不知道有什么方法可以间隔0.02s使得上升沿被触发;
综上, 我可能不会用数据归档的方式记录我需要的数据,可能外接一个单片机实现数据记录。
2024.04.11 第四次更新
重新去试了一下用其他方法对上升沿P触发:
第一种是利用SM0.5特殊触点,0.5s接通一次,0.5s不接通,但是这种方法的记录周期依旧是1s才记录一个数据,也就没有采用;
第二种是利用线圈的互锁,如下图:
但是这个记录出来的数据周期是1s记录35个数据,和我理想中的1s记录50个数据有差距,但是也是一个不错的提升;
第三种是利用定时器来实现发送方形脉冲,如下图:
这个得到的数据归档文档是1s能记录 30个数据,仍有差距。
之前不能用数据记录的原因,现在我来反驳一下:
- 时间滞后是未同步时钟:电脑本身有一个时钟,PLC内部也有一个时钟,要想把PLC外储存卡数据归档文件的时间显示和电脑一样的时间,需要在上传(上载)文件之间同步一下实时时钟;
- 传输数据不对:这可能和我自身的程序有关,没有调对;
- 时间戳不对:无法解决;
- 触发不再麻烦:线圈互锁和定时器都能解决这个触发麻烦的问题;
综上,数据归档还是能用,能不用单片机就不用单片机。