Beckhoff#TwinCAT3 Local Timeを取得する

今回は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

sNetIDT_AmsNetIDTwinCAT PCのNetwork ID、Localであれば空文字でOK
bEnableBOOL立ち上げ=同期開始
dwCycleDWORD(1..86400)何秒で再同期する
dwOptDWORD オプションです。Bit0=True,Windows SystemはHardwareのRTCと同期する
tTimeoutTIMEADSコマンド実行のTimeout設定

VAR_OUTPUT

bValidBOOL1=現在出力のTimeが有効
systemTimeTIMESTRUCTローカルWindows System Time
tzIDE_TimeZoneIDSummer/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 (*を@に)

Footer_Basic

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする