今回は自分のパソコン上でMessageboxやテキスト出力の方法を紹介しようと思います。
イメージ的には、Messageboxはこんな感じ:
そしてテキスト出力はこんな風になります:
Function
使用するFunctionはADSLOGLREAL・ADSLOGDINT・ADSLOGLREALになります。3つのFBも似てるのInterfaceなので、Argだけが違うになります。
ADSLOGLREAL
このFunctionは文字を出力できます。そして文字列には1つの8Bytesの実数をパラメタとして参照することが可能です。使用符号は%fになります。
Example:”Hello World!%f”
VAR_INPUT | ||
msgCtrlMask | DWORD | 文字出力の種類をError/Messagebox/Warningなどを定義できます。 |
msgFmtStr | T_MaxString | 最大255文字です。 |
lrealArg | LREAL | その文字列に含まれたいの8Bytes実数 |
ADSLOGDINT
このFunctionは文字を出力できます。そして文字列には1つの4Bytesの整数をパラメタとして参照することが可能です。使用符号は%dになります。
Example:”Hello World!%d”
VAR_INPUT | ||
msgCtrlMask | DWORD | 文字出力の種類をError/Messagebox/Warningなどを定義できます。 |
msgFmtStr | T_MaxString | 最大255文字です。 |
lrealArg | LREAL | その文字列に含まれたいの4Bytes整数 |
ADSLOGSTR
このFunctionは文字を出力できます。そして文字列にはもう一つの文字列をパラメタとして参照することが可能です。使用符号は%sになります。
Example:”Hello World!%s”
VAR_INPUT | ||
msgCtrlMask | DWORD | 文字出力の種類をError/Messagebox/Warningなどを定義できます。 |
msgFmtStr | T_MaxString | 最大255文字です。 |
lrealArg | T_MaxString | その文字列に含まれたいの文字列(最大255) |
msgCtrlMask
3つの関数でもこのmsgCtrlMaskパラメタがあります。
以下のGlobal定数でどんなMessage Typeを定義するかを設定できます。
ADSLOG_MSGTYPE_HINT | Message=Advice |
ADSLOG_MSGTYPE_WARN | Message=Warning |
ADSLOG_MSGTYPE_ERROR | Message=Error |
ADSLOG_MSGTYPE_LOG | Message=Log |
ADSLOG_MSGTYPE_MSGBOX | Message=Messagebox |
ADSLOG_MSGTYPE_RESOURCE | Supportしない |
ADSLOG_MSGTYPE_STRING | Message=文字列、Default |
Example
以下は簡単なExampleになります。bMsgBoxが立ち上げると、ADSLOGDINTはMessagebox Type、ADSLOGSTRは文字列 Type、 ADSLOGLREALはWarning Typeを出力するようにします。
VAR
VAR; bMsgBox :BOOL; R_TRIG:R_TRIG; diStation:DINT:=1; sStation:STRING:=’1A’; rErrorTemperature:LREAL:=70.0; END_VAR |
Code
R_TRIG( CLK:=bMsgBox ); IF R_TRIG.Q THEN ADSLOGDINT( msgCtrlMask:=ADSLOG_MSGTYPE_MSGBOX ,msgFmtStr:=’Something is Error in Station %d!’ ,dintArg:=diStation ) ; ADSLOGSTR( msgCtrlMask:=ADSLOG_MSGTYPE_ERROR ,msgFmtStr:=’Something is Error in Station %s’ ,strArg:=sStation ) ; ADSLOGLREAL( msgCtrlMask:=ADSLOG_MSGTYPE_WARN ,msgFmtStr:=’The Station Temperature is %f’ ,lrealArg:=rErrorTemperature ); bMsgBox:=False; END_IF |
以下のLinkでSample Codeダウンロードしてください。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT%20Project_ADSLOG.tnzip
はーい、お疲れ様です。
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)