从TwinCat保存数据时,csv文件未更新

eyh26e7m  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(221)

我已经创建了一个PLC程序在TwinCat和它的保存数据到csv文件。但变量值不更新。只有一个值是重复在csv文件中一次又一次。我做错了!!!这里是我的代码:
编程主变量//打开、关闭并写入功能块fbFileOpen:FB_文件打开; fb文件关闭:功能块_文件关闭; fb文件写入:FB_文件写入; fb格式字符串2:FB格式字符串2;文件获取时间:NT_获取时间;

//file variables
nState   : INT := 0;
nCounter : LREAL :=0;
hFile: UINT;
sPathName : T_MaxString;
sWriteBuffer : STRING(5000);
sBufferTemp : STRING(1000);
bBufferTemp : BOOL;
sFormat : STRING(255);

//General Variables
bFill: BOOL;
bWrite: BOOL;
rTimestamp : LREAL;
rCurrent: LREAL;
rActPos: LREAL;
nTimeMilli: INT;
i: ULINT;

结束变量
x一个一个一个一个x一个一个二个x
我创建了一个计数器,并将其分成更小的部分,这样我就可以在一秒钟内得到几个值。是否有更新语法我遗漏了?

2cmtqfgy

2cmtqfgy1#

问题似乎出在第30步,看起来你试图在一小时的第40分钟执行文件写入,其余时间你在组装要写入的字符串,但是你在第30步的开头有一行sWriteBuffer := 'Name, fCurrentScaled, fActPos $n';,在条件块之外,所以每次都会执行。
当第40分钟到了,你进入下一步写文件时,你仍然在执行那一行,这一行将覆盖fbFormatString2放入sWriteBuffer中的任何内容。我认为sWriteBuffersFormat的赋值语句应该在IF语句中。
另外,我不知道为什么在FOR循环中使用nTimeMilli作为索引变量时,会有nTimeMilli := WORD_TO_INT(fbGetTime.TIMESTR.wMilliseconds);这一行,它应该是i吗?
您没有展示bWrite是如何激活的,它会启动状态机,但如果它恰好在第40分钟被触发,您的步骤30将立即进入文件写入,而不组装要写入的值。

相关问题