我已经创建了一个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
我创建了一个计数器,并将其分成更小的部分,这样我就可以在一秒钟内得到几个值。是否有更新语法我遗漏了?
1条答案
按热度按时间2cmtqfgy1#
问题似乎出在第30步,看起来你试图在一小时的第40分钟执行文件写入,其余时间你在组装要写入的字符串,但是你在第30步的开头有一行
sWriteBuffer := 'Name, fCurrentScaled, fActPos $n';
,在条件块之外,所以每次都会执行。当第40分钟到了,你进入下一步写文件时,你仍然在执行那一行,这一行将覆盖
fbFormatString2
放入sWriteBuffer
中的任何内容。我认为sWriteBuffer
和sFormat
的赋值语句应该在IF
语句中。另外,我不知道为什么在
FOR
循环中使用nTimeMilli
作为索引变量时,会有nTimeMilli := WORD_TO_INT(fbGetTime.TIMESTR.wMilliseconds);
这一行,它应该是i
吗?您没有展示
bWrite
是如何激活的,它会启动状态机,但如果它恰好在第40分钟被触发,您的步骤30将立即进入文件写入,而不组装要写入的值。