Codesys#Add FB for IO Channel

今回の記事ではいままでずっと謎だったAdd FB for IO Channelボタンをどう使うかを説明します。よろしくお願いします。

Configuration

今回の構成はCodesysがEthernet/IP のScannerでAXCF 3152 PLCNEXTがAdapterになります。

Reference Link

http://soup01.com/ja/category/protocol/ethernet-ip/

PLCNEXT#Communicate with TwinCAT/Codesys By Ethernet/IP

Implementation

Add FB for IO Channelという設定を使用するにはCodesysの2つのAttributeが必要です。それは’io_function_block’ と ‘io_function_block_mapping’です。

io_function_block

Function blockにそのAttributeをつけるとDevice MappingからI/O Mappingに振り分けることができます。つまりAdd FB for IO Channelのボタンをクリックすると該当するFunction blockが表示されるようになります。

io_function_block_mapping

io_function_block AttributeつけてるFunction Blockにio_function_block_mappingのAttribute

があるパラメータはI/O Mappingと自動に紐づけることになります。。注意するのは複数のVariableをio_function_block_mapping Attributeつけても、I/O Mappingと紐付けられるのは最初に合うパラメータだけ(INPUTかOUTPUT、そしてデータタイプが一致)になります。

FB_PLCNEXT_INPUTPROCESS

まずいつも通りにFunction Blockを作成します。

VAR

まずFUNCTION BLOCKの先頭に{attribute ‘io_function_block’}をつけます。

そうするとAdd FB for IO ChannelからそのFB_PLCNEXT_INPUTPROCESSを選択できるようになります。次はByteINの前に{attribute ‘io_function_block_mapping’}をつけます。

つまりAdd FB for IO ChannelからFB_PLCNEXT_INPUTPROCESSを設定すると、そのデバイスは自動的にByteINという変数と紐付けられる。

{attribute ‘io_function_block’}
FUNCTION_BLOCK FB_PLCNEXT_INPUTPROCESS
VAR_INPUT
{attribute ‘io_function_block_mapping’}
ByteIN:USINT;
END_VAR
VAR_OUTPUT
Encoded:ARRAY[0..7]OF BOOL;
END_VAR
VAR
END_VAR

PROGRAM

Function Block内のプログラムはそのByteIN変数をBoolにバラしてEncodedという長さ8のBool配列に出力します。

Encoded[0]:=ByteIN.0;
Encoded[1]:=ByteIN.1;
Encoded[2]:=ByteIN.2;
Encoded[3]:=ByteIN.3;
Encoded[4]:=ByteIN.4;
Encoded[5]:=ByteIN.5;
Encoded[6]:=ByteIN.6;
Encoded[7]:=ByteIN.7;

Assign IO

PLCNEXT AXCF-3152をEhternetIP Networkに追加し>Ethernet/IP I/O Mapping>一つ目のInput変数を選び>Add FB for IO Channelをクリックします。

FB_PLCNEXT_INPUTPROCESSを選び>OKします。

自動的にFunction Blockが作成され紐付けられます。

Function Blockにアクセスするには直接にAXC_F_3152_FB_PLCNEXT_INPUTPROCESS_3.YourVariableでOKです!

ではいくつかのInput変数を定義します。

Ethernet/IP IEC ObjectsのTabには作成されたFunction Block Instanceを一覧できますし、その画面から直接AddボタンからFBを作成もできます。

MAIN

VAR

PROGRAM PLC_PRG
VAR
ByteFromPLCNEXT:ARRAY[0..255]OF BYTE;
ByteToPLCNEXT  :ARRAY[0..255]OF BYTE;
a1,a2,a3,a4,a252,a253,a254,a255 :ARRAY[0..7]OF BOOL;
END_VAR

PROGRAM

注意するのはFB_PLCNEXT_INPUTPROCESSもすでにBackgroundで呼び出しされたのでMAINのプログラムでCALLする必要がありません。

a1:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_1.Encoded;
a2:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_2.Encoded;
a3:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_3.Encoded;
a4:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_4.Encoded;
a252:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_252.Encoded;
a253:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_253.Encoded;
a254:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_254.Encoded;
a255:=AXC_F_3152_FB_PLCNEXT_INPUTPROCESS_255.Encoded;

PLCNEXT Side

PLCNEXT側はいくつかの変数にTureを書き込みます。

Result

実際にもなにもやらずにプログラムが処理されました!

Sample Code

以下のLinkからProjectをDownloadしてください。

https://github.com/soup01Threes/Codesys/blob/main/Codesys-Example-Add%20FB%20IO%20Channel.project

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

シェアする

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

フォローする