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的反馈,你不能直接得到。我一直在使用两种解决方法:

  1. 将结果写入文本文件,并使用 TwinCAT 打开该文件。 在您的情况下,它将是这样的:
‘/C move C:\NET-DRIVE\NewOrders\Original.xml 'C:\NET-DRIVE\OldOrders && echo DONE > out.txt || echo FAIL > out.txt’

&& 之后的命令将仅在先前成功的情况下执行。 || 之后的命令只有在先前失败时才会执行。
> 运算符将上一个命令的输出写入文件
上面的例子应该创建一个文件 out.txt 并在里面写入 DONEFAIL 。我现在没有带 TwinCAT 的 PLC,但它可以在 windows cmd.

中工作
  1. 编写一个程序(例如在 C# 中)执行需要完成的操作,然后通过 ADS 连接到 TwinCAT 以将结果放入变量中