Schmersal#PSC1安全コントローラー_Part3_CodesysとProfinetで繋がりましょう

こちらは新しいシリーズで、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の通信も正常です。

こちらの動画で操作確認をすることができます。

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

シェアする

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

フォローする