今回はTwinCAT RuntimeのLocal 時間を取得するFunction Blockを紹介します。一部のApplicationsではNTP Serverなどでつながることがありますが、やっばりLocal Timeに依存するにも結構あると思います。
では、よろしくおねがいします。
ライブラリ追加
References>Add libraryします。
Tc2_Utilitiesを検索し、OKします。
Function Block
FB_LocalSystemTime Function Blockを使用することによってローカルWindows SystemのTask Barで表示してる時間とPLCをもらえることができます。(一部のアプリケーションではSNTP Serverなどで同期させる場合もありますが)
このFunction Blockではいくつの関数の組み合わせて作られています。
RTC_EX2:Time Stampを生成しLog 出力できます。でもローカルWindows Systemと時間同期してないのデメリットがあります。
NT_GetTime:as to be resynchronized cyclically via the NT_GetTime function block (see RTC block examples in the documentation).
あとはFB_GetTimeZoneInformation と NT_SetTimeToRTCTimeです。
Cycle timeはFBのInputパラメタ、dwCycleで構成何ms一回現在Local-timeをもらうかを設定できます。そしてSummer・Winter時間のTime Zoneオプションも提供しています。
出力FormatはTIMESTRUCTで、日付・時間をms Formatで出力されています。
*注意するのはFB_LocalSystemTime周期で呼び出しする必要があります。
VAR_INPUT
sNetID | T_AmsNetID | TwinCAT PCのNetwork ID、Localであれば空文字でOK |
bEnable | BOOL | 立ち上げ=同期開始 |
dwCycle | DWORD(1..86400) | 何秒で再同期する |
dwOpt | DWORD | オプションです。Bit0=True,Windows SystemはHardwareのRTCと同期する |
tTimeout | TIME | ADSコマンド実行のTimeout設定 |
VAR_OUTPUT
bValid | BOOL | 1=現在出力のTimeが有効 |
systemTime | TIMESTRUCT | ローカルWindows System Time |
tzID | E_TimeZoneID | Summer/Winter |
PROGRAM
次はサンプルCodeです。Runtime起動するたびにLocalSystemTimeのFBを呼び出し、時間のOffset間隔に時間を取ります。もしエラーが起きる場合はエラーFlagを立つ…のような簡単なプログラムです。
VAR
VAR
bTimeSyncError :BOOL;
bReset :BOOL;
bTimeIsSynced :BOOL;
TimeStruct :TIMESTRUCT;
InitTimeStruct :TIMESTRUCT;
LocalSystemTime :FB_LocalSystemTime;
dwCycle:INT:=1;
TON:TON;
END_VAR
VAR CONSTANT
VAR CONSTANT
ciTimeValidCheckOffset:INT:=1;
END_VAR
Code
IF NOT bTimeIsSynced THEN
TimeStruct:=InitTimeStruct;
END_IF
LocalSystemTime(
bEnable:=TRUE
,dwCycle:=1
);
TON(
IN:=NOT LocalSystemTime.bValid
,PT:=INT_TO_TIME(
(dwCycle+ciTimeValidCheckOffset)*1000
)
);
IF LocalSystemTime.bValid THEN
bTimeIsSynced:=TRUE;
TimeStruct:=LocalSystemTime.systemTime;
END_IF
IF TON.Q THEN
bTimeSyncError:=TRUE;
END_IF
IF bReset THEN
bTimeSyncError:=FALSE;
END_IF
結果
TimeStructにはちゃんとLocal Timeの時間を取りましたね。
Sampleコードは以下でダンロードできます。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT%20Project_getSystemTime.tnzip
はーい、お疲れ様です。
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)