TriggerTime作成について

いつも大変お世話になっております。トリガータイムの作成についてご相談及び質問させていただきたいです。

 

現在、以下のような式を組んでおり、この式を12個分(各月ごと)を並べたものをトリガータイムにしたいと考えています。

if day('*')<13 and month('*') =9 then '8/13' and Hour('*')=0 and Minute('*')=0 and Second('*')=0 else if day('*')>=13 and month('*') =9 then '9/13' and Hour('*')=0 and Minute('*')=0 and Second('*')=0else NoOutput()

 

しかしこの場合ですと、Variable1: Cannot convert 2020/09/13 0:00:00 to bool.とエラーが出てしまいます。そこでHour('*')=0 and Minute('*')=0 and Second('*')=0 を抜かして

if day('*')<13 and month('*') =9 then '8/13' else if day('*')>=13 and month('*') =9 then '9/13' else if day('*')<13 and month('*') =1 then '12/13' else if day('*')>=13 and month('*') =1 then '1/13' else if day('*')<13 and month('*') =2 then '1/13' else if day('*')>=13 and month('*') =2 then '2/13'else if day('*')<13 and month('*') =3 then '2/13' else if day('*')>=13 and month('*') =3 then '3/13'else if day('*')<13 and month('*') =4 then '3/13' else if day('*')>=13 and month('*') =4 then '4/13'else if day('*')<13 and month('*') =5 then '4/13' else if day('*')>=13 and month('*') =5 then '5/13'else if day('*')<13 and month('*') =6 then '5/13' else if day('*')>=13 and month('*') =6 then '6/13'else if day('*')<13 and month('*') =7 then '6/13' else if day('*')>=13 and month('*') =7 then '7/13'else if day('*')<13 and month('*') =8 then '7/13' else if day('*')>=13 and month('*') =8 then '8/13'else NoOutput()

の分析を実行すると、評価自体はされるのですが、これを関数FindEq()内のTriggerTimeとしてうまく使用できず、式が実行されません。

 

行いたいこととしては現在の日付が13日未満であれば前月の13日から今月の12日までの間、13日以上であれば今月の13日から来月の12日までの間で最大デマンドを示した時刻をFindEq()関数を用いて表示させたいと考えています。FindEq('Demand1(こちら側で積算値の差をとって表示している値,'TrrigerTime','*','Demand1MAX(この値はお客様先から直接データをPIシステム上に結び付けているもの')'というような式を実行させたいと考えています。

 

わかりにくい説明で大変申し訳ございませんが、何かご教授いただければと思います。どうぞよろしくお願いいたします。

Parents
  • 以下の記述をお試しください:

     

    if day('*') < 13 and month('*') = 9 then '08/13' else if day('*') >= 13 and month('*') = 9 then '09/13' else NoOutput()

     

    日付を指定する場合、年や時間を指定しない場合、暗黙的に年は今年、時間は00:00:00として扱われます。

    関数andは条件式において複数の条件を指定する場合と、

     

    二つの式が共に真であるかどうかを判定する場合に使用するもので、

     

    複数の時間を結合するようなことはできません。
  • Motoki Tamaneさま

     

     

    お返事遅くなり、申し訳ございません。ご教授いただきありがとうございます。

     

    追加の質問となり、申し訳ないのですが、そのトリガータイムを用いて例えば今月の日にちが13日以上であれば9月13日から現在の時間までの間で最高値を示した時の時刻を取り出す又は今月の日にちが13日未満であれば8月13日から現在の時間までの間で最高値を示した時の時刻を取り出すような関数はございますでしょうか?FindEQの関数を用いると、期間指定をする際に、時間式にしなければならず、上記に示していただいたトリガータイムが使用できなかったので、ご教授いただければと思います。お忙しい中大変恐縮ですが、どうぞよろしくお願いいたします。

  • 時刻を取り出す関数はTimeStamp関数が用意されております。

    以下の式になるかと思います:

     

    If Day('*') >= 13 then TimeStamp(TagMax('属性名','13','*')) else if Day('*') < 13 then TimeStamp(TagMax('属性名','13-1mo','*')) else NoOutput()

     

    関数TimeStampで、指定された値の持つタイムスタンプを取得できます。

     

    この指定された値に関数TagMaxを使用し、対象の属性の最大値を記録した値を取得します。

    TagMaxの範囲として、'13'と入力することで今月の13日の00:00:00になり、'13-1mo'で先月の13日の00:00:00になります。

  • Motoki Tamaneさま

     

    早急なご対応まことにありがとうございます。無事に行いたい表示をすることができました。

    またご質問させていただく機会があるとは思いますが、どうぞよろしくお願いいたします。

Reply Children
No Data