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

こちらは新しいシリーズで、Schmersal社のPSC1-C-100-FB1 Safety Controllerを利用し様々な記事を展開していきます。第7話はBeckhoff TwinCAT3とEtherCAT経由でデータ交換します。

さ、FAを楽しもう。

Reference Video

Schmersal.PSC1-C-100-FB1 開封しました!

Reference Link

http://soup01.com/ja/category/schmersal_jp/psc1/

EtherCAT

こちらはSchmersal社のPSC1-C-100-FB1 Safety ControllerのEtherCAT Slave仕様になります。

Implementation

こちらは今回の記事の構成です。

Schmersal Side

最初にSchmersal側を構築していきます。

Configure EtherCAT Slave

PSC1-C-100-FB1 Safety ControllerでEtherCAT Interfaceを有効にするために、コントローラーをクリックします。

Properties画面にあるLocal Network>FieldbusのCheckboxを入れます。

プロジェクトのLocal Network TabにFieldbusの表示が増えます。

次はLocal Network>Fieldbusをクリックします。

Properties>Network>TypeでEtherCATを設定します。

Done!

今回記事で使用したDevice ProfileはProfile 1 (Only logic data)になります。

Safety Program

次は安全プログラムを作成します。前回のPart6記事に続き、プログラムをわかりやすく分類するために機能ことにFunctional Sheetsを作成します。

  • Sheet00-INPUTS;入力データをまとめるSheetです。
  • Sheet-Programs;Door Lockなどのロジックが含まれたSheetです。
  • Sheet-OUTPUTS:出力をまとめるSheetです。

Sheetを追加するにはFunctional Sheets>右クリック>Add New Sheetしてください。

Done!

Sheet-INPUTS

Sheet-INPUTSは各安全・非安全入出力とEtherCAT Fieldbus経由で受信したリセット可能信号を異なるTerminalに転送します。

Sheet-Programs

Sheet-Programsは安全入力から転送してきたTerminalを利用し、異なる安全ロジックを実行します。また、出力データをTerminalに転送します。

Sheet-Outputs

Sheet-Outputsは安全Controllerに接続された出力を制御し、またEtherCATネットワーク経由でBeckhoff TwinCAT3に送信します。

Add Comments

SafetyPLC2ツールのプログラムにコメントをつけたい場合は、Sheetの空き場所に右クリックInsert Textしてください。

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に転送しましょう。

しばらくお待ち下さい…

Beckhoff Side

次はBeckhoff側を構築します。

Download ESI File

EthernetCAT ネットワークを構築するには、Schmersal社のHPからEDSをDownloadしてください。

https://products.schmersal.com/en_IO/psc1-c-100-fb1-103008452.html

先ほどDownloadしたESI Fileを下記のDirectoryに格納してください。

(自分が使用してるのはTwinCAT3 4026です)

C:\Program Files (x86)\Beckhoff\TwinCAT\3.1\Config\Io\EtherCAT

Reload ESI File

TwinCAT3Wを起動し、Extensions>TwinCAT>EtherCAT Devices>Reload Device DescriptionsでESI Fileを再ロードします。

Add New Project

TwinCAT 4026を起動し、File>New>Projectで新しいプロジェクトを作成しましょう。

TwinCAT XAE Projectを選び、Nextで進みます。

プロジェクト名を設定し、Createで進みます。

Done!TwinCATプロジェクトが作成されました。

Add EtherCAT Master

EtherCAT Masterを追加するため、Device>Add New Itemします。

EtherCAT>EtherCAT Masterを追加します。

Done!EtherCAT Masterが追加されました。

Configure Adapter

EtherCAT Masterとして使用するEthernet Adapterを設定するためにAdapter Tabを開きます。

Searchをクリックし、実際に使用するEthernet Adapterを設定しましょう。

Scan Network

EtherCAT Masterを右クリック>ScanでネットワークにあるEtherCAT Slaveを検索します。

Done!今回記事で使用するPSC-C-100-FB1 Controllerを検索できました。

Add PLC

次はPLCプロジェクトを追加するため、PLC>右クリック>Add New Itemします。

Standard PLC Projectを選び>Addで進みます。

DUT

PSC1のデータをまとめる構造体を定義します。

DUT_PSC1_IN 

こちらはSchmersal PSC1コントローラーの入力データをまとめた構造体です。

TYPE DUT_PSC1_IN :
STRUCT
uiAliveCounter :USINT;
xAlwasyON :BOOL;
uiPSCMode :USINT;
uiDeviceAddressError :USINT;
uiErrorCode :UINT;
aLogicData :ARRAY[0..50]OF BYTE;
bLogicData :ARRAY[0..407]OF BOOL;
END_STRUCT
END_TYPE
DUT_PSC1_OUT 

こちらはSchmersal PSC1コントローラーの出力データをまとめた構造体です。

TYPE DUT_PSC1_OUT :
STRUCT
aLogicData :ARRAY[0..31]OF BOOL;
END_STRUCT
END_TYPE
DUT_PSC1 

こちらは先ほど定義した入力データと出力データをまとめた構造体です。

TYPE DUT_PSC1 :
STRUCT
in :DUT_PSC1_IN;
out :DUT_PSC1_OUT;
_raw_in AT%I*:ARRAY[0..7]OF ARRAY[0..15]OF BYTE;
_raw_Out AT%Q*:ARRAY[0..3]OF BYTE;;
END_STRUCT
END_TYPE

GVL

次はGlobal Variable Listで先程定義した構造体で変数を作成します。

{attribute ‘qualified_only’}
VAR_GLOBAL
SlaveCount AT %I*:UINT;
PSC1:DUT_PSC1;
END_VAR

FB_PSC

こちらのFunction BlockはSchmersal PSC-C-100-FB1のデータをEncodeできます。

FUNCTION_BLOCK FB_PSC
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR_IN_OUT
ioData : DUT_PSC1;
END_VAR
VAR
iCounter:INT;
END_VAR
//AlwaysOn from PSC
ioData.in.xAlwasyON:=ioData._raw_in[0][0].4;
//Operation mode
ioData.in.uiPSCMode:=ioData._raw_in[0][0] AND 2#0000_0111;
//AliveCounter
ioData.in.uiAliveCounter:=ioData._raw_in[0][0] AND 2#1110_0000;
ioData.in.uiAliveCounter:=SHR(ioData.in.uiAliveCounter,5);
//Device Address Error
ioData.in.uiDeviceAddressError:=ioData._raw_in[0][1];
//Error Code
ioData.in.uiErrorCode:=SHL(TO_UINT(ioData._raw_in[0][3]),8);
ioData.in.uiErrorCode:=ioData.in.uiErrorCode+ioData._raw_in[0][4];


//Logic InputData
MEMMOVE(
destAddr:=ADR(ioData.in.aLogicData[0])
,srcAddr:=ADR(ioData._raw_in[0][5])
,n:=51
);

FOR iCounter:=0 TO 50 DO
ioData.in.bLogicData[iCounter*8+0]:=ioData.in.aLogicData[iCounter].0;
ioData.in.bLogicData[iCounter*8+1]:=ioData.in.aLogicData[iCounter].1;
ioData.in.bLogicData[iCounter*8+2]:=ioData.in.aLogicData[iCounter].2;
ioData.in.bLogicData[iCounter*8+3]:=ioData.in.aLogicData[iCounter].3;
ioData.in.bLogicData[iCounter*8+4]:=ioData.in.aLogicData[iCounter].4;
ioData.in.bLogicData[iCounter*8+5]:=ioData.in.aLogicData[iCounter].5;
ioData.in.bLogicData[iCounter*8+6]:=ioData.in.aLogicData[iCounter].6;
ioData.in.bLogicData[iCounter*8+7]:=ioData.in.aLogicData[iCounter].7;
END_FOR

//Logic Input Data
FOR iCounter:=0 TO 3 DO
ioData._raw_Out[iCounter].0:=ioData.out.aLogicData[iCounter*8+0];
ioData._raw_Out[iCounter].1:=ioData.out.aLogicData[iCounter*8+1];
ioData._raw_Out[iCounter].2:=ioData.out.aLogicData[iCounter*8+2];
ioData._raw_Out[iCounter].3:=ioData.out.aLogicData[iCounter*8+3];
ioData._raw_Out[iCounter].4:=ioData.out.aLogicData[iCounter*8+4];
ioData._raw_Out[iCounter].5:=ioData.out.aLogicData[iCounter*8+5];
ioData._raw_Out[iCounter].6:=ioData.out.aLogicData[iCounter*8+6];
ioData._raw_Out[iCounter].7:=ioData.out.aLogicData[iCounter*8+7];
END_FOR

MAIN

最後はMAINプログラムでFB_PSCのInstanceを定義し、非常停止などの状態・またリセット信号をSchmersal PSC-C-100-FB1から送受信できるようにします。

PROGRAM MAIN
VAR
xReset:BOOL;
xSafetyEnable:BOOL;
xSafetyOutputIsLocked:BOOL;
xSafetyOutputed1:BOOL;
xSafetyOutputed2:BOOL;
xDoorOK:BOOL;
xSafetyEStop:BOOL;
xSafetyLightCurtain:BOOL;
xDoorInPosition:BOOL;
END_VAR
VAR
PSC1:FB_PSC;
END_VAR
GVL.PSC1.out.aLogicData[28]:=xReset;

PSC1(ioData:=GVL.PSC1);

xSafetyEnable:=GVL.PSC1.in.bLogicData[5];
xSafetyOutputIsLocked:=GVL.PSC1.in.bLogicData[73];
xSafetyOutputed1:=GVL.PSC1.in.bLogicData[146];
xSafetyOutputed2:=GVL.PSC1.in.bLogicData[209];
xDoorOK:=GVL.PSC1.in.bLogicData[407];
xSafetyEStop:=GVL.PSC1.in.bLogicData[0];
xSafetyLightCurtain:=GVL.PSC1.in.bLogicData[1];
xDoorInPosition:=GVL.PSC1.in.bLogicData[2];

Mapping

PSC-C-100-FB1とTwinCAT3間のProcess IOデータをMappingします。Functional Inputsは出力で、Diagnosisは入力になります。Functional Inputsをクリックしてください。

Functional Inputsを右クリック>Change Linkします。

先ほどGVLで定義した変数と接続します。

入力データ側では今回は最初の0-55Bytes目のみ使用しますので、Diagnosis Data0とDiagnosis1を選び>Change Linkをクリックします。

先ほどGVLで定義した変数と接続します。

Done!

Visualization

PSC-C-100-FB1と通信確認するために簡単なWeb画面を作成します。

Add Web Visualization

また、今回の記事ではBrowser上でBeckhoff TwinCAT3のWeb HMIをアクセスしますので、Visualization Manager>WebVisuを追加してください。

Active Configuration

TwinCAT プロジェクトをPLCにDonwloadします。

OKで進みます。

TwinCAT3をRun Modeに切り替えましょう。

Login

LoginでプログラムをDownloadします。

Yesで進みます。

最後はPlayボタンをクリックしPLCプログラムをスタートします。

Result

SchmersalのPSC-C-100-FB1 Safety controllerでは非常停止などの安全デバイスに状態を出力しています。

TwinCAT3側もそれらのデータを受信しましたし、リセット許可信号も送信できました。

下記のLinkからIP Addressを自分のTwinCAT3 PCのIP Addressに変更し、BrowserからBeckhoff TwinCAT3のWeb HMIにアクセスできると思います。

https://TwinCAT3 IP Address/Tc3PlcHmiWeb/Port_851/webvisu.htm

こちらの動画で動作を確認してください。

Schmersal.PSC1-C-100-FB1 with TwinCAT3 via EtherCAT Communication

こちらのLinkで今回記事で作成したプロジェクトをDownloadできます。

https://drive.google.com/file/d/1_Ic7vMHdk_tnWtKYgCNFSfBsQIJhiAk4/view?usp=sharing

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

シェアする

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

フォローする