EtherCATの診断・統計情報を定周期で読み出してBIツールを使って可視化してみます
ノード別に各ポートのエラーカウントの表示と履歴を表示したいと思います
EtherCATマスタまたはスレーブが持っている診断・統計情報は次の内容が格納されています
| マスタ | TotalSentCnt | 総送信フレーム数 |
| TotalRecvCnt | 総受信フレーム数 | |
| TimeoutCnt | フレーム受信タイムアウト回数 | |
| DiscardPDOCnt | プロセスデータ受信破棄数 | |
| NetDelay | ネットワーク伝搬遅延時間 | |
| CRCErrCnt | CRCエラーフレーム受信数 | |
| スレーブ | Result | 取得結果 |
| NodeAdr | ノードアドレス | |
| PortNum | ポート数 | |
| ErrCnt[0] - [3] | ポート毎のエラーカウンタ |
さまざまなデータを分析・見える化するソフトウェアです
| 一部有料 | Microsoft PowerBI Desktop | MicroSoft |
| Google Data Studio | ||
| Qlick Sense Desktop | Qlick社 | |
| Zoho Analytics | ソーホージャパン株式会社 | |
| オープンソース (無料) |
Pentaho | Pentaho / 日立 |
| Grafana | Grafana Labs | |
| Metabase | Metabeseプロジェクト | |
| Kibana | Elastic社 | |
| Graylog | Graylog社 | |
| Redash | Redash社 | |
| Apache Superset | Airbnb社 |
PLCで取得したECATの診断・統計情報をDBにInsertしてPCでBIツールを使って分析します
| PLC | OMRON NJ/NXシリーズ データベース接続 CPUユニット Ver1.64以降 Sysmac Studio Ver1.56以降 |
| DataBase | SQLServer |
| BIツール | Microsoft PowerBI Desktop または Metabase |
以下の2つのテーブルを作成します
PLCで取得する診断・統計情報のデータに日付時刻フィールドを追加して保存します
| テーブル名 | カラム名 | データ型 |
|---|---|---|
| MasterStat | RecDT | datetime |
| TotalSentCnt | numeric(10,0) | |
| TotalRecvCnt | numeric(10,0) | |
| TimeoutCnt | numeric(10,0) | |
| DiscardPDOCnt | numeric(10,0) | |
| NetDelay | numeric(10,0) | |
| CRCErrCnt | numeric(10,0) |
テーブル作成用SQL
-- SQLServer Query Create Table
create table MasterStat(
RecDT datetime NOT NULL,
TotalSentCnt numeric(10, 0) NULL,
TotalRecvCnt numeric(10, 0) NULL,
TimeoutCnt numeric(10, 0) NULL,
DiscardPDOCnt numeric(10, 0) NULL,
NetDelay numeric(10, 0) NULL,
CRCErrCnt numeric(10, 0) NULL,
CONSTRAINT PK_MasterStat_1 PRIMARY KEY CLUSTERED(RecDT)
);
PLCで取得する診断・統計情報のデータに日付時刻フィールドを追加して保存します
| テーブル名 | カラム名 | データ型 |
|---|---|---|
| SlaveStat | RecDT | datetime |
| Result | numeric(10,0) | |
| NodeAdr | numeric(5,0) | |
| PortNum | numeric(3,0) | |
| ErrCnt0 | numeric(3,0) | |
| ErrCnt1 | numeric(3,0) | |
| ErrCnt2 | numeric(3,0) | |
| ErrCnt3 | numeric(3,0) |
テーブル作成用SQL
-- SQLServer Query Create Table
create table SlaveStat(
RecDT datetime NOT NULL,
Result numeric(10, 0) NULL,
NodeAdr numeric(5, 0) NOT NULL,
PortNum numeric(3, 0) NULL,
ErrCnt0 numeric(3, 0) NULL,
ErrCnt1 numeric(3, 0) NULL,
ErrCnt2 numeric(3, 0) NULL,
ErrCnt3 numeric(3, 0) NULL,
CONSTRAINT PK_SlaveStat_1 PRIMARY KEY CLUSTERED(RecDT, NodeAdr)
);
以下の命令を使ってEtherCATの診断・統計情報を取得します
| マスタ | EC_GetMasterStatistics |
| スレーブ | EC_GetSlaveStatistics |
定周期でEC_GetMasterStatisticsとEC_GetSlaveStatisticsを実行しDataBaseに実行結果を日付時刻付きでInsertします

(このラダーにはエラー処理は入っていません)
| 0 | LogEnableをONしている間、LogRecが1分間隔でONします | |
| 1 | EC_GetMasterStatisticsとEC_GetSlveStatisticsを実行してEtherCATの診断・統計情報を取得します | |
| 2 | DataBase処理中のフラグ作成 | |
| 3 | DataBase接続処理 | |
| 4 | EtherCATマスタの診断・統計情報に日付時刻データを付けて追加するレコードを作成 | |
| 5 | MasterStatテーブルと追加するレコード(MasterStatTbl)をマッピング | |
| 6 | Insertを実行 | |
| 7 | EtherCATスレーブの診断・統計情報に日付時刻データを付けて追加するレコードを作成 | |
| 3行目 | 読み出したSlaveStatのノードアドレスに 0 が出現するまで繰り返し | |
| 6-13行目 | 読み出した情報に日付時刻を付けて新しいレコードを作成 | |
| 17行目 | prevSlaveStatに前回値として記憶 | |
| 8 | SlaveStatテーブルと追加するレコード(SlaveStatTbl)をマッピング | |
| 9 | BatchInsertを実行 | |
| 10 | デバッグ用に接続状態(ConnectionStatus)を取得 | |
| 11 | BatchInsertの正常終了でDataBaseと切断 | |
PLCプロジェクトのダウンロード ECATStatisticsDB.zip