我正在用另一个人的代码接管一个项目。我有一个 PLC,目前有来自压力传感器和热电偶的输入。然后它将这些数据缩放为 PSI 和华氏温度。从这些传感器中的每一个设置数据的方式将被格式化为一个数组。因此,一旦数据被缩放,它就位于一个数组中,该数组也在程序的网络变量列表中。我试图从数组中获取这些值中的每一个,每隔一定时间记录一次值(为了清楚起见,每秒记录 1 次),然后每秒将每条数据导出到 CSV 文件。甚至不知道该去哪里。这是我留下的代码,但我觉得它似乎不必要地复杂?
//This is the support class for File_Handler
FUNCTION_BLOCK fileWrite
VAR_INPUT
xWrite : BOOL;
sData : STRING(200);
uiLineLength : INT := 200;
sDirectory : STRING := 'C:\ProgramData\CODESYS\CODESYSHMIWinV3\D5050FE1\PlcLogic\data';
//sDirectory : STRING := '/home/cds-apps/PlcLogic/data/';
sFilename : STRING;
END_VAR
VAR_OUTPUT
BytesWritten : __XWORD;
BytesWrittenTotal: DWORD;
xDone: BOOL;
END_VAR
VAR
hFile_: sysfile.RTS_IEC_HANDLE := sysfile.RTS_INVALID_HANDLE;
FileWriteResult: sysfile.RTS_IEC_RESULT;
FileOpenResult: sysfile.RTS_IEC_RESULT;
state: INT;
sys_Us_start: SYSTIME;
sys_Us_end: SYSTIME;
WriteTimeMS: ULINT;
END_VAR
sFilename := CONCAT(sDirectory, sFilename);
hFile_ := SysFileOpen(szFile:= sFilename, am:= ACCESS_MODE.AM_APPEND_PLUS, pResult:= ADR(FileOpenResult));
SysTimeGetUs(pUsTime:=sys_Us_start );
BytesWritten := SysFileWrite(hFile:= hfile_, pbyBuffer:= ADR(sData), ulSize:= uiLineLength, pResult:= ADR(FileWriteResult));
BytesWrittenTotal := BytesWrittenTotal + BytesWritten;
SysTimeGetUs(pUsTime:=sys_Us_end );
WriteTimeMS := (sys_Us_end - sys_Us_start)/1000;
SysFileClose(hFile:= hFile_);
我不知道该去哪里使用此代码。它确实创建了一个 CSV 文件,但我希望能够每秒为一段数据创建一个 CSV 文件?如果有人有任何想法或资源,我可以检查一下,那就太好了。