twincat - TwinCAT 无法将数据保存到 CSV
问题描述
我是拖拉机牵引团队的一员,我们有基于 Bechoff CX8190 的 PLC 用于数据记录。系统大部分时间都在工作,但时不时地将传感器值(每 10 毫秒收集一次)保存到 CSV 失败(主要在 csv 行的中间)。编写代码的人是 TwinCAT 的新手,不知道如何找出导致该问题的原因。任何想法在哪里寻找原因。
解决方案
在 TwinCAT 中,写入文件始终是一个异步操作。也就是说,这不是实时动作,写过程在 10ms 的任务周期内完成是不安全的。因此,这些功能块总是有一个BUSY输出,必须对其进行评估,并且必须连续调用功能块,直到BUSY输出返回FALSE。只有这样才能执行新的写入命令。
我通常用一个双边缓冲算法来处理这个任务。假设缓冲区数组有 2x100 个条目。所以用样本值填写前 100 个条目。然后将它们与一个命令一起写入文件。完成后,清理缓冲区。与此同时,缓冲区的另一半可以填充样本值。如果第二面已满,请将它们全部一起写入文件......等等。所以你有更多的时间来访问文件系统(在上面的例子中 100x10ms=1s)作为 10ms 的任务循环时间。
但这只是根据我的经验提出的建议。我同意其他人的观点,一些代码真的很有帮助。
推荐阅读
- javascript - 更改每个选项的占位符文本
- javascript - 如何使用struts和jquery将行的值传递给单选按钮
- android-studio - 更新到 Android Oreo 后出现奇怪的编辑框
- xamarin.forms - 如何更改 Xamarin.forms 中选项卡项的大小
- asp.net-core - 来自 jsonschema 文件的 Swashbuckle 远程定义
- c# - C# Gradebook 程序,从文本文件中读取数据
- java - Java JSP servlet 500 错误
- c# - Selenium webdriver C#:无法识别 HTML 表单标签内的按钮元素
- angular - 如何检查Angular2中加载的元素?
- c++ - 优先队列模板推送功能