あらすじ
電力収集装置をRS485通信シリアルコミュニケーションユニットで通信してデータ収集しています。
最近、通信機器を増設し(改造は内製)ほかのデータも集めるように追加しました。
ところが、通信ユニットのCH1通信部分でデータの異常がみつかるようになった。
解析 ロギング
実際のデータをみると変なデータがはいってくる。
ユニットの状態はこんな感じです。
シリアルコミュニケーションユニットの回線トレースでみるとCH1は送信データがすぐに返答される。
*今は、シリアルコミュニケーションのツールで伝文内容確認できるので便利になりましたね
ENQヘッダーで送って、STXで返信がくるはずが、ENQ応答がすぐに戻ってくる。
CH1は仕様で、エコーバックは許可・・なので禁止にできない。
データの処理を受信読出し要求で行っているので、タイミングによっては、エコーバックの応答で行って、まちがったデータを読み込んでしまいます。
用語の説明
エコーバックとは 送信した伝文がそのまま受信データとしてかえってくることですやまびこみたいなものです。
バグ?なので保証
これは、バグですね。バグは製作メーカーで保証ですよね。
ところが
①保証期間をかなりすぎている。
②検収している。
③今更、調査自体もおこがましい
④検収後に大改造している(内製)
⑤最近追加増設改造している
こんな状況では・・・
バグ検証
まずは、自社で再検証します
①エコーバック処理のありの場合、停止局にエコーバッグのデータが入る
①受信プログラムは割込み処理していないので同スキャンで局番切替がされると受信局データの転送違いが発生することがある
②①は、局が連続していない場合に発生することが多い ラダーで異常データ局をロギングすると特定の局の後のデータが異常となることが多かった
対策
割込み処理まで作成して、プログラムを変更、デバッグできないため応急処理を実施する
①エコーバック対応として、100msec後に受信データの処理をするように変更
エコーバックデータの場合はデータ受信処理をせずに次の局に移動する
②スキャン順番での処理を整理する
局番のインクリメント処理、読出し処理、データ演算処理のラダーの記述の順序がおかしかったので修正する
③②の項で次の局番に送信、受信するのに10msecのタイマーを作成して確実にデータ処理実行してから次の処理をするように変更
変更後今のところは大丈夫のようです
まとめ
こういう状況はよくありますが、難しいですね。
でも、納入後7年後にバグがあって問題になっても、基本的には、検収後客先改造は責任外ですよね。「世の常識」と認識してほしい。
ただ、プログラムのことわからない人とか平気で調べて直して・・バグでしょとか言います。
何度も言いますが、検収したらあなたのものです。保証期間も1年って契約していますよ・・・。
コメント