2

因此,目前,我正在尝试获取实习生为该项目留下的代码。我有一个单击时运行的批处理文件,它将执行一个 powershell 脚本,该脚本将生成的 CSV 文件从收集的数据转换为 Excel 文件。我试图在 HMI 中单击按钮时自动执行此过程,但不确定如何在 Codesys 中调用批处理文件。

我尝试在代码的不同位置调用批处理文件。单击按钮时不会运行它。

FUNCTION ScriptExecute 
VAR
    szStdOout : STRING(100);    
    dutResult : sysfile.RTS_IEC_RESULT;
    szCommand: STRING;
END_VAR
szCommand := '/home/cds-apps/PlcLogic/data/ psExecuter.bat';
SysProcess.SysProcessExecuteCommand2(pszCommand:=szCommand, pszStdOut:=szStdOout, udiStdOutLen:= SIZEOF(szStdOout), pResult := ADR(dutResult));

这段代码没有错误,我只想找到一种方法,让批处理文件在用户单击特定按钮时自动执行。目前,用户必须手动进入文件资源管理器并自己运行批处理文件。

4

1 回答 1

1

这是我在 Windows 10 机器上使用 codesys V3 测试的代码:

声明部分:

PROGRAM PLC_PRG
VAR
    pRtsIecResult   : POINTER TO SysProcess.RTS_IEC_RESULT;
    bStart          : BOOL;
END_VAR

实现部分:

IF bStart 
THEN

    bStart := FALSE;

    SysProcess.SysProcessCreate2(
        pszApplication  := 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe',
        pszCommandLine  := '-executionpolicy remotesigned -File C:\Users\fboid\Desktop\HelloWorld.ps1',
        ulFlags         := SysProcess.SYSPROCESS_CREATEFLAG_INTERACTIVE,
        pResult         := pRtsIecResult
    );

END_IF

如您所见,我使用了 SysProcess 库的 SysProcessCreate2 函数。因为 SysProcess 库中的函数依赖于操作系统,所以它们可能无法在所有平台上运行。

我执行的 powershell 脚本非常简单:

Write-Host 'Hello World!'
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
于 2019-08-30T08:25:24.113 回答