こちらの動画は三菱IQ-RのRJ71PN92を利用し、Beckhoff TwinCAT3 TF6270 と Belden のマルチプロトコルBlock IOをProfinetで接続する手順を1から説明します。
さ、はじめよう!
Reference Link
Reference Video
RJ71PN92?
RJ71PN92は三菱のIQ-Rの拡張通信モジュールです。このモジュールを使用することによりProfinet IO Controllerを立ち上げ、複数のProfinet IO Devicesと通信することができます。
Layout
こちらはRJ71PN92 モジュールのLayoutです。
Flow
こちらはRJ71PN92を使用するときのTime Chartです。
Download GSDML
下記のLinkからBeldenのProfinet・Ethernet/IPマルチプロトコルに対応するIO BlockのGSDML FileをDownloadしてください。
https://catalog.belden.com/index.cfm?event=pd&p=PF_0980ESL393121DCU1
GX Configurator-PN
RJ71PN92のProfinetネットワークを構築するにはGX Configurator‐PNのインストールが必要です。GX Configurator‐PNのセットアップFileは三菱電機の営業部署に問い合わせてください。
セットアップFileを起動し、Next>で進みます。
簡単な個人情報を入力し、Next>で進みます。
Installする場所を設定し、Next>で進みます。
Installで開始します。
しばらく待ちます…
Driverもインストールしていきましょう。
Done!
最後はパソコンを再起動しましょう。
Implementation
Beckhoff Side
Add Profinet Devices
I/O>Devices>Add New Itemで新規デバイスを追加します。
Profinet>Profinet I/O Device(RT)を選び>Okで進みます。
Profinet Deviceとして使用するEthernet Interfaceを設定してください。
Configure Task
Profinet Devices通信用の専用Taskを追加するため、Sync Task>Special Sync Taskを選び>Create new I/O Taskを追加します。
Task 名を入力し>Okで進みます。
Done!次はCycle TicksでTaskの更新時間を設定します。注意するのはProfinet ControllerのClockはProfinet Devicesより低くなると、Timeoutになる可能性が高いです。
Add New PNTC Device
次は三菱のモジュールと通信するデータを定義するため、Device 1>右クリック>Add New Itemします。
PNTC Deviceを選び>Okで進みます。
こちらはProfinet Versionを設定する画面です。TwinCAT3側は一番古いのV2.0にします。
Configure Slots
Beckhoff TwinCAT3のAPIにある各Slotのデータ交換領域を定義するため、API>Add New Itemします。
Device Configuration画面が表示されるので、アプリケーションに合わせてSlotを定義しましょう。今回の記事ではSlot1-3までModulesを定義しました。
Slot1
Slot1は64Word の入出力になります。
Slot2
Slot2は10 Float32 の入出力になります。
Slot3
Slot3は100DWord の入出力になります。
Generate GSDML
最後はGSDML Generator のTabを開き、”Create GSDML from original”でGSDML Fileを生成しましょう。
Add PLC
今度はPLCプロジェクトを追加するため、PLC>右クリック>Add New Itemします。
Standard PLC Projectを選び>AddでPLCプロジェクトを追加しましょう。
Add DUT
Process Input/Outputと紐つけるための変数を一括定義できるように、構造体を作成します。
構造体の名前を設定します。
こちらは三菱のRJ71PN92 Profinet IO Controllerと交換するデータ領域になります。今回の記事では入出力も同じサイズなので、定義も一回で済ませます。
TYPE DUT_dataExchange_Mels : STRUCT dataWords:ARRAY[0..63]OF WORD; dataFloat:ARRAY[0..9]OF REAL; dataDWord:ARRAY[0..99]OF DWORD; END_STRUCT END_TYPE |
Add GVL
次はGlobal Variable Listを追加するため、右クリック>Add>Global Variable Listをクリックします。
GVLの名前を定義します。
先ほど定義した構造体を利用し、三菱のRJ71PN92のモジュールとデータ交換する変数を定義します。
{attribute ‘qualified_only’} VAR_GLOBAL dataFromMels AT %I*:DUT_dataExchange_Mels; dataToMels AT %Q*:DUT_dataExchange_Mels; END_VAR |
MAIN
こちらはMAINプログラムになります。TwinCAT3のライブラリを使用し乱数を生成し各Registerにデータを書き込みます。
PROGRAM MAIN VAR i:INT; rand:DRAND; nrand:REAL; END_VAR rand(); nrand := rand.Num*5.0; FOR i := 0 TO 99 BY 1 DO GVL_data.dataToMels.dataDWord[i] := REAL_TO_DWORD(100.0*nrand*(i+1)); END_FOR FOR i := 0 TO 9 BY 1 DO GVL_data.dataToMels.dataFloat[i] := 10.0*nrand*(i+1); END_FOR FOR i := 0 TO 63 BY 1 DO GVL_data.dataToMels.dataWords[i] := i+1; END_FOR |
Activate Configuration
Activate ConfigurationでプロジェクトをCPUにDownloadしましょう。
OKで進みます。
Yesで進みます。
もしライセンスが足りない場合、魔法のコードを入力しましょう。
TwinCAT RuntimeをRun Modeに切り替えます。
Login
次はLoginします。
Yesで進みます。
最後はStartでプログラムをRunにします。
3
GXWORKS3 Side
Module Configuration
まずはModule Configurationを構築します。
R35B
Rack Module R35Bを追加します。
R61P
次は電源モジュールR61Pを追加します。
CPU
今度はプロジェクトを作成したとき追加されたR04EU CPUをCPU Slotに引っ張ってきます。
Done!
CPU Ext
こちらは今回使用したR04ENCPUですが、隣には1つの拡張モジュールがあり、実際このCPUは2Slotを占有しています。なので、Module Configurationでは隣の拡張モジュールも構築する必要があります。
CPU Extenstionには4つの_RJ71EN71 Slotがあり、実際のアプリケーションに合わせて適切なSlotを追加しましょう。
Done!今回は_RJ71EN71(E+IEF)を追加しました。
RJ71PN92
最後に今回の記事の主役RJ71PN92を追加してください。
Done!
Add System Label
このStepではMustではありませんが、ラベルを使用したい方にはModule Label>右クリック>Add Module LabelでCPUのラベルを追加しましょう。
Module Parameter
次はRJ71PN91のパラメータを設定するためRJ71PN92>Module Parameterをダブルクリックしましょう。
モジュールのIpアドレスとSubnetをアプリケーションに合わせて設定してください。
次はRJ71PN91のController 名も設定しましょう。
PROFINET Module Setting
今度はProfinetネットワークを構築するため、PROFINET Module Settingをダブルクリックします。
先ほど言ったGX Configurator PNをインストールしたら、ツールが自動的に立ち上げます。
Add GSDML
PROFINETネットワークを構築するにはGSDML Fileが必要で、赤矢印のボタンをクリックしGSDML Fileを追加します。
GSDML Management画面が表示され、Next>で進みます。
Add File(s)を選び、BrowseでGSDMLが格納された場所を設定し、Next>で進みましょう。
先程Beckhoff TwinCAT3でExportされたGSDML Fileを開きましょう。
Next>で進みます。
GSDML Fileがインストールされました。
Done!Finishをクリックし終了しましょう。
Device Libraryに先ほど追加したTwinCAT Deviceが表示されました。
同じ操作でBelden社のProfinet IO Blockも追加しましょう。
Add Devices
Device Libraryから先程のTwinCAT ProfinetデバイスをDropし、PROFINETネットワークに追加しましょう。
Profinet Deviceの設定画面が表示されます。
Device Name
Profinetネットワークを構築するには各IO Deviceにもデバイス名が必要で、こちらのDevice Nameはデバイス名になります。実際のアプリケーションに合わせて設定していきましょう。
IP Address
こちらはProfinet IO デバイスのIPアドレスになります。
NumberのDrop-Listからデバイスの番号を設定すると、該当する番号はIPアドレスの一番最後に数字に反映されます。例えば下図のようにNumberを99に設定すると、このProfinet IO DeviceのIPアドレスは192.168.5.99になります。
Activate Configuration
Defaultでは”Active Configuration”のCheck Box入れていますが、念の為にもう一度確認していきましょう。
Module Configuration
Module Configurationでは今回使用するGSDML Fileもすでに各Slotの領域が決められたので、特に設定する必要がありません。もし自由設定できるProfinet IO Deviceの場合、ProfinetのIO Device側が構築したSlot構成と一致する必要があります。
Parameters
ParametersではByteの並び(Device Data Order)・通信周期(Refresh Period)・タイムアウト参数(Watchgod Factor、Refresh Period x Watchdog Factor=実際のWatchgod タイム)を設定できます。
今回は1ms周期で設定します。
Result
Beldenのデバイスも先程と同じ操作で追加や設定してください。
Save
Profinet IO Deviceの構築が完了したら、設定を保存してください。
MAIN
こちらは今回記事で使用するMainプログラムです。
bPNConectOKTwinCAT3 Bit VAR iCounter Word [Signed] VAR |
こちらのプログラムはRJ71PN92から受信したデータをそのままTwinCATにFeedbackするプログラムです。また、Beldenのモジュールの入力を監視し、入力0と入力1がTrueの場合は非常停止のランプを点灯させます。
glRJ71PN92_1.stMgmtOutputs.bReq_DataExchangeStartRequest:= glRJ71PN92_1.stMgmtInputs.bSts_ConfigurationStatus; bPNConectOKTwinCAT3:=glRJ71PN92_1.stMgmtInputs.bnSts_IODevicesConnStatus[99]; glRJ71PN92_1.SLV099SLOT001DataStructOut.SLOT001_1_WORD_OUTPUT:= glRJ71PN92_1.SLV099SLOT001DataStructIn.SLOT001_1_WORD_INPUT; glRJ71PN92_1.SLV099SLOT001DataStructOut.SLOT001_1_WORD_OUTPUT62:= glRJ71PN92_1.SLV099SLOT001DataStructIn.SLOT001_1_WORD_INPUT62; glRJ71PN92_1.SLV099SLOT002DataStructOut.SLOT002_1_FLOAT32_OUTPUT:= glRJ71PN92_1.SLV099SLOT002DataStructIn.SLOT002_1_FLOAT32_INPUT; glRJ71PN92_1.SLV099SLOT002DataStructOut.SLOT002_1_FLOAT32_OUTPUT8:= glRJ71PN92_1.SLV099SLOT002DataStructIn.SLOT002_1_FLOAT32_INPUT8; glRJ71PN92_1.SLV099SLOT003DataStructOut.SLOT003_1_DWORD_OUTPUT:= glRJ71PN92_1.SLV099SLOT003DataStructIn.SLOT003_1_DWORD_INPUT; glRJ71PN92_1.SLV099SLOT003DataStructOut.SLOT003_1_DWORD_OUTPUT98:= glRJ71PN92_1.SLV099SLOT003DataStructIn.SLOT003_1_DWORD_INPUT98; glRJ71PN92_1.SLV111SLOT001DataStructOut.SLOT001_8_BIT_OUTPUT_DATA[0]:= (glRJ71PN92_1.SLV111SLOT001DataStructIn.SLOT001_16_BIT_INPUT_DATA[0] AND glRJ71PN92_1.SLV111SLOT001DataStructIn.SLOT001_16_BIT_INPUT_DATA[1] ) AND RCPU.stSM.b1sClock ; ; |
Update Label
GX Configurator-PNからIO デバイスが登録された項目名、関連するグローバルラベルと構造体をプロジェクトに反映するため、GXWORKS3で手動更新する必要があります。
モジュールを右クリック>Update PROFINET Labelをクリックします。
Global Label FolderにはGlobal_PN92_1というSheetが追加されます。
glRJ71PN92_1というGlobal Labelがあり、先程Update Labelの操作でGlobal Labelが更新されました。
中にRJ71PN92で構築したProfinet デバイスの入出力もすべて定義されました。
Autorefresh Settings
次はRJ71PN92 Profinet IO Controllerと各Profinet Deviceを交換する入出力データのとき、CPUの中にどこのメモリ番地を設定する必要があります。
モジュールを右クリック>Autorefresh Settingsをクリックします。
Output device(IQ-R -> PN Controller)はCPU側RJ71PN92 Profinet Controllerに出力するとき、CPU内のメモリ番地を指定します。下図ではUser CPU Deviceをw0に設定しましたので、つまりw0からw189まではCPU‐>RJ71PN92の出力データ領域になります。
Input device(IQ-R <ー PN Controller)はRJ71PN92 Profinet ControllerがCPU側に出力するとき、CPU内のメモリ番地を指定します。下図ではUser CPU Deviceをw0に設定しましたので、つまりw3Aからw2A6まではCPU‐>RJ71PN92の出力データ領域になります。
それらの設定はすべてGXWORKS3が自動で行うので、特に手動で設定する必要がありません。
Show I/O Mapping
Show I/O Mapping機能を利用し、各入出力データがCPU内にどの番地になるかを確認できます。
OSのDefault Browserが自動的に起動され、いまProfinetのMappingを確認できます。
PROFINET DUT
こちらはGXWORKS3が自動的に生成する構造体の意味になります。
- “Global_PN92 “で始まる名前のグローバルラベルはProfinetに関連する制御や状態確認用の構造体です。
- “stSLV “で始まる名前の構造体は各Profinet Devices入出力構造に合わせて定義した構造体です。
それらの構造体はRJ71PN92_1に使用されています。
Compile
最後はプロジェクトをコンパイルしましょう。
Download
Write to PLCでプロジェクトをCPUにDownloadしましょう。
DownloadするときPROFINET ModuleのCheckboxをCheckするのは忘れずに。
Reset Power
プロジェクトDownload完了したらCPUの電源を入れ直しましょう。
Assign Device Name
最後は各Profinet DeviceにDevice Nameを振り分けるために、GX Configurator-PNをもう1回立ち上げ、Network Delection>Online Actionをクリックします。
RJ71PN92が自動的にネットワークにあるProfinet機器を検索します。
Done!
Profinet機器を選び>Name FieldでProfinet Device Nameを入力し、Apply NameでProfinet NameをDCP経由で割り付けます。
Pemanent NameのCheckboxを入れれば保存された設定を不揮発性メモリに保存することができます。つまり電源を失っても設定が保持されます。
Result
Devices>Start Console Diagnosticで各Profinet Devicesの状態を確認できます。
Done!Beckhoff TwinCAT3のProfinet DeviceとBeldenのProfinet IOにも緑のICONがついており、つまり現在通信状態が正常です。
Profinet Devicesをクリックし、Connection Information TabでConnection Stateを確認できます。
I/O Data TabでProfinet IO ControllerとIO Devices間のデータを確認できます。
TwinCAT3から送信してきたデータも確認できました。
TwinCAT3側も確認していきましょう。PnIoBoxState変数をクリックします。
現在のState=5で、つまり0x0001と0x004になり、現在DevicesはIOデータ交換状態であることを示しています。
Belden Profinet IO Blockの入力信号でも確認できました。
こちらはRJ71PN92が正常通信するときのLED状態です。
こちらはBelden Profinet IO Blockが正常に通信するときのLED状態です。
こちらの動画はRJ71PN92からBelden Profinet IOを制御しています。
Download
こちらのLinkから今回の記事のプロジェクトをDownloadしてください。
https://github.com/soup01Threes/GXWROKS/blob/main/Project_RJ71PN92.gx3