こちらは新しいシリーズで、Schmersal社のPSC1-C-100-FB1 Safety Controllerを利用し様々な記事を展開していきます。第3話はBerghof Codesys ControllerとProfinet通信の構築方法を説明します。
さ、FAを楽しもう。
Reference Video
Schmersal.PSC1-C-100-FB1 開封しました!
Reference Link
http://soup01.com/ja/category/schmersal_jp/psc1/
Fieldbus with PSC1 Controller
Ethernetベースのフィールドバスはこちらになります。
Profinet
こちらはPSC1-C-100-FB1でProfient IO Devicesとして使用するときの仕様になります。
Device Profile
こちらはSCHMERSAL PSC1-C-100-FB1のProfinet Profile2の入力Mappingです。
こちらはSCHMERSAL PSC1-C-100-FB1のProfinet Profile2の出力Mappingです。
Non-Safe Usage Object
今回の記事では初めてロジック入出力データ部品を使用しました。PSC1 から上位コントローラへの非安全関連通信では、PSC1-C-10 は 55 ビット、PSC1-C-100 は最大 408 ビット(選択により異なる)を提供します。
Functional Inputs
Functional Inputは一度しか使用できなく」、 各機能ブロックの「入力数」プロパティは、1〜32の範囲で設定できます。
Functional Inputsは、上位コントローラからの非安全関連信号を SafePLC2 アプリケーションで使用することを可能にします。 DIN EN 13849-1 の 4.6.3 章に従い、セーフティインテグリティを低下させる可能性のある、セーフティ信号と非セーフティ信号の論理的なリンクがあってはならないことに注意してください。
安全アプリケーションの設計者は、これを確実にする責任を負います。 SafePLC2 は、Functional Inputsを他の信号と’and’リンク強制します。
これにより、対応する入力が特別に処理されなければならないことが設計上すでに明確になり、アプリケーションの検証が容易になります。
Functional Outputs
Functional Outputs は1回のみ使用できます。 各ブロックの出力数は、PSC1-C-10シリーズでは1〜55、PSC1-C-100シリーズでは1〜408の範囲で設定できます。 下図は 3 つのコネクタを持つ機能出力ブロックです。 また、各コネクタは個別に設定できます。
Implementation
こちらは今回の記事の構成になります。
Schmersal Side
最初にSCHMERSAL側のPSC1-C-100-FB1 Safety Controllerから始めます。
Activate Fieldbus
Profinet IO DevicesのInterfaceを有効にするために、Controllerを選択します。
PSC1-C-100-FB1 Safety ControllerのPropertiesにLocal Network>FieldbusのCheckboxを入れてください。
Configure Profinet
SafePLC2ツールの左側にあるLocal NetworkにFieldbus ProfiNetという項目が追加されました。
Fieldbus ProfiNetのPropertiesに接続設定などの項目があります。
Type
こちらはPSC1-C-100-FB1 Safety ControllerのFieldbusタイプを選択します。
Profinet・EtherCAT・EthernetIPのどちらかを設定できます。
Network Prototype
こちらはFieldbusには安全通信を有効するかの設定になります。
今回はNon-SafetyのProfinet通信を構築するので、Network ProptotypeにNon-Safeを設定してください。
Device Profile
こちらは上位と通信するとき、データ交換のタイプを設定できます。
今回の記事ではProfile1(Only Logic data)に設定します。Data Mappingは先程紹介した表を参考にしてください。
IP Configuration
Profinet通信を成立するには、Profinet IO Devices(今回の記事ではSCHMERSALのPSC1-C-100-FB1)のデバイス名をProfinet IO Controllerの設定に合わせる必要があります。
こちらはSafePLC2のProfinet ツールです。
Select Networkcards
最初にPSC1-C-100-FB1を検索するNetworkカードを設定します。
Scan Network!
次は”Scan Network”ボタンをクリックします。
Done!PSC1-C-100-FB1 Safety Controllerが表示されました。
Assign Name/IP
最後はアプリケーションに合わせて、IPアドレスとデバイス名を設定しましょう。それらの設定を反映するために、”Set IP”と”Set Name”を別々に実行してください。
また、それらの設定を不揮発メモリに保存するために、”permanent”のCheckboxを入れてください。
Program
今度は安全プログラムを作成するために、Functional Sheetsを開きます。
こちらは今回記事で作成した安全プログラムです。前回と同じで、Profinet経由で上位Controllerにデータを送り返す部分追加されます。
こちらは追加された部分です。
- 非常停止TRUEの信号→Profinet IO Controllerに送信
- 非常停止FALSEの信号→Profinet IO Controllerに送信
- 非常停止TRUEなおかつリセットOKの信号→Profinet IO Controllerに送信
- Profinet IO Controllerからのリモートリセット→PSC1-C-100-FB1に送信
Use Fieldbus Data
Fieldbus Dataを使用するには、LibraryからFunctional Input・Functional Outputをプロジェクトに追加してください。
- Functional Input:Fieldbus経由で受信した入力データ
- Functional Output:Fieldbus経由で送信した出力データ
また、Bitsの項目でFieldbusのメモリOffsetを設定できます。
次はFunctional InputにはDefaultで”Top input”だと設定されています。
”Use top input connector”のCheckboxからConnectorの位置を変更できます。
Done!
Connect to the Controller
PSC1-C-100-FB1のCOM Portと専用ケーブルをPCに接続します。
SafePLC2>Home>Device Interfaceをクリックします。
Connection Settingsをクリックします。
今回はRS-232ケーブルを使用するので、COM PortをDevice Managerに合わせて設定しましましょう。
最後はConnectボタンをクリックし、CPUとSafePLC2を接続しましょう。
OKで進みます。それでSafePLC2とPSC1-C-100-FB1を接続しました。
Send Configuration
Send Configurationをクリックし、プロジェクトをPSC1-C-100-FB1に転送しましょう。
しばらくお待ち下さい…
Start
最後はStartボタンをクリックし、PSC1-C-100-FB1 CPUをRUN MODEにします。
Monitor
SafePLCツールにもIOやプログラムの監視機能があります。Device Interfaceをクリックします。
Conenct をクリックしPCとPSC1-C-100-FB1に接続します。
次はDiagnosticsをクリックしましょう。
Done!先ほど私達が作成したプログラムをMonitorできました。
もちろんプログラムだけではなく、配線図(Wiring Scheme)からも各IOの状態を確認することが可能です。
Codesys Side
次はCodesys側を構築します。今回記事で使用したのはBerghof社のCodesys Controllerです。
Install GSDML File
Profinet ネットワークを構築するには、Schmersal社のHPからGSDMLをDownloadしてください。
https://products.schmersal.com/en_IO/psc1-c-100-fb1-103008452.html
Codesys IDEを起動し>Tools>Device Repositoryをクリックします。
Installをクリックします。
先ほどSCHMERSAL HPからDownloadしたGDSML Fileを開きます。
Done!
Add Ethernet Driver
次はCodesysプロジェクトにEthernet Driverを追加するため、Device>右クリック>Add Deviceします。
Ethernet Adapter>Ethernetを選択し、Add Deviceで追加します。
Done!
Configure Ethernet Interface
General>Network Interface>Browseで適切なEthernet Adapterを設定しましょう。
Add Profinet IO Controller
次はProfinet IO Controllerを追加するために、Ethernet>右クリック>Add Deviceします。
PROFINET IO>PROFINET IO Master>PN-Controllerを選び、Add DeviceでProfinet IO Controllerを追加しましょう。
Configure PN Controller
Profinet Controllerを設定するため、先程追加したPN Controllerをクリック>Generalを開きましょう。
こちらはProfinet IO Controllerの設定画面になります。
Default Slave IP Parameter
Default Slave IP ParameterはPN Controllerの下に追加するProfinet Deviceに自動的に振り分けるIPアドレスの範囲を設定できます。
Station Name
こちらはPN Controllerのデバイス名になります。
Add Profinet IO Devies
次はProfinet IO デバイスを追加するため、PN Controllerを右クリック>Add Deviceします。
SCHMERSAL社のPSC1-C-xxxを追加しましょう。
Configure Profinet IO Devices
今度はProfinet IO デバイス PSC1-C-100-FB1の設定を行います。
IP Parameter
General>IP ParameterでPSC1-C-100-FB1のIPアドレスを設定します。
Station Name
Station NameでPSC1-C-100-FB1のデバイス名を設定しましょう。
Assign Profinet Parameters
SchmersalのSafeyPLC2ツールからはもちろん、Codesys IDEでもProfinetのIP・デバイス名を割り付けることができます。PN Controller>右クリック>Scan for Devicesをクリックします。
Profinetのデバイス検索画面が表示されました。
Station NameをProfinet Configurationと一致する設定をしてください。
次はSet Name and IPをクリックし、デバイス名とIPをPSC1-C-100-FB1に割り付けましょう。
Done!
DUT
Codesysのプログラムで構造体を作成します。
DUT_PSC1_Profile2_InputData
こちらはPSC1-C-100-FB1のProfile2の入力データになります。
TYPE DUT_PSC1_Profile2_InputData : STRUCT usiPSC1Mode :USINT; usiAliveCounter :USINT; arrbErrorBytes :ARRAY[0..1]OF BYTE; arrxLogicData :ARRAY[0..407]OF BOOL;//ID END_STRUCT END_TYPE |
DUT_PSC1_Profile2_OutputData
こちらはPSC1-C-100-FB1のProfile2の出力データになります。
TYPE DUT_PSC1_Profile2_OutputData : STRUCT arrxLogicData :ARRAY[0..31]OF BOOL;//ID END_STRUCT END_TYPE |
DUT_PSC1_Profile2_IO
こちらは先程定義した入出力データをまとめた構造体です。
TYPE DUT_PSC1_Profile2_IO : STRUCT in:DUT_PSC1_Profile2_InputData; out:DUT_PSC1_Profile2_OutputData; END_STRUCT END_TYPE |
GVL
Global Variables Listに入出力データを定義しましょう。
{attribute ‘qualified_only’} VAR_GLOBAL PSC1:DUT_PSC1_Profile2_IO; _rawIN AT %IB1000:ARRAY[0..127]OF BYTE; _rawOUT AT %QB1000:ARRAY[0..3]OF BYTE; END_VAR |
Program
次はプログラムを作成します。
FB_PSC1
こちらのFBはPSC1-C-100-FB1の入出力を処理します。
FUNCTION_BLOCK FB_PSC1 VAR_IN_OUT ioarrayData_IN :ARRAY[*]OF BYTE; ioarrayData_OUT :ARRAY[*]OF BYTE; ioData :DUT_PSC1_Profile2_IO; END_VAR VAR_OUTPUT END_VAR ioData.in.usiPSC1Mode:=ioarrayData_IN[0] AND 16#000F; ioData.in.usiAliveCounter:=ioarrayData_IN[0] AND 16#00E0; ioData.in.arrbErrorBytes[0]:=ioarrayData_IN[3] AND 16#0F; ioData.in.arrbErrorBytes[1]:=ioarrayData_IN[4] AND 16#0F; MEM.MemMove( pSource:=ADR(ioarrayData_IN[5]) ,pDestination:=ADR(ioData.in.arrxLogicData) ,uiNumberOfBytes:=51 ); MEM.MemMove( pSource:=ADR(ioData.out.arrxLogicData) ,pDestination:=ADR(ioarrayData_OUT[0]) ,uiNumberOfBytes:=4 ); |
MAIN
こちらはMAINプログラムです。
VAR
こちらはMAINプログラムの変数定義です。
PROGRAM PLC_PRG VAR fbPSC1 :FB_PSC1; fbTON1 :Standard.TON; xESTOPisOK :BOOL; xESTOPisNotActivated :BOOL; xSystemOK :BOOL; xEnable :BOOL; END_VAR VAR CONSTANT cxAlwaysON :BOOL:=TRUE; END_VAR |
Network1
ネットワーク1はCodesys→SCHMERSAL PSC1-C-100-FB1の有効信号です。
Network2
ネットワーク2は先程追加したFBを呼び出します。
Network3
ネットワーク3はPSC1-C-100-FB1→Codesysに送信したデータから非常停止が正常であるかを確認します。
Network4
ネットワーク4はPSC1-C-100-FB1→Codesysに送信したデータから非常停止が無効であるかを確認します。
Network5
ネットワーク5はPSC1-C-100-FB1→Codesysに送信したデータから非システム全体の状態がOKであるかを確認します。
Visuilation
最後は簡単なCodesys Visuilationを作成します。
Login
Online>LoginでプロジェクトをDownloadして行きましょう。
Result
PSC1-C-100-FB1が正常に立ち上げれば、PSC1-C-100-FB1本体にあるStatus LECが”4”に表示されます。
Profinetの通信も正常です。
こちらの動画で操作確認をすることができます。