PLCNEXT#PythonでSECS/GEM通信を試してみよう

今回の記事ではPCでIgnitionをインストールし、さらに中にSECS/GEMモジュールをインストールします。次はPhoenix ContactのAXCF2152でPythonとsecsgemライブラリを使用し

SECS/GEM通信を行います(HOSTとEquipment両方とも)。

さ、FAを楽しもう。

Reference Link

Opto22#Ignition edgeを使ってみよう

SECS/GEM?

SECS/GEM(SEMI Equipment Communication Standard/Generic Equipment Model)は、半導体製造において、製造装置(エッチング装置、露光装置、計測装置など)と製造オペレーションを管理するホストコンピューターシステム間のデータ交換や装置制御を容易にするために使用される通信規格です。この規格はSEMI(Semiconductor Equipment and Materials International)によって定義され、半導体業界で広く使用されている。

SECS-I (SEMI Equipment Communication Standard 1, SEMI E4):

装置とホストシステム間のシリアル通信用プロトコル。データ伝送にRS-232またはRS-422を使用し、高速データ交換が重要でない環境に適している。

HSMS(High-Speed SECS Message Services、SEMI E37):

TCP/IPネットワーク上での高速通信用に設計されたプロトコル。このプロトコルは、迅速で信頼性の高いデータ交換が不可欠な最新の製造現場でよく使用される。

GEM (Generic Equipment Model)

GEMは、機器の通信と制御のための一連の標準機能を定義することによって、SECSを補完する。GEMは、以下の標準化されたインターフェイスを提供する:

Equipment State Management

機器の稼動状態(初期化、準備完了、稼動中、エラーなど)を監視・管理します。

Terminal Services

機器のリモートコマンド実行を可能になります。

Data Collection

トレースデータやイベントレポートなど、機器やプロセスに関するデータを収集し、報告するためのメカニズムを定義します。

Alarm Management

機器がアラームを報告する方法と、ホストによるこれらの管理方法を標準化します。

Recipe Management:

レシピ(工程指示書)のダウンロードとアップロードを標準化します。

Remote Control

ホストが機器の動作を開始、停止、変更できるようにします。

Implementation1‐Install Ignition

最初は自分のPCでIgnitionをインストールします。このソフト自体は実際運用する場合は有償ですが、DEMOモードはずっと2時間稼働することができます。

Ignitionが立ち上げてから2時間立つと一旦Runtimeが止まり、Reset Trialのボタンをクリックする必要があります。

そうすると、Ignitionまた2時間Full稼働モードに戻ります。

Download the installation File

下記のLinkからIgnitionのインストールFileをDownloadします。

https://inductiveautomation.com/downloads/

”Download Ignition”をクリックします。

Download for Windowsをクリックします。

簡単な個人情報を入力すれば、Installation FileをDownloadできます。

Done!

Install Ignition

先ほどDownloadしたIgnitionセットアップFileを起動し、Ignitionをインストールしましょう。

Nextで進みます。

少々お待ち下さい…

Done!

Ignitionが起動中なので、少々お待ち下さい…

Start Ignition!

Done!Browserが自動的に起動され、Ignitionのインストールバージョンを選択します。

今回の記事ではIgnitionを使用します。

ライセンスに同意し、Nextで進みます。

User アカウントを作成し、Nextで進みます。

少々お待ち下さい…

Done!

Download SECS/GEM Module

今回の記事はSECS/GEMのProtocolを試したいんですが、自分はもちろん半導体の製造装置をもっていません。ですが、IgnitionのSECS/GEMモジュールを使用することにより、SECS/GEMの装置シミュレーターなどを機能を活用できます。

下記のLinkからSECS/GEMのモジュールをDownloadしてください。

https://inductiveautomation.com/downloads/ignition/8.1.42

Done!

Install Module

先ほどDownloadしたSECS/GEMモジュールをインストールするため、Config>Modulesをクリックします。

Install or Upgrade a Moduleをクリックします。

Browseで先程DownloadしたSECS/GEMモジュールを選択し、Installをクリックします。

ライセンスを同意してください。

SECS/GEMモジュールをインストールしましょう。

Done!

SECS/GEMモジュールがIgnitionにインストールされました。

Configure Database Connection

Ignitionのデータベースを設定するため、CONNECTIONS>Databasesをクリックします。

こちらはIgnitionのデータベース接続画面になります。

Configurationボタンをクリックしデータベース接続設定を行います。

Create new Database Connectionをクリックします。

接続のDB種類はSQLITEにし、Connection URLはDBが保存したいPathになります。

Implementation2‐Start up a Host in PLCNEXT

IgnitionのSECS/GEMモジュールをセットアップ完了したら、次はPLCNEXT側でSECS/GEMのPythonライブラリをインストールします。ですが、その前、もう少しSECS/GEMのことを話したいと思います。

SECS/GEM (SEMI Equipment Communications Standard/Generic Equipment Model) モジュールは、Ignition プロジェクトとサードパーティアプリケーションが半導体製造装置と通信できるようにします。このモジュールは、GEM標準(SEMI E30-0307)、SECS-II標準(SEMI E5-0712)、HSMS標準(SEMI E37-0308)の実装です。

タイトル通り、Implementation2ではPLCNEXT上でSECS/GEM Hostを立ち上げます。機器との通信は、SECS-II規格で定義されたメッセージ形式で行われ、SECSメッセージまたは単にメッセージと呼ばれる。簡単な定義ファイルを使用することで、あらゆるSECSメッセージ(カスタムも含む)に対応することができます。

モジュールがインストールされると、ゲートウェイウェブページのConfigセクションに新しいヘッダーが用意され、機器への接続を設定したり、テストに使用するシミュレーターを設定したりすることができます。

SECS/GEMモジュールには、機器シミュレータを作成・設定する機能があります。シミュレータはGEM標準の完全な実装ではありません。機器コネクションはシミュレータに接続することができ、様々なメッセージを交換することができます。シミュレータは様々なSECSメッセージをサポートしています。この機能は、SECS/GEMモジュールの使用開始やアプリケーションのテストのために存在します。

Ignition Side

Ignition側でSECS/GEMシミュレーター(Equipment)を作成するため、Search BarからSimulatorを選択していきましょう。

こちらはシミュレーターの作成画面になります。

”Create new Simulator”をクリックし、新しいシミュレーターを作成しましょう。

アプリケーションに合わせてシミュレーターを設定しましょう。のちほどPython Scriptと一緒に設定項目を説明します。

Done!シミュレーターが作成されました。

PLCNEXT Side

今回記事で使用するのはAXCF2152なので、少々の下準備が必要です。

Firmware Update

PLCNEXTのFirmwareアップデートは下記の記事を参考にしてください。

PLCNEXT#Firmware update

Install pip

今回はPythonのライブラリを使用しますので、下記の記事でpipをAXCF2152にインストールしてください。

PLCNEXT#Install pip

Install Library

今回使用するのはsecsgemというライブラリで、下記のLinkはそのライブラリのGithubです。

https://github.com/bparzella/secsgem

こちらのコマンドでsecsgemをインストールしてください。

$ pip install secsgem

Script

こちらはプログラムです。

def s01f13_handler(connection, packet):
        print(“S1F13 got..”)

def on_connect(event):
        print(“Connected..”)
        s01f01 = secsgem.SecsS01F01()
        data=client.send_and_waitfor_response(s01f01)
        print(data.data)

        s01f03 = secsgem.SecsS01F03()
        #Clock SVID=1
        s01f03.append(secsgem.secs.variables.SecsVarU4(1))

        #ControlState SVID=2
        s01f03.append(secsgem.secs.variables.SecsVarU4(2))

        data=client.send_and_waitfor_response(s01f03)
        print(data.data)



import secsgem
import time

IPADDRESS=”192.168.13.72″
PORT=5002

client = secsgem.SecsHandler(“192.168.13.72”, 5002, True, 0, “test”)
client.register_stream_function(1, 13, s01f13_handler)
client.events.hsms_connected += on_connect

client.enable()
print(client.enable)

time.sleep(5)

client.disable()

IPADDRESS/PORT

先ほどSimulatorでPassive IPアドレスはLocalhostで設定しましたので、ScriptのIPアドレスはIgnitionにインストールされているPCのIPアドレスに合わせて設定しましょう。

また、PORTもPassive Portの設定に合わせていきましょう。

IPADDRESS=”192.168.13.72″
PORT=5002

SecsHandler

こちらでSecsHandlerを作成し、SimulatorのIPアドレス・Portに合わせてパラメータを設定しましょう。

client = secsgem.SecsHandler(“192.168.13.72”, 5002, True, 0, “test”)

また、3番目のTrue/FalseパラメータではActive接続かPassive接続かを設定します。

  • True=Active
  • False=Passive

になります。

Simulator側ではPassiveモードに設定しましたので、AXCF2152 Python Script側はもちろんActiveモードに合わせる必要があります。

register_stream_function

こちらはS01F13から新しい情報が受信したとき実行する関数を登録します。下記のサンプルコードではs01f13_handlerという関数に登録しました。

client.register_stream_function(1, 13, s01f13_handler)

そのs01f13_handler関数はScriptの先頭に定義され、今回の記事では簡単な文字列をPrintするだけですが、実際のアプリケーションではLoggingしたり、ほかのシステムと連携したりします。

def s01f13_handler(connection, packet):
        print(“S1F13 got..”)

hsms_connected

こちらはHOSTとEquipmentを接続成功したときのイベントを拾い、on_connectの関数を実行します。

client.events.hsms_connected += on_connect

そのon_connect関数はScriptの先頭に定義され、中にS01F01とS01F03を実行します。

def on_connect(event):
        print(“Connected..”)
        s01f01 = secsgem.SecsS01F01()
        data=client.send_and_waitfor_response(s01f01)
        print(data.data)

        s01f03 = secsgem.SecsS01F03()
        #Clock SVID=1
        s01f03.append(secsgem.secs.variables.SecsVarU4(1))

        #ControlState SVID=2
        s01f03.append(secsgem.secs.variables.SecsVarU4(2))

        data=client.send_and_waitfor_response(s01f03)
        print(data.data)

client.enable()

こちらのScriptでEquirmentと接続します。

print(client.enable)

client.disable()

こちらのScriptでEquirmentと切断します。

client.disable()

Result

Done!AXCF2152のPythonから立ち上げたHostとIgnitionで作成したSimulatorが通信できました。

Default Messages

また、IgnitionのSimulatorではこちらのMessageに対応できます。

  • S1F1 – Are You Online
  • S1F3 – Selected Equipment Status Request
  • S1F11 – Status Variable Namelist Request
  • S1F13 – Establish Communications Request
  • S1F15 – Request OFF-LINE
  • S1F17 – Request ON-LINE
  • S2F13 – Equipment Constant Request
  • S2F15 – New Equipment Constant Send
  • S2F17 – Data and Time Request
  • S2F23 – Trace Initialize Send
  • S2F29 – Equipment Constant Namelist Request
  • S2F31 – Date and Time Set Request
  • S2F33 – Define Report

Implementation3‐Start up a Equipment in PLCNEXT

Implementation2ではPLCNEXT上でSECS/GEM のEquirmentを立ち上げ、Ignition側から接続します。

その接続は、イグニッションが半導体工場内の専用機器と通信するためのものです。装置接続はゲートウェイWebページの設定セクションで設定します。接続は、TCP/IP(HSMSプロトコル)を使用したイーサネット、またはRS-232ケーブルを使用した直接シリアル接続(SECS-Iプロトコル)で行うことができます。

このデータベースは、監査目的で送受信されたメッセー ジを保存し、いくつかの設定データを保持する。各機器接続は、1つのツールと1つのデータベースに接続し、ゲートウェイとツール間でSECSメッセージを転送します。ライセンスが許す限り、ゲートウェイにはいくつでも機器接続を設定することができ、異なる機器接続が同じデータベース接続を使用するように設定することも、異なるデータベース接続を使用するように設定することもできます。

SECS/GEMホストモジュールは、ゲートウェイ内に設定された機器接続を介して、1つ以上のツールと会話できるホストとして実装されています。初期セットアップを支援するシミュレーション機能を内蔵していますが、モジュールはホストとしてのみ機能し、機器であるかのように応答することはできません。

Ignition Side

Ignition側でHOSTを立ち上げるためには、SECS/GEM>Equipmentをクリックします。

こちらはIgnitionのSECS/GEM Equipment設定画面です。

”Create new Equipment Connection”で新しいのEquipmentを追加します。

アプリケーションに合わせて接続するEquipmentを設定しましょう。のちほどPython Scriptと一緒に設定項目を説明します。

Database Connectionは先程作成したConnectionを設定してください。

Save Changesで設定を保存しましょう。

PLCNEXT Side

Script

こちらはプログラムです。

import secsgem.gem
import code

class SampleEquipment(secsgem.gem.GemEquipmentHandler):
    def __init__(self, address, port, active, session_id, name, custom_connection_handler=None):
        secsgem.gem.GemEquipmentHandler.__init__(self, address, port, active, session_id, name, custom_connection_handl>
        self.MDLN = “gemhost”
        self.SOFTREV = “1.0.1”

        self.sv1 = 123
        self.sv2 = “sample sv”

h = SampleEquipment(“127.0.0.1”, 5002, False, 0, “plcnext2152”)
h.enable()

code.interact(“equipment object is available as variable ‘h’, press ctrl-d to stop”, local=locals())

h.disable()

class SampleEquipment

こちらはGemEquipmentHandlerからExtendするSampleEquipmentを作成します。

class SampleEquipment(secsgem.gem.GemEquipmentHandler):
    def __init__(self, address, port, active, session_id, name, custom_connection_handler=None):
        secsgem.gem.GemEquipmentHandler.__init__(self, address, port, ™active, session_id, name, custom_connection_handl>
        self.MDLN = “gemhost”
        self.SOFTREV = “1.0.1”

        self.sv1 = 123
        self.sv2 = “sample sv”

Setup Connection

Equipment Objectを呼び出します。IPアドレスはPLCNEXT Localhostのままで、PortをIgnitionに合わせて設定しましょう。Falseパラメータを渡すにはAXCF2152側ではEquirmentとして設定したので、PASSIVEとして使用します。

h = SampleEquipment(“127.0.0.1”, 5002, False, 0, “plcnext2152”)

Ignition側でActive IP Addressの設定はAXCF2152のIPアドレスになります。

そしてConnection ModeはACTIVEです。

h.enable()

こちらのプログラムを使ってEquipment Connectionを立ち上げます。

h.enable()

Result

Done!IgnitionからAXCF2152に接続できました。DB Browserを使用し、SQLiteのDBを開くと、S1F13・S1F14の通信も記録されました。

SECS-II規格より:

「SECS-IIは、機器とホスト間の情報伝達方法をメッセージの形で定義している。これらのメッセージは、ストリームと呼ばれる活動のカテゴリーに編成され、ファンクションと呼ばれる特定のメッセージを含んでいる。

各SECSメッセージは、ストリームとファンクションを指定する。特定のSECSメッセージは、しばしば次のような形式で参照される: S(番号)F(番号)。例えば、S1F13は、SECSメッセージのストリーム1、ファンクション13を指す。

また、メッセージには2種類ある:

リクエスト:プライマリメッセージと呼ばれることもある。これはホストから発信され、Ignitionの文脈ではIgnition Gatewayのことである。リクエストはS1F1のような奇数番号の関数である。

レスポンス:セカンダリーメッセージとして知られることもある。これらは機器から発信される。応答は、S1F2のような偶数番号のファンクションである。 したがって、ホストはS1F1リクエストを送信することができる。その場合、機器はS1F2レスポンスで応答し、機器がオンラインであることを示す。各リクエストは、1つの応答メッセージのみを持つことができる。このRequest-and-Responseパターンは、モジュールと規格の基本である。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする