製造ラインの時刻を揃える ― GPS基準の時刻同期と、「同期が生きているか」を監視する仕組み
素材メーカー様 (素材製造(生産ライン・品質記録))
- 時刻同期
- NTP
- GPSタイムサーバ
- トレーサビリティ
- 品質記録
- PLC
- Python

案件概要
- お客様:素材メーカー様(工場)
- プロジェクト:製造ライン全体の時刻同期を確かなものにするための、NTP同期状態の常時監視とPLCへの通知機能の構築
- 担当範囲:要件整理、Pythonプログラム開発、PLC通信インターフェイス設計、サーバへの実装・運用設定(タスクスケジューラ)、納入仕様書作成
背景と課題
製造ラインの記録は、装置ごとにバラバラに生まれます。サーバの生産ログ、PLCのイベント、検査データ——これらを後から突き合わせてトレースできるのは、すべての機器の時計が揃っているときだけです。時刻が1秒ずれれば、イベントの前後関係は簡単に逆転します。
この工場では、GPSタイムサーバを基準にNTPでラインサーバ・PLCの時刻を揃える構成を採っています。基準は正確、配る仕組みもある。しかし残る課題がひとつありました——「同期が生きているか」を誰も監視していないのです。
NTP同期は静かに失敗します。同期が切れてもサーバもPLCも動き続け、時計は少しずつずれていく。気づくのは、記録の時刻が食い違ってからです。「時刻同期」という仕組みは、同期状態の監視まで揃って初めて完成する——それが本案件のテーマです。当社は、同期状態を定期監視し、結果をPLCへ通知し、ログに残す仕組みを構築しました。
対応内容

構成 ― 追加ハードなし、Pythonスクリプト1本
- タイムサーバ(GPS):シチズンTSV-500GPがNTPで時刻を提供
- ラインサーバPC(Windows Server 2022):本システムの本体。Python製の監視スクリプトが毎時00分に起動し、Windows標準の
w32tmコマンドでNTP同期状態を照会 - PLC(KEYENCE KV-8000):監視結果を受け取る側。**上位リンク通信(TCP/IP・ポート8501)**でサーバから直接デバイスへ書き込み
ポイントは、PLCとの通信に専用ミドルウェアやOPCサーバを使っていないこと。KV-8000の上位リンク通信はTCPソケットにテキストコマンドを送るだけのシンプルなプロトコルで、Pythonの標準ライブラリだけで通信部が書けます。常駐サービスも不要で、実行はWindowsのタスクスケジューラに任せる「枯れた」構成。導入も保守も軽い仕立てです。
監視の設計 ― 「時刻を送る」ではなく「信頼性を送る」
PLCへ送るのは現在時刻だけではありません。同期の成否・エラーコード・最終同期成功時刻をワード領域にまとめて書き込みます。
- 同期失敗の判定は
w32tmの応答から2条件:参照元がLocal CMOS Clock(=NTPを見ていない)、またはStratum 16(=未同期) - エラーコードは「判定内容」と「PLCとの通信エラー(10秒間隔×3回リトライ後に確定)」を区別して体系化
- 最終同期成功時刻も送るため、PLC側で「最後に正しかったのはいつか」まで把握可能
これにより、PLC側のラダーで「同期異常なら警報」「長時間未同期なら記録に注記」といった後段の作り込みが自由にできます。
運用まで含めて納品
- 実行結果は日別のログファイルとしてサーバに自動保存(1行1レコードのシンプルなテキスト形式で、後からの解析も容易)
- Pythonのインストール手順、タスクスケジューラの登録手順まで納入仕様書に明記し、お客様側で再セットアップできる状態で引き渡し

結果
- GPS基準の時刻同期に「監視」が加わり、製造ライン全体の時刻が揃っていることを常時保証できる体制になりました。サーバ・PLC・記録系の時刻を安心して突き合わせられます
- 「静かに失敗する」NTP同期の異常を毎時検知し、PLC側でも警報化できるようになりました
- 追加ハードウェアなし・スクリプト1本の軽量な構成で、既存の生産システムに影響を与えずに導入。ログと納入ドキュメントの整備により、お客様側で運用・再構築が完結します
トレーサビリティも、稼働分析も、品質記録も——土台は「揃った時刻」です。時刻同期の設計から、その健全性を守る監視の仕組みまで、製造現場の時刻インフラを当社が整えます。