如何在 TwinCat3 中保存整型变量的值?
How to save value of integer variable in TwinCat3?
我在 TwinCat 中有一个程序,其中每 10 秒更新 5 个整数变量以表示 5 个泵的状态。我想将生成的这些值保存到文本文件或 CSV 文件中,我以后可以从 PLC 中提取这些值。代码如下:
IF toninPumpPulse.Q THEN
rinPump1RPM := (inPump1Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump1Count := 0; //Reset counter for next 10 second sample
rinPump2RPM := (inPump2Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump2Count := 0; //Reset counter for next 10 second sample
rinPump3RPM := (inPump3Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump3Count := 0; //Reset counter for next 10 second sample
rinPump4RPM := (inPump4Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump4Count := 0; //Reset counter for next 10 second sample
rinPump5RPM := (inPump5Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump5Count := 0; //Reset counter for next 10 second sample
我希望创建一个新的 CSV 文件,然后用变量值填充。我对 TwinCat 缺乏经验,阅读 Beckhoff 网站也没有什么帮助。
您想组合使用几个功能块:
- FB_FileOpen
- FB_FilePuts
- FB_FileClose
Beckhoff infosys 上已提供您需要的所有文档和示例代码:
另请参阅有关一般如何写入文件的信息:
开源日志库TcLog 可能对您有所帮助。它为文件系统提供扩展的日志记录功能。
我写了一个blog post介绍,你也可以在那里下载一个预编译库
这就是您在您的案例中的使用方式:
首先,定义一个 TcLogCore
类型的静态记录器实例,其中包含配置:
VAR
CoreLogger : TcLogCore;
END_VAR
CoreLogger
.MinimumLevel(E_LogLevel.Warning)
.WriteToFile('c:\logs\', 'pumpValues.csv')
.RunLogger();
接下来,定义一个实际记录消息的记录器TcLog
:
VAR
Logger : TcLog;
END_VAR
您可以使用该记录器生成如下日志消息:
Logger
.OnCondition(toninPumpPulse.Q)
.AppendAny(rinPump1RPM)
.AppendString(',')
.AppendAny(rinPump2RPM)
.AppendString(',')
.AppendAny(rinPump3RPM)
.AppendString(',')
.AppendAny(rinPump4RPM)
.AppendString(',')
.AppendAny(rinPump5RPM)
.ToCustomFormat('');
确保toninPumpPulse.Q
只有一个周期true
,否则会产生大量消息。也看看 logging on rising/falling edges。
由于记录器是作为单例实现的,你可以在程序的任何地方使用它,它会自动使用TcLogCore
的配置。
库中还有更多选项,例如设置日志文件的滚动间隔或自动删除可能对您有用的旧文件。
我在 TwinCat 中有一个程序,其中每 10 秒更新 5 个整数变量以表示 5 个泵的状态。我想将生成的这些值保存到文本文件或 CSV 文件中,我以后可以从 PLC 中提取这些值。代码如下:
IF toninPumpPulse.Q THEN
rinPump1RPM := (inPump1Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump1Count := 0; //Reset counter for next 10 second sample
rinPump2RPM := (inPump2Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump2Count := 0; //Reset counter for next 10 second sample
rinPump3RPM := (inPump3Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump3Count := 0; //Reset counter for next 10 second sample
rinPump4RPM := (inPump4Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump4Count := 0; //Reset counter for next 10 second sample
rinPump5RPM := (inPump5Count/6)*6; //Pulse sample for 10 seconds. 6 pulses = 1 round.
inPump5Count := 0; //Reset counter for next 10 second sample
我希望创建一个新的 CSV 文件,然后用变量值填充。我对 TwinCat 缺乏经验,阅读 Beckhoff 网站也没有什么帮助。
您想组合使用几个功能块:
- FB_FileOpen
- FB_FilePuts
- FB_FileClose
Beckhoff infosys 上已提供您需要的所有文档和示例代码:
另请参阅有关一般如何写入文件的信息:
开源日志库TcLog 可能对您有所帮助。它为文件系统提供扩展的日志记录功能。
我写了一个blog post介绍,你也可以在那里下载一个预编译库
这就是您在您的案例中的使用方式:
首先,定义一个 TcLogCore
类型的静态记录器实例,其中包含配置:
VAR
CoreLogger : TcLogCore;
END_VAR
CoreLogger
.MinimumLevel(E_LogLevel.Warning)
.WriteToFile('c:\logs\', 'pumpValues.csv')
.RunLogger();
接下来,定义一个实际记录消息的记录器TcLog
:
VAR
Logger : TcLog;
END_VAR
您可以使用该记录器生成如下日志消息:
Logger
.OnCondition(toninPumpPulse.Q)
.AppendAny(rinPump1RPM)
.AppendString(',')
.AppendAny(rinPump2RPM)
.AppendString(',')
.AppendAny(rinPump3RPM)
.AppendString(',')
.AppendAny(rinPump4RPM)
.AppendString(',')
.AppendAny(rinPump5RPM)
.ToCustomFormat('');
确保toninPumpPulse.Q
只有一个周期true
,否则会产生大量消息。也看看 logging on rising/falling edges。
由于记录器是作为单例实现的,你可以在程序的任何地方使用它,它会自动使用TcLogCore
的配置。
库中还有更多选项,例如设置日志文件的滚动间隔或自动删除可能对您有用的旧文件。