Siemens#IFM AC402s AS-i マスターと連携しよう

今回の記事ではIFM社のAC402sを使ってAS-iネットワークを立ち上げてからSiemensのS71500とProfinet通信するまでの手順を1から説明します。

さ、FAを楽しもう!

AC402S?

IFM社のAC402Sは以下の特徴があります。

  • フィールドバスインターフェースとフェールセーフPLCを内蔵
  • センサーアクチュエータレベルとの信頼性の高い高速データ交換
  • 全てのAS-iスレーブのステータスを表示するカラーディスプレイ
  • ユーザーフレンドリーで簡単な設定、セットアップ、診断
  • 直感的な操作のクイックセットアップメニュー

Layout

こちらはAC402SのLayoutになります。

Ethernet

コンフィギュレーション・インターフェース 1 (X3) はデバイスのフロントフラップの裏側にあり、また設定インターフェース 2 (X8) は PROFINET インターフェース (X6/X7) の下にあります。

ユーザーは両方のインターフェースから以下の機能にアクセスできます:

  • コンフィグレーションと診断のためのウェブインターフェイス
  • CODESYSによる装置内部標準PLCとフェイルセーフPLCのプログラミング
  • 追加フィールドバスインターフェースとしての操作

Local input/output interface

ローカル入出力インターフェース(X4)はデバイスのフロントフラップの裏側にあり、 安全および非安全やAS-iインターフェースのない周辺機器もローカル入出力に接続できます。

Local Inputs

ローカルI/Oインターフェースは、デバイス(センサー、スイッチ、ライトカーテンなど)を接続するための8つの入力チャネルを提供します。 各入力チャンネルは、安全入力または標準入力として使用できます。それらの設定は、CODESYSから可能になります。

Local Outputs

ローカルI/Oインターフェースは、デバイス(アクチュエータ、リレーなど)を接続するための4つの出力チャネルを提供します。 各出力チャンネルは安全出力または標準出力として使用できます。それらの設定は、CODESYSから可能になります。

Architecture

こちらはAC402sのArchitectureです。

Main module

メインモジュールはAC402Sの中心的なコンポーネントであり、 リカバリーシステムとデバイスのファームウェアを含み、バックプレーンを介して個々のシステムコンポーネント間の通信を制御します。 

Display

ディスプレイは、AC402S のグラフィック・ユーザー・インターフェースであり、このインターフェースを介して、ユーザーはデバイスの設定や診断を行うことができます。 ディスプレイは、メインモジュールと結果のデータを交換します。

COM module

COM モジュールは AC402S の PROFINET 機能を提供します。 これは PROFINET 接続と必要なファームウェアで構成されます。 COMモジュールはメインモジュールからフィールドバスデータをインタフェースを介して受信し、フィールドバスに転送します。 同時にフィールドバスからデータを受信し、メインモジュールに転送します。

AS-i module

AS-iモジュールは、AS-iテレグラムの受信、評価、送信といったAC402SのAS-i機能を、論理的な前処理なしに提供します。

AC402Sは2つのAS-iマスターが含まれており、2つのAS-iテレグラムを制御します。

各AS-iマスターには以下の数のAS-iスレーブを接続することができます:

  • 最大62台の非安全AS-iスレーブまたは
  • 最大31台のセーフAS-i入力スレーブまたは
  • 安全なAS-i出力スレーブを制御する最大15台のAS-i制御スレーブ

AS-iモジュールは、バックプレーンを介してセーフティモジュールと安全AS-iスレーブのデータを交換します。すべてのAS-iデータは、ディスプレイに表示するためにメインモジュールに提供されます。

Safety module

安全モジュールには、AC402S の安全関連のハードウェアが含まれています。 セーフティモジュールのアーキテクチャは、以下の構造的特徴を備えています:

  • 1oo2ハードウェア・アーキテクチャ(1 out of 2アーキテクチャ)
  • 2チャンネル構造で、両チャンネルに個別の診断機能を装備
  • 2チャンネルセーフ入力選択可能
  • 1チャネルおよび2チャンネルセーフ出力選択可能
  • セーフティプロセッシングユニット(セーフティCPU1/2)にテストを内蔵
  • ハードウェア故障耐性 (HFT) = 1

セーフティモジュールは以下のコンポーネントで構成される:

  • 制御技術信号処理用2プロセッサ搭載セーフティCPU PCB (セーフティCPU1/2)
  • ローカルI/Oインターフェース用独立電源付きセーフティI/O PCB

両方のPCBは互いにガルバニックに分離され、これらは別々の電圧源から供給されます。

どちらのセーフティCPUも、ウォッチドッグとリセット回路を別々に備え、 これらは相互通信により相互接続されています。また、両方のPCBは、双方向データ交換用のシリアル・インターフェースを介して相互接続されています。 セーフティモジュールには、メインモジュールとAS-iモジュールへのインターフェースがあります。

Operating states of AC402S

AC402Sの動作状態は以下の通りです:

  • INIT
  • NORMAL OPERATION
  • SYSTEM STOP

INIT

開始後、デバイスは自動的に INIT 状態になります。 INIT 状態では、デバイスはさまざまなハードウェア・テストと統合テストを受けます(PBIT = Power-up Built-In Test)。

  • PBITテストに成功すると、デバイスはNORMAL OPERATION(2)状態になります。
  • PBITテストに合格しなかった場合、デバイスはSYSTEM STOP(3)状態に移行します。

NORMAL OPERATION

NORMAL OPERATIONでは、標準 PLC とフェールセーフ PLC の装置が作業環境を提供する。 PLC アプリケーションの状態と動作モードは、PLC アプリケーションの処理に関係なく同時に有効です。また、デバイスは継続的にさまざまなハードウェアテストを受けます(CBIT = continuous built-in test)。このCBITテストに合格しなければ、デバイスはSYSTEM STOP状態(4 )になります。

SYSTEM STOP

SYSTEM STOP状態では、装置は安全状態にあります。 SYSTEM STOP状態を解除するには、オペレータはパワーオンリセットを実行する必要があります。 

デバイスは INIT 状態(5 )に変わります。

AS-i

AS‐Interface(Actuator-Sensor-Interface)は、センサとアクチュエータを共通のデータ伝送媒体を介して上位コントローラに接続するための、世界的に標準化されたフィールドバスシステムです。

AS-Interfaceはフィールドレベルで使用され、一般的にプロセスデータをより高い制御レベルに転送する役割を果たします。例えば、フィールド機器は、いわゆるASiマスターを介して直接、またはゲートウェイを介して既存のネットワークに統合することができます。特定の情報とプロセスデータは、2線式の黄色いAS-Interfaceプロファイルケーブルを使用して、フィールド機器とコントローラ間で伝送されます。この特別なASインターフェースケーブルは、データの伝送とフィールド機器への電源供給の両方に使用されます。

Simple configuration

Master-slave communication model

フィールド機器レベルでは、ASインターフェースはマスター・スレーブ原理によって管理されます。

  • ASiマスターとスレーブ(フィールドデバイス)間の通信はサイクリック要求として行われます。
  • ASiマスターはデータトラフィックを管理し、参加者を上位コントローラに接続します。
  • マスターはネットワーク内のデータ交換全体を監視し、制御します。
  • ASiマスターはスレーブに情報を送信し、スレーブはその情報を評価して(スレーブ向けの情報をフィルタリングして)マスターに応答を返します。
  • スレーブには、シンプルな個々のフィールド・デバイスやコンパクトなフィールド・モジュールを使用できます。

Integration options of AS-Interface in automation systems

AS-Interfaceは標準として、確立された高性能フィールドバスシステムと産業用イーサネットのサブフィールドバスシステムとして実装されています。これは最も低いフィールドレベルまで拡張されます。

PLC

PLC(プログラマブル・ロジック・コントローラー)は、主に産業界で制御や調節の目的で使用される特殊なコンピューターである。

Gateway

ゲートウェイは、さまざまな種類のネットワークや通信サービスを接続するために使用されます。

Actuator-Sensor 

アクチュエータ・センサ・インタフェースは、アクチュエータとセンサをプログラマブル・ロジック・コントローラやその他の制御装置と接続する個別配線に代わるインテリジェントな配線システムです。

topology

AS-Interfaceは、ネットワーク・トポロジーを柔軟に選択することができます。 その結果、リニア構造はスター構造やツリー構造と同様に適しています。 ASiプロトコルは、産業用通信ネットワークのモジュラー拡張を可能にし、既存システムのトポロジーへの個別適合を可能にします。 同時に、ネットワーク内のケーブル配線も削減できます。 このレベルの柔軟性は、ネットワーク内のケーブル配線工数の大幅な削減につながります。

AS-Interface flat cable

黄色のAS-Interfaceフラットケーブルは、データ伝送とフィールド機器への電力供給が同じ2線プロファイルケーブルで行われることが特徴です。

特定のDC24Vフィールド・デバイスまたはモジュールの追加供給には、必要に応じてブラック・プロファイル・ケーブルを使用します。1セグメントあたりの最大ケーブル長は100mだが、リピーターなどを使って延長することができます。

フィールド機器は、プッシュイン・コネクタを介してASインタフェース・ケーブルに直接接続できます。 デバイスの接続にはピアシング技術が使用されます。 設置の際、ケーブルに取り付けられた2本のピアス針がフラットケーブルの絶縁体を貫通し、ネットワークへの安全な接続を確立します。 

AS-Interfaceケーブル・テクノロジーは、シンプルで効率的かつ経済的なネットワークとして評価されています。 電源供給とデータ伝送を同時に行うAS-Interfaceフラットケーブルを使用することで、配線ミスを防ぐことができます。

さらに、ケーブル配線とそれに伴う設置コストの削減にもつながります。

AS-I Safety?

アクチュエータ・センサ・インターフェイス(AS-I)はフィールドバス階層の最下層で動作するマスタ・スレーブ・バスです。 センサとアクチュエータの並列配線を、データと電力の両方を伝送する1本の2線ケーブルに置き換えます。 デバイス(”ノード “とも呼ばれる)はケーブルのどこにでも、またライン、リング、スターなどどのようなトポロジーでも追加できます。

場合によっては、これらの下位デバイスは機械内の安全機能の重要な部分を担っているた

め、マスター・コントローラとの通信も “安全 “である必要があります。

AS-Interfaceは、AS-I Safety at Workの開発により、セーフティコンポーネントと上位コントローラ間の安全な通信の必要性に対応しました。このソリューションは、セーフティデバイスを標準(非セーフティ)デバイスと同じAS-Iケーブルおよびフィールドバスに接続することを可能にします。

AS-I Safety at Workインターフェースを持つ安全機器は、AS-Iケーブルに直接接続できます。 AS-I安全インターフェースを持たないデバイスは、「カップリングモジュール」または「適応デバイス」と呼ばれる特殊インターフェースを介して接続できます。

このソリューションは、AS-Iのシンプルな実装を活用するだけでなく、冗長インフラにかかるコストと複雑さを排除する。 また、安全コンセプトはニーズの変化に応じて簡単に変更することができます。 安全装置は必要に応じて追加、移動、交換が可能で、実装に制限はなく、新たな配線も必要ありません。

AS-Interface Safety at Workは、EN ISO 13849に準拠したカテゴリ4のパフォーマンスレベルe、またはIEC 61508に準拠したSIL 3までのシステム配線を可能にします。 システム設計者は、安全コンポーネントの適切な組み合わせを決定し、選択された制御カテゴリに従ってセーフティモニタ構成を設定します。 適切なコンポーネントの選択により、パフォーマンスレベルe、カテゴリ4を達成することができます。 全ての安全機能のテストは必須です。

セーフティモニターは、セーフティリレーと同様に機能します。 セーフティモニターまたはセーフティコントローラーは、2つの冗長化されたリリース回路を含む出力回路を持ち、一般的に、制御カテゴリ4の性能レベルeまで使用可能です。セーフティモニターの機能は、追加の統合されたセーフティロジックモジュールにより、単一のセーフティリレーをはるかに超えています。 アプリケーションによっては、セーフティモニター1台で従来のセーフティリレー数台を置き換えることができ、配線を大幅に削減し、制御盤内のスペースを節約することができます。

望ましい安全カテゴリを達成するために、設計者は、セーフティ・モニタのコンフィギュレーション時に、安全コンポーネントと関連する安全機能が調整され、それに従って文書化されていることを確認する必要があります。 セーフティ・モニタの特定の機能は、機能安全エンジニアの作業を完璧にサポートします。

AS-Interface Safety at Workの鍵はセーフティモニタで、AS-Iバス上のe-stop、ライトカーテン、ドアラッチなど、最大31個のセーフティ関連デバイスを監視します。 各安全装置には、メーカー定義のコードテーブル(4ビットのバイナリ番号のリスト)があり、セーフティモニタによって保存されます。 マスタコントローラが安全装置をポーリングすると、安全装置はコードテーブルの4ビットコードでステータスを送信します。

セーフティ・モニタはこの通信を「リッスン」し、セーフティ・デバイスから送信されたコードを、そのデバイス用に保存されているコードと比較します。 コードがそのデバイスのコードテーブルにリストされていない場合、またはネットワーク通信に問題がある場合(デバイスからの応答の中断、欠落、遅延など)、セーフティモニタは関連するセーフティ出力を最大40msの反応時間でオフにします。

メリットは?

AS-Iインタフェースを使用すると、以下のメリットがあります。

シンプルさと効率性

  • フィールド機器の簡単で素早い設置
  • コントローラへの簡単な接続
  • ネットワーク内のケーブル数を減らすことによるコスト削減
  • 省スペースの配線
  • 簡単なメンテナンス
  • シンプルなネットワーク構成

柔軟性

  • 自由なトポロジー:様々なネットワーク・トポロジーが可能
    (リニア、スター、ツリー構造)
  • フィールドユニットの柔軟な統合:直接または分散型

高い信頼性

  • システム全体がインテリジェント・プロトコルによって保護されているため、干渉の影響を受けにくい。
  • 十分に保護された入出力モジュールにより、工場内に制御キャビネットを設置する必要がありません。

Function Block

今回記事で使用したFBを紹介します。

CtrlASi_InSlave

安全な AS-i 入力スレーブ(ASi_SlaveAdr.ASi_Master)の論理デバイスを制御するFBは

ASi_Masterの論理デバイスを制御するためにあります。 プログラマは CtrlASi_InSlave を介して以下のアクションを実行できます:

  • 論理デバイスのロックを解除し、ロックされたエラー状態S_ERRORから初期化状態にリセットする。
  • 状態 S_INIT (RESET)

FBは、非安全データとして以下の状態および診断情報を提供する。:

  • AS-i入力スレーブ(Chan_A、Chan_B)の2つのセーフコードハーフシーケンスの論理値
  • FB処理の状態(ready)
  • ファンクションブロックのエラー状態(Error)
  • 論理デバイスの診断情報(DiagCode)

VAR_INPUT

パラメータデータタイプ説明
Enable BOOL TRUE=FBを有効する
ASi_SlaveAdr INT安全な AS-i スレーブのアドレス 1=Slaveアドレス1…
ASi_Master INT 安全な AS-i スレーブが接続されている AS-i マスター番号。1=AS-i マスター12=AS-i マスター2
Reset BOOL 1=リセット、デバイスをロックされたエラー状態(S_ERROR)から初期化状態(S_INIT) にリセットするための制御信号です。

VAR_OUTPUT

パラメータデータタイプ説明
Chan_ABOOL Chan_A BOOL セーフティ・シグナル・チャネル A の論理状態(第1コートハーフシーケンス)
Chan_BBOOL Chan_B BOOL セーフティ・シグナル・チャネル B の論理状態(第2コートハーフシーケンス)
Ready BOOL FB処理状況、TRUE=FBはエラーなく処理されています。
Error BOOL エラー表示、1=エラーあり、論理デバイスがロックされたエラー状態 S_ERRORです。
DiagCode WORD制御される論理デバイスの内部状態の診断コード

CtrlASi_OutSlave

安全な AS-i 入力スレーブ(ASi_SlaveAdr.ASi_Master)の論理デバイスを制御するFBは

ASi_Masterの論理デバイスを制御するためにあります。

プログラマーは、CtrlASi_OutSlave を使って以下のアクションを実行できます:

  • 安全な AS-i スレーブのロックを解除する信号を送信(補助信号 HSI_1)
  • 自動スタート信号の送信(補助信号 HSI_2)

FBは、非安全データとして以下の状態および診断情報を提供する。:

  • FB処理の状態(ready)
  • ファンクションブロックのエラー状態(Error)
  • 論理デバイスの診断情報(DiagCode)

VAR_INPUT

パラメータデータタイプ説明
Enable BOOL TRUE=FBを有効する
ASi_SlaveAdr INT安全な AS-i スレーブのアドレス 1=Slaveアドレス1…
ASi_Master INT 安全な AS-i スレーブが接続されている AS-i マスター番号。1=AS-i マスター12=AS-i マスター2
HSI_1 BOOL 補助信号1 (HSI_1) ロックされたエラー状態(S_Error)から抜け出すためのリセット信号
HSI_2 BOOL 補助信号 2 (HSI_2) 通信エラー後のAS-i スレーブを自動リセット

VAR_OUTPUT

パラメータデータタイプ説明
Ready BOOL FB処理状況、TRUE=FBはエラーなく処理されています。
Error BOOL エラー表示、1=エラーあり、論理デバイスがロックされたエラー状態 S_ERRORです。
DiagCode WORD制御される論理デバイスの内部状態の診断コード

CtrlASi_ResetAllSlaves

安全な AS-i 入力スレーブ(ASi_SlaveAdr.ASi_Master)の論理デバイスを制御するFBは

ASi_Masterの論理デバイスを制御するためにあります。

プログラマーは、CtrlASi_ResetAllSlaves を使って以下のアクションを実行できる:

  • 指示されたネットワーク内のすべての安全なAS-iスレーブの論理デバイスのロックを解除し、ロックされたエラー状態S_ERRORから初期化状態S_INIT(RESET)にリセットする。

FBは、非安全データとして以下の状態および診断情報を提供する。:

  • FB処理の状態(ready)
  • ファンクションブロックのエラー状態(Error)

VAR_INPUT

パラメータデータタイプ説明
Enable BOOL TRUE=FBを有効する
ASi_Master INT 安全な AS-i スレーブが接続されている AS-i マスター番号。1=AS-i マスター12=AS-i マスター2
ResetBOOL 1=リセットを行う

VAR_OUTPUT

パラメータデータタイプ説明
Ready BOOL FB処理状況、TRUE=FBはエラーなく処理されています。
Error BOOL エラー表示、1=エラーあり、論理デバイスがロックされたエラー状態 S_ERRORです。

State diagram (state machine)

43000

The state diagram shows the logical signal evaluation of the logical device:

Implementation

これで実際にプロジェクトを構築しましょう。

IFM Side

最初にIFMのAC402Sから始めます。

Plug ip the service Port

AC402SのサービスポートX3とPCを接続します。

Configure Service IP Address

次はAC402S本体にある画面と操作ボタンでX3のIPアドレスを設定します。

右と左の矢印ボタンでInterface項目まで行き、下矢印ボタンでそのInterface項目を選択します。

次はX3を選択し、左ボタンをクリックします。

最後は下矢印でIPアドレスの設定項目を探し、適切なIPアドレスを設定しましょう。

Access As Browser

AC402S本体についてるX3PortのIPアドレスを設定したあと、BrowserからCPUのWeb Serverにアクセスできます。今後は操作ボタンやDisplayをみなくてもパラメータ設定や監視ができます。

Start to project the As-i Interface

最初にAS-i 1を設定していきます。

Project Modeを使用します。AC402SがProject Modeになると、アドレス0以外のAS-I Slaveを自動的に接続することになります。

Check out Address

今度はAS-I 1に接続されているSlaveの状態を確認します。

Done!AC402SはいくつかのASI Slaveを認識できました。

これは今回実機で使用したAS-I スレーブのアドレス設定になります。

AS030s

AC030Sの設定は少し面倒なので、本体にあるDIPスイッチをRからPに(右側)設定します。

次は先程AC402SのWeb Server画面からAC030SのSlave設定画面に移動します。

Slaveアドレスを設定し、またProfile値を確認しましょう。

またSlaveアドレスを変更したい場合はChange AS-i Slave addressをクリックします。

ネットワーク内に空きのアドレスを設定しましょう。

最後はDIPスイッチをR(左側)に設定します。

Codesys Project

System>PLC>Project Informationで現在AC402Sで実行してるCodesysプロジェクトを確認できます。

Codesys status

同じくCodesysプロジェクトの容量も確認可能です。

Project Information

System>InformationでCPUのFirmwareやシリアル番号を確認できます。

Time Setup

CPUの時刻設定が大事で、トラブルが発生したとき以下にも当時の状況を確認できます。System>Setupで時間の変更が可能です。

Slave Safety Status

Safety>AS-I 1で現在のAS-I Safetyネットワークの状態を確認できます。

Plug in Profinet Port

今回の記事もProfinetを使用しますので、下図のPortをProfinet上位Controllerと接続してください。

Project all

最後に、すべてのAS-i Slaveの状態を確認完了したら、Project All>Start projecton processで現在のネットワーク設定をプロジェクトデータとして適用しましょう。

Codesys Side

次はAC402SにあるCodesysプロジェクトを構築します。

Download Packages

IFMのHPからSafety PLCのPackageをDownloadしてください。

https://www.ifm.com/de/en/product/AC402S#documents

また、HPには複数のVerisonが存在しており、自分のAC402S ControllerのFirmwareに合わせて適切なPackages FileをDownloadし、インストールしてください。

AC402のWeb ServerからCodesysのRun Time Versionを確認できます。

Lauch Codesys

CodesysのPackageをインストール完了したらSmartPLC SafetLineを起動します。

Create New Project

次は新規プロジェクトを作成します。今回はTemplateからBasic Projectを選び、OKで進みます。

Done!

Configure Safety As-i Slave

次はAS-i の安全Slaveを構築します。今回の記事ではAS-iのマスター1のみを使用しますので、Asi_Master_1>SF_ASi_Master_1>右クリック>Add Deviceをクリックします。

こちらはAS-i Safety Slaveの追加画面になります。

下図では、上の枠がSafety入力で、下の枠がSafety出力関係になります。

それではAC009Sを追加したいので、SF_IN_AS_forcedを選び>Add Deviceで追加します。

また、デバイスによって追加項目が異なりますので、ここでは詳しく説明しません。

Done!Safety AS-i Slaveが追加されると、安全PLC側にも同じデバイスが追加されます。

次はAS-i Safety Slaveのアドレスを設定します。

Safe ASi IO ParametersのTabを開き、Slave AddressのValueに該当するスレーブのアドレスを設定しましょう。

今回の例では”3”に設定しました。

Slave Addressを3に設定すると、該当するデバイス名も自動的に変更し、Safety PLCプロジェクト側にも反映されます。

他のSlaveにも同じようにアドレスや用途に合わせて設定しましょう。

こちらはSafety SlaveのHardware Configurationになります。

また、9番目のAC2264はSafety AS-i スレーブではありませんので、入出力データはASi-binaryIOに反映することになります。

そのASi-binaryIOのMappingには配列の形でアクセスできます。各A/Bと入出力に配列が分けられており、例えば9番目のAS-i SlaveならIndex=9のByteデータから入出力にアクセスする形になります。

Safety Program

次は安全プログラムを作成します。

Configure Non Safety Exchange Data

Logic I/OsにはDefault上でSafety PLCとNon-PLC間データ交換するためのスロットが追加されています。

該当するSlotをクリックすると、I/O Mappingの画面に安全PLCの変数をここでMappingできます。下図はInputで、つまり被安全PLC→安全PLCのデータです。

こちらはOutputデータで、つまり安全PLC→被安全PLCの出力になります。

もし被安全PLCと安全PLC間のデータ交換を追加したい場合、Logic I/Osを右クリック>Add Object>Logical Deviceします。

Add Logical I/O画面が表示され、一番下までScrollしてください。

今回の記事で使用するのはIFMのAC402sなので、IFMのLogical Exchange Objectを使用します(IFM社のスロットは32ワードの大容量になりますので)。

Done!

次はアプリケーションに合わせていくつかの変数(被安全PLC→安全PLC)を定義します。

これで各SlaveのChanA・ChanBの状態とリセット状態を非安全PLCに渡します。

Safety Process IO Mapping

次は各AS-I Safety Slave入出力を安全プログラムに使用したいので、I/O Mappingを行います。

Safety BOOLに変数名を入力してください。

安全出力にも同じ操作をしてください。

Safety Program

これから安全プログラムを作成するために、SafetyPOUを開きます。

MAIN

こちらは今回記事で作成した安全プログラムです。

Network1-2

ネットワーク1は安全FBの有効信号、また非安全PLCからリセットする信号を安全プログラムに渡します。

Network3

ネットワーク3はすべてのAS-I スレーブをリセットするためのプログラムです。

Network4-5

ネットワーク4-5はASi-1のID2の安全Slaveの入力状態や診断コードを取得します。他のSlaveも同じ操作なので、ここでは説明しません。

Network14

ネットワーク15はASi-1のID8の安全Slaveの出力状態や診断コードを取得します。他のSlaveも同じ操作なので、ここでは説明しません。

Network20-22

最後はすべての入力状態をANDに入力し、SF_EmergencyStopの出力を制御します。最後はその出力状態を非安全PLCにFeedbackします。

Non-Safety Program

次は非安全PLC部分のプログラムを作成します。

Add Exchange GVL

非安全PLCと安全PLC間のデータ交換を実装するために、Application>右クリック>Add Object>Logical Exchange GVLします。

安全PLCで定義したLogical Slotsを定義しました。

3つのLogical Exchange GVLを開き、下にあるUpdateボタンをクリックし変更を更新します。

NonSafety2Safety

こちらは非安全PLCから安全PLCに転送する信号です。

VAR_GLOBAL
//DataFromNonsafe :
xAsiReset : BOOL;
END_VAR
SafetyToNoSafety1

こちらは安全PLCから非安全PLCに転送する信号です。

VAR_GLOBAL
//DataToNonsafe :
xID2Ready : BOOL;
//DataToNonsafe :
xID2Error : BOOL;
//DataToNonsafe :
xID2ChanA : BOOL;
//DataToNonsafe :
xID2ChanB : BOOL;
//DataToNonsafe :
xID10Ready : BOOL;
//DataToNonsafe :
xID10Error : BOOL;
//DataToNonsafe :
xID10ChanA : BOOL;
//DataToNonsafe :
xID10ChanB : BOOL;
//DataToNonsafe :
xID5Ready : BOOL;
//DataToNonsafe :
xID5Error : BOOL;
//DataToNonsafe :
xID5ChanA : BOOL;
//DataToNonsafe :
xID5ChanB : BOOL;
//DataToNonsafe :
xID7Ready : BOOL;
//DataToNonsafe :
xID7Error : BOOL;
//DataToNonsafe :
xID7ChanA : BOOL;
//DataToNonsafe :
xID7ChanB : BOOL;
END_VAR
Safety2NonSafety2

こちらも安全PLCから非安全PLCに転送する信号です。

VAR_GLOBAL
//Safety2NonSafety2 :
xID6Ready : BOOL;
//Safety2NonSafety2 :
xID6Error : BOOL;
//Safety2NonSafety2 :
xID6ChanA : BOOL;
//Safety2NonSafety2 :
xID6ChanB : BOOL;
//Safety2NonSafety2 :
xID8Ready : BOOL;
//Safety2NonSafety2 :
xID8Error : BOOL;
//Safety2NonSafety2 :
xID8ChanA : BOOL;
//Safety2NonSafety2 :
xID8ChanB : BOOL;
//Safety2NonSafety2 :
xID9Ready : BOOL;
//Safety2NonSafety2 :
xID9Error : BOOL;
//Safety2NonSafety2 :
xID9ChanA : BOOL;
//Safety2NonSafety2 :
xID9ChanB : BOOL;
//Safety2NonSafety2 :
xID11Ready : BOOL;
//Safety2NonSafety2 :
xID11Error : BOOL;
//Safety2NonSafety2 :
xID11ChanA : BOOL;
//Safety2NonSafety2 :
xID11ChanB : BOOL;
//Safety2NonSafety2 :
xID12Ready : BOOL;
//Safety2NonSafety2 :
xID12Error : BOOL;
//Safety2NonSafety2 :
xID12ChanA : BOOL;
//Safety2NonSafety2 :
xID12ChanB : BOOL;
//Safety2NonSafety2 :
xResetReady : BOOL;
//Safety2NonSafety2 :
xResetError : BOOL;
//Safety2NonSafety2 :
xES10 : BOOL;
//Safety2NonSafety2 :
xES2 : BOOL;
//Safety2NonSafety2 :
xES5 : BOOL;
//Safety2NonSafety2 :
xES7 : BOOL;
//Safety2NonSafety2 :
xES6 : BOOL;
//Safety2NonSafety2 :
xES9 : BOOL;
//Safety2NonSafety2 :
xES8 : BOOL;
//Safety2NonSafety2 :
xES11 : BOOL;
//Safety2NonSafety2 :
xES12 : BOOL;
//Safety2NonSafety2 :
wID2DiagCode : WORD;
//Safety2NonSafety2 :
wID10DiagCode : WORD;
//Safety2NonSafety2 :
wID5DiagCode : WORD;
//Safety2NonSafety2 :
wID7DiagCode : WORD;
//Safety2NonSafety2 :
wID6DiagCode : WORD;
//Safety2NonSafety2 :
wID8DiagCode : WORD;
//Safety2NonSafety2 :
wID9DiagCode : WORD;
//Safety2NonSafety2 :
wID11DiagCode : WORD;
//Safety2NonSafety2 :
wID12DiagCode : WORD;
//Safety2NonSafety2 :
wSF_EmergencyStopDiagCode : WORD;
//Safety2NonSafety2 :
xSF_EmergencyStopReady : BOOL;
//Safety2NonSafety2 :
xSF_EmergencyStopError : BOOL;
//Safety2NonSafety2 :
xSF_EmergencyStopOut : BOOL;
END_VAR

PROGRAM

次はSiemens上位S7-1500とデータ交換するためのプログラムを作成します。

gPNIO

こちらはFiedbusにMappingするための変数です。

{attribute ‘qualified_only’}
VAR_GLOBAL
gPNIO_IN :ARRAY[0..119]OF WORD;
gPNIO_OUT :ARRAY[0..119]OF WORD;
END_VAR
pFromPNController

こちらはSiemens S71500からリセット信号をもらい、Safey PLCに渡します。

PROGRAM pFromPNController
VAR
END_VAR

NonSafety2Safety.xAsiReset:=gPNIO.gPNIO_IN[0].0;
pToPNController

次はS71500に送信するプログラムを作成します。

PROGRAM pToPNController
VAR
iBaseCounter:DINT;
iBaseIndex:DINT;
iBaseIndex2:DINT;
END_VAR
VAR CONSTANT
ciWordPerChannel:DINT:=2;
END_VAR

今回は1チャンネルに2つのワードを占有し、Channelの入力状態や診断コードをS71500に送信します。

iBaseCounter:=2;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=SafetyToNoSafety1.xID2ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=SafetyToNoSafety1.xID2ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=SafetyToNoSafety1.xID2Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=SafetyToNoSafety1.xID2Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES2;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID2DiagCode;

iBaseCounter:=5;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=SafetyToNoSafety1.xID5ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=SafetyToNoSafety1.xID5ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=SafetyToNoSafety1.xID5Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=SafetyToNoSafety1.xID5Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES5;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID5DiagCode;

iBaseCounter:=6;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xID6ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xID6ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xID6Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=Safety2NonSafety2.xID6Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES6;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID6DiagCode;

iBaseCounter:=7;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=SafetyToNoSafety1.xID7ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=SafetyToNoSafety1.xID7ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=SafetyToNoSafety1.xID7Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=SafetyToNoSafety1.xID7Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES7;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID7DiagCode;

iBaseCounter:=8;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xID8ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xID8ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xID8Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=Safety2NonSafety2.xID8Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES8;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID8DiagCode;

iBaseCounter:=9;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xID9ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xID9ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xID9Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=Safety2NonSafety2.xID9Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES9;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID9DiagCode;

iBaseCounter:=10;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=SafetyToNoSafety1.xID10ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=SafetyToNoSafety1.xID10ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=SafetyToNoSafety1.xID10Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=SafetyToNoSafety1.xID10Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES10;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID10DiagCode;

iBaseCounter:=11;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xID11ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xID11ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xID11Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=Safety2NonSafety2.xID11Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES11;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID11DiagCode;

iBaseCounter:=12;
iBaseIndex:=iBaseCounter*ciWordPerChannel;
iBaseIndex2:=iBaseIndex*ciWordPerChannel+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xID12ChanA;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xID12ChanB;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xID12Error;
gPNIO.gPNIO_OUT[iBaseIndex].3:=Safety2NonSafety2.xID12Ready;
gPNIO.gPNIO_OUT[iBaseIndex].4:=Safety2NonSafety2.xES12;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wID12DiagCode;

iBaseIndex:=118;
iBaseIndex2:=iBaseIndex+1;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xSF_EmergencyStopError;
gPNIO.gPNIO_OUT[iBaseIndex].1:=Safety2NonSafety2.xSF_EmergencyStopOut;
gPNIO.gPNIO_OUT[iBaseIndex].2:=Safety2NonSafety2.xSF_EmergencyStopReady;
gPNIO.gPNIO_OUT[iBaseIndex].0:=Safety2NonSafety2.xSF_EmergencyStopError;
gPNIO.gPNIO_OUT[iBaseIndex2]:=Safety2NonSafety2.wSF_EmergencyStopDiagCode;
OB1

最後はMainプログラムに先ほど作成したPOUを呼び出します。

Mapping

Profinet通信のMappingを行うため、Fieldbus_Interfaceを開きます。

入出力データを先程定義したgPNIOとMappingしてください。

Download

非安全PLCのプロジェクトをAC402SにDownloadします。注意するのはApplicationとSafet_App_Mapping両方ともDownloadしてください。

CodesysからDownload操作するにはLoginをクリックしてください。

Safety Download

次はSafetyプロジェクトをDownloadします。Drop-listからSafetyAppを選択します。

Loginをクリックします。

AC402S本体にあるシリアル番号を入力し、OKで進みます。

DownloadのOptionを設定します。”Yes,I have! Tempoary download”をクリックします。

Passwordを入力します。DefaultのPasswordは空きです。

Create Boot Application

最後はBoot Applicationを作成するために、Online>Create Boot Applicationをクリックします。

OKで進みます。

Start

Startボタンをクリックアプリケーションを起動します。

Siemens Side

次はSiemens側を設定します。

Download GSDML

IFMのHPからAC402SのGSDML FileをDownloadします。

https://www.ifm.com/jp/ja/product/AC402S#documents

Install GSDML

Options>Manage general Station description files(GSD)をクリックします。

GSDMLの管理画面が表示され、…ボタンをクリックします。

先程DownloadされたGSDML Folderを選びましょう。

Done!GSDML Fileが見つかりました。InstallでGSDML Fileをインストールします。

Done!

New Project

TIAを起動し、Start>Create new project>プロジェクト名を入力し、Createで新規プロジェクトを作成しましょう。

Project viewをクリックします。

こちらはTIAのプロジェクト作成画面になります。

Add PLC

Project>Add new devieで新しいシーメンスのPLCを追加しましょう。

現在使用しているCPUの型式がわからない場合、Unspecified CPU 1500を設定しましょう。

Done!次は”Detect”でネットワークにあるS71500 CPUを検索しましょう。

Start Searchをクリックし、ネットワークにあるデバイスを検索します。

そして適切なCPUを選びましょう。

Connectで進みます。

Security Setting

TIA V18からCPUに関するセキュリティ設定を事前に設定する必要があります。今回は実際の運用ではありませんので、すべてのセキュリティ設定を無効にします。

Protects the PLC configuration data from the TIA..のCheckboxを外し、Next>>で進みます。

Only allow secure.. のCheckboxを外し、Next>>で進みます。

PasswordなしのFull accessに設定し、Next>>で進みます。

最後にもう一度確認し、Finishで設定を保存します。

Result

Done!S71516F-3が追加されました。

Program

これからシーメンスのプログラムを作成します。

DUT

構造体を定義します。

st16Bytes

こちらは16 Bytes配列の構造体です。

st120Words

こちらは120 Bytes配列の構造体です。

stAsiIFMSlave

AC402Sから転送された各Slaveの状態を構造体として定義します。

Add IFM AS402

AC402sをProfinetネットワークに追加します。

Done!

Not assignedをクリックし、Profinetネットワークに割り付けます。

Done!

IPアドレスをアプリケーションに合わせて設定します。

Configure Slot

AC402sのProfient Slotを設定します。

今回使用するのはSlot7,8なので、120ワードを追加し、アドレスを設定します。

Outputデータも同じように操作してください。

Profinet Name

Profinet名もアプリケーションに合わせて設定してください。

Assign Name

次はAC402sにProfinet名を設定するために、AC402sを右クリック>Assign device nameをクリックします。

Update listをクリックします。

Assign nameをクリックし、AC402sにProfinet 名を割り付けます。

Tags

先ほど定義したAC402s Slot7,8のアドレスに合わせてTagを定義します。

Function Block

Function Blockを作成します。

fbAsiSlave

こちらはAC402とデータ交換するためのFBになります。

VAR
Network1

ネットワーク1は入力パラメータがIndex外なのかをCheckします。

Network2

ネットワーク2は入力パラメータからIndexを計算し、Slave構造体に出力します。

_ToAS402

こちらはSiemensからAC402sに送信するプログラムになります。

VAR
Network2

AC402sにリセット信号を送信します。

Network3

ネットワーク3はデータをTagに出力します。

_FromAS402

こちらはAC402sから受信するデータを制御するプログラムになります。

VAR
Program

各IDに合わせて必要なデータを取り出します。

119ワードはESTOP状態になります。

dbAS402

DBを追加します。

IFM

こちらのFBは_ToAS402と_FromAS402のFBを呼び出します。

VAR

Program

OB1

最後はOB1にFB IFMを呼び出します。

Download

Hardware ConfigurationとプログラムをCPUにDownloadしてください。

Result

Done!S71500とAC402sのProfient通信が確立されました。

各Slaveの状態も受信できました。

AC402sの安全PLCにある非常停止状態にも受信できました。

AC402s側にもSAFE‐ 状態になりました。

AC402sのWeb ServerからもProfinet CommunicationがActiveであることを確認できました。

AC402sはエラーなしでプログラム動いています。

各Slaveの入力状態を確認できました。

同じく出力データにも確認できました。

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

シェアする

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

フォローする