今回はTwinCAT PLCからWindows Applicationを呼び出す関数を紹介します。
ライブラリ追加
Reference>Add libraryします。
TC2_Utilitiesを検索し、追加してください。
Command Prompt Path確認
where cmdでCommand LineのPathを確認できます。
Function Block
今回使うのはNT_StartProcessというFunction BlocksでそのBlockがPLCからWindows applicationを呼び出すことができます。もちろんローカルPC限らずRemote PCでもOKです。
VAR_INPUT
NETID | T_AmsNetId | TwinCAT PCのAmeNetIdを指定できます。Localから空文字でOK。 |
PATHSTR | T_MaxString | 実行するApplicationのPath |
DIRNAME | T_MaxString | このApplication実行するWork Directory |
COMNDLINE | T_MaxString | そのコマンドLine |
START | BOOL | 立ち上げ=実行 |
TMOUT | TIME | ApplicationのTimeout設定 |
VAR_OUTPUT
BUSY | BOOL | True=実行中 |
ERR | BOOL | True=エラーある |
ERRID | UDINT | そのエラー内容 |
プログラム
では実際プログラムをやってみましょう。今回はTerminalからテキストFileを作成し、文字列を一番うしろにAppendします。
VAR
VAR // stCommand:STRING(512); stPrintingMessage:STRING:=’Hello,This is my message that write from TwinCAT PLC!’; NT_StartProcess:NT_StartProcess; // bTrigger:BOOL; bError:BOOL; iErrorID:UDINT; bReset:BOOL; END_VAR |
Code
stCommand:=’/C ‘; stCommand:=CONCAT(stCommand,’echo ‘); stCommand:=CONCAT(stCommand,stPrintingMessage); stCommand:=CONCAT(stCommand,’>> ‘); stCommand:=CONCAT(stCommand,’C:\Users\root\myfile.txt’); NT_StartProcess( NETID:=” ,PATHSTR:=cStCommandPath ,COMNDLINE:=stCommand ); IF bReset THEN bError:=FALSE; iErrorID:=0; bReset:=FALSE; NT_StartProcess(Start:=False); END_IF; IF bTrigger AND NOT bError THEN NT_StartProcess(Start:=TRUE); IF NT_StartProcess.ERR THEN bError:=TRUE; iErrorID:=NT_StartProcess.ERRID; END_IF bTrigger:=FALSE; NT_StartProcess(Start:=False); END_IF |
Result
該当するPathにmyfile.txtが作成されました。
中身はちゃんと文字列が出力されましたね。
注意
実行するコマンドはSTRINGなのでその文字列の長さを気をつけましょう。それ以上の数の文字格納できませんので、つまり、実行したいコマンドが一部しか実行にならないとか、エラーになるとかの可能性があります。
最後
はーい、お疲れ様です。
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Sample Codeは以下でダンロードできます:
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT%20Project_usingTerminal.tnzip
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)