TwinCAT - 如何检查 Beckhoff PLC 目录的内容
TwinCAT - How to check contents of a directory from Beckhoff PLC
我正在尝试在 PLC 中执行文件管理。目前,NT_StartProcess 的工作方式如下,但在生成进程后我不会收到任何反馈。有没有办法从 PLC 检查目录的内容?有什么方法可以得到 NT_StartProcess 的反馈吗?
// File Locations
sTargetFilePath := 'C:\LocalHistory\test.job';
sTargetDirectory := 'C:\CustomerDir';
// Build Command String
sCommand := '/C '; // Special command indicating command string input
sCommand := CONCAT(sCommand, 'move '); // Add move command
sCommand := CONCAT(sCommand, sTargetFilePath); // Add target file
sCommand := CONCAT(sCommand, ' '); // Required space for command
sCommand := CONCAT(sCommand, sTargetDirectory); // Add target location
// Output -> ‘/C move C:\NET-DRIVE\NewOrders\Original.xml 'C:\NET-DRIVE\OldOrders’
Process(
NETID := '', // Local System
PATHSTR := 'C:\Windows\System32\cmd.exe', // Path to local cmd executable
COMNDLINE := sCommand, // Comnmand to be executed
ERR => bError, // Error Output
ERRID => iErrorId // Error Id Output
);
// Trigger Command
IF bTrigger THEN
bTrigger := FALSE;
Process(START:=TRUE);
Process(START:=FALSE);
END_IF
是的,有办法。您正在寻找的是这两个功能块:FB_EnumFindFileList, FB_EnumFindFileEntry
至于NT_StartProcess的反馈,你不能直接得到。我一直在使用两种解决方法:
- 将结果写入文本文件,并使用 TwinCAT 打开该文件。
在您的情况下,它将是这样的:
‘/C move C:\NET-DRIVE\NewOrders\Original.xml 'C:\NET-DRIVE\OldOrders && echo DONE > out.txt || echo FAIL > out.txt’
&&
之后的命令将仅在先前成功的情况下执行。 ||
之后的命令只有在先前失败时才会执行。
>
运算符将上一个命令的输出写入文件
上面的例子应该创建一个文件 out.txt
并在里面写入 DONE
或 FAIL
。我现在没有带 TwinCAT 的 PLC,但它可以在 windows cmd.
中工作
- 编写一个程序(例如在 C# 中)执行需要完成的操作,然后通过 ADS 连接到 TwinCAT 以将结果放入变量中
我正在尝试在 PLC 中执行文件管理。目前,NT_StartProcess 的工作方式如下,但在生成进程后我不会收到任何反馈。有没有办法从 PLC 检查目录的内容?有什么方法可以得到 NT_StartProcess 的反馈吗?
// File Locations
sTargetFilePath := 'C:\LocalHistory\test.job';
sTargetDirectory := 'C:\CustomerDir';
// Build Command String
sCommand := '/C '; // Special command indicating command string input
sCommand := CONCAT(sCommand, 'move '); // Add move command
sCommand := CONCAT(sCommand, sTargetFilePath); // Add target file
sCommand := CONCAT(sCommand, ' '); // Required space for command
sCommand := CONCAT(sCommand, sTargetDirectory); // Add target location
// Output -> ‘/C move C:\NET-DRIVE\NewOrders\Original.xml 'C:\NET-DRIVE\OldOrders’
Process(
NETID := '', // Local System
PATHSTR := 'C:\Windows\System32\cmd.exe', // Path to local cmd executable
COMNDLINE := sCommand, // Comnmand to be executed
ERR => bError, // Error Output
ERRID => iErrorId // Error Id Output
);
// Trigger Command
IF bTrigger THEN
bTrigger := FALSE;
Process(START:=TRUE);
Process(START:=FALSE);
END_IF
是的,有办法。您正在寻找的是这两个功能块:FB_EnumFindFileList, FB_EnumFindFileEntry
至于NT_StartProcess的反馈,你不能直接得到。我一直在使用两种解决方法:
- 将结果写入文本文件,并使用 TwinCAT 打开该文件。 在您的情况下,它将是这样的:
‘/C move C:\NET-DRIVE\NewOrders\Original.xml 'C:\NET-DRIVE\OldOrders && echo DONE > out.txt || echo FAIL > out.txt’
&&
之后的命令将仅在先前成功的情况下执行。 ||
之后的命令只有在先前失败时才会执行。
>
运算符将上一个命令的输出写入文件
上面的例子应该创建一个文件 out.txt
并在里面写入 DONE
或 FAIL
。我现在没有带 TwinCAT 的 PLC,但它可以在 windows cmd.
- 编写一个程序(例如在 C# 中)执行需要完成的操作,然后通过 ADS 连接到 TwinCAT 以将结果放入变量中