试图让 Codesys 从 HMI 运行 批处理文件
Trying to get Codesys to run a batch file from the HMI
所以目前,我正在尝试获取实习生为该项目留下的这段代码。我有一个批处理文件,单击时为 运行,并将执行 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));
这段代码没有错误,我只是想找到一种方法让批处理文件在用户单击特定按钮时自动执行。目前,用户必须自己手动进入文件资源管理器和 运行 批处理文件。
这是我在 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")
所以目前,我正在尝试获取实习生为该项目留下的这段代码。我有一个批处理文件,单击时为 运行,并将执行 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));
这段代码没有错误,我只是想找到一种方法让批处理文件在用户单击特定按钮时自动执行。目前,用户必须自己手动进入文件资源管理器和 运行 批处理文件。
这是我在 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")