設備監視項目
モニタリング基準は、1日24時を起点として、設備稼働費の稼働時間を表示する.
デバイスデータを格納し、デバイスモードとテーブルを作成し、デバイスデータを格納した後、そのモードから記憶値を取得して監視するプログラム.
このプロジェクトの例外部分:クライアントにはビジネスロジックが含まれています.
(クライアントは元のサーバで加工されたデータを表示するだけで......)
このプロジェクトには少し時間がかかりました.
コードをあまり書かず、データの加工に多くの時間を費やし、設備の運行時間計算ロジックを処理しました.
加えて、クライアント開発の過程で、設備の通信アウトソーシングを担当する企業は、設備の正常なデータを受け取っていないため、業務ロジックを修正したり、列データを変更したりするなど多くの問題がある.
つまり、ビジネスロジックがクライアントに導入されると、次のような問題が発生します.
そのクライアントプログラムが複数のコンピュータにインストールされて実行されると、
クライアントの実行により、サーバからデータがロードされる時点が異なるため、すべてのクライアントが同じ結果を同時に得ることはできません.
すなわち,現場A,現場Bでそのプログラムを回すと,異なるデータが見られる.
現場Aクライアント1(192.168.0.5)
デバイスデータa:36%
デバイスデータb:20
デバイスデータc:10%
現場Bクライアント2(192.168.0.7)
デバイスデータa:35%
デバイスデータb:17
デバイスデータc:10%
このように監視画面に表示されます...
ではこれはリアルタイムではありません
クライアントには、複雑なsql関数を含むクエリー文(UTC時間の変更、今日のみのクエリーなど)が含まれています.デバイスデータはN時間(秒)ごとにロードされ、ロード速度も遅い.
これらのビジネスロジックは、サーバ上で処理する必要があることを担当者に通知しました.
このアイテムは異なるモード(?)を使用するため
現在のサーバで使用されているプラットフォームでは、低論理(?)を処理できないというわけではありません.
これは奇妙なプロジェクトで、論理処理部分をクライアントに渡しました.
設備事業者側の時間関連データが累積時間しか与えられないのもおかしい...
つまり、機器は初回稼働時間からの累積時間データしか入力できないため、この値を用いて機器の今日1日の稼働時間と非稼働時間を求める必要がある.
起動時間を取得する前に、まずデバイスにクエリー文を送信してデータを取得します.
設備表に格納されている設備をリストに列挙する.以降,各デバイスのデバイスデータを取得するためには,クエリ文を発行する必要がある.
デバイスデータはUTC時間で格納されるため、ローカルに表示する必要があるsqlクエリ文を追加する必要があります.
デバイス使用時間を求める方法は、1行の積算時間と2行の積算時間を減算して使用時間を得ることで、2つの値から差分値を求めた後、結果をタイムスタンプに変換します.
累積時間値をダブルに変換し、秒値を求める.秒値をTimespanに変換します.
プレイヤーが設定したN時間ごとに画面をリフレッシュします.
上記のクエリは、リフレッシュのたびに実行され、サーバに登録されている最新のデータを取得します.
デバイスコントロールは、サーバに登録されているデバイスの数に応じて生成され、画面に表示されるデバイスの数を超え、次のページに残りのデバイスが表示されます.
デバイスデータを格納し、デバイスモードとテーブルを作成し、デバイスデータを格納した後、そのモードから記憶値を取得して監視するプログラム.
このプロジェクトの例外部分:クライアントにはビジネスロジックが含まれています.
(クライアントは元のサーバで加工されたデータを表示するだけで......)
このプロジェクトには少し時間がかかりました.
コードをあまり書かず、データの加工に多くの時間を費やし、設備の運行時間計算ロジックを処理しました.
加えて、クライアント開発の過程で、設備の通信アウトソーシングを担当する企業は、設備の正常なデータを受け取っていないため、業務ロジックを修正したり、列データを変更したりするなど多くの問題がある.
つまり、ビジネスロジックがクライアントに導入されると、次のような問題が発生します.
そのクライアントプログラムが複数のコンピュータにインストールされて実行されると、
クライアントの実行により、サーバからデータがロードされる時点が異なるため、すべてのクライアントが同じ結果を同時に得ることはできません.
すなわち,現場A,現場Bでそのプログラムを回すと,異なるデータが見られる.
デバイスデータ稼働率
現在時刻:2010-12-01 13:10:23
現場Aクライアント1(192.168.0.5)
デバイスデータa:36%
デバイスデータb:20
デバイスデータc:10%
現場Bクライアント2(192.168.0.7)
デバイスデータa:35%
デバイスデータb:17
デバイスデータc:10%
このように監視画面に表示されます...
ではこれはリアルタイムではありません
クライアントには、複雑なsql関数を含むクエリー文(UTC時間の変更、今日のみのクエリーなど)が含まれています.デバイスデータはN時間(秒)ごとにロードされ、ロード速度も遅い.
これらのビジネスロジックは、サーバ上で処理する必要があることを担当者に通知しました.
このアイテムは異なるモード(?)を使用するため
現在のサーバで使用されているプラットフォームでは、低論理(?)を処理できないというわけではありません.
これは奇妙なプロジェクトで、論理処理部分をクライアントに渡しました.
設備事業者側の時間関連データが累積時間しか与えられないのもおかしい...
つまり、機器は初回稼働時間からの累積時間データしか入力できないため、この値を用いて機器の今日1日の稼働時間と非稼働時間を求める必要がある.
起動時間を取得する前に、まずデバイスにクエリー文を送信してデータを取得します.
設備表に格納されている設備をリストに列挙する.以降,各デバイスのデバイスデータを取得するためには,クエリ文を発行する必要がある.
デバイスデータはUTC時間で格納されるため、ローカルに表示する必要があるsqlクエリ文を追加する必要があります.
string _sQueryLog =
$"select DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()),
{DefineConstants.테이블명}.ncdatetime)
AS ncdatetimelocal, * from {DefineConstants.테이블명}
where {_sConvertedDateTimeFieldLogQuery}
between CONVERT(datetime,'{_dtNow.Date.ToString("yyyy-MM-dd 00:00:00",
System.Globalization.CultureInfo.InvariantCulture)}')
and CONVERT(datetime,'{_dtNow.Date.ToString("yyyy-MM-dd 23:59:59",
System.Globalization.CultureInfo.InvariantCulture)}')
and nccode='{_keyValuePairMachine.Key}'
ORDER BY ncdatetime desc";
// 변환된 결과:
select DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()),
테이블명.ncdatetime)
AS ncdatetimelocal, * from 테이블명
where CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
테이블명.ncdatetime),
DATENAME(TzOffset, SYSDATETIMEOFFSET()) ))
between CONVERT(datetime,'2021-02-09 00:00:00')
and CONVERT(datetime,'2021-02-09 23:59:59')
and nccode='설비코드'
ORDER BY ncdatetime desc
.
.
.
// 다른 테이블의 데이터를 가져오는 비슷한 쿼리가 또 있다.
.
.
.
.
まずsqlクエリ文で各デバイスの今日のすべてのデータを取得し、ループを使用してデバイスの累積時間rowを取得します.デバイス使用時間を求める方法は、1行の積算時間と2行の積算時間を減算して使用時間を得ることで、2つの値から差分値を求めた後、結果をタイムスタンプに変換します.
累積時間値をダブルに変換し、秒値を求める.秒値をTimespanに変換します.
プレイヤーが設定したN時間ごとに画面をリフレッシュします.
上記のクエリは、リフレッシュのたびに実行され、サーバに登録されている最新のデータを取得します.
デバイスコントロールは、サーバに登録されているデバイスの数に応じて生成され、画面に表示されるデバイスの数を超え、次のページに残りのデバイスが表示されます.
Reference
この問題について(設備監視項目), 我々は、より多くの情報をここで見つけました https://velog.io/@yooj/설비-모니터링-프로젝트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol