Project#Start up your ATV320_Part3_Using ctrlx to built a HMI

前回ではTM221のModbusRUTとDrv Objectを使用しATV320 Driveを制御してみました。今回はCtrlx PLC Engineering中にあるCodesysベースのWebVisuを使用しWeb Browserから操作してみます。よろしくおねがいします。

Implementation

今回はCtlx AutomationのModbus TCP APPを使用し、データをTm221 Schneiderと交換しCtrlXの CodesysベースWeb表示に表示させます。


Reference Link

Project#Wago ModbusTCP Coupler 750-362 with TwinCAT TF6250/ctrlX Modbus TCP Apps
Project#Start up your ATV320_Part2_Using M221ME16T CPU with Modbus IO Scanner
Project#Start up your ATV320_Part1_ Using M221ME16T CPU with DI1/DI2/AI1
Schneider#EcoStruxureMachine Expert-Basic Installation
Project#Beckhoff TwinCAT3 x Schneider TM221 CPU x Ethernet/IP Communication
Schneider#Modicon CPU Firmware Update
Project#Revpi Connect x Schneider Mdoicon M221 x Modbus RTU

TM221 Side

Modbus TCP Configuration

Configurationを開き>ETH1>Modbus TCPを展開するとModbus TCPの設定画面が表示されています。

Modbus TCP 画面からUnit IDやTotolの交換データサイズを設定できます。

Defaultでは10ですが、プロジェクト内に16 BitsのRegisterが10個構築されました。

この記事では20個を構築していきます。

Programming Tabを開き>Network Objectsを展開すると、Input/Output Register(Modbus TCP )があります。

先程20個のInput Registerが構築されたので、プロジェクト内で%QWM0から%QWM19までのModbus TCP Registerを使用可能です。

先程20個のOutput Registerが構築されたので、プロジェクト内で%IWM0から%IWM19までのModbus TCP Registerを使用可能です。

Programming

今回の記事ではStaustやCommandをInput/Output Register とUser変数の間に転送するだけになります。

How to bitaccess?

このような書き方で、TM221の中にWordデータのBitアクセスができます。以下のExampleでは%QWM1の0Bit目にアクセスするのと同じです。

%QWM1:X0

Pou4_HMI

Pou_HMIは新しいプログラムでInput/Output Register とUser変数の間を転送しています。

Transfer Status to Input Register

Rung0からRung10までは、DriveやCPUの状態をInput Registerに転送します。

Data From Output Register

Rung12からRung16まではOutput Registerから受信したコマンドを受け取り、User変数に転送します。

Pou1 System Modification

Rung1で各コマンドのTrigger条件をORで増やせばOKです。

Ctrlx Side

Modbus TCP Apps

Modbus TCP Slaveを追加し、IP/Ports/Slave IDを設定してください。

こちらはModbus TCP Slaveを構築するには重要なパラメータです。

FC23とFC16のTasksが作成されました。

Input Register

こちらはInput Register Taskの設定です。

Output Register

こちらはOutput Register Taskの設定です。

Configure DataLayer

DataLayer_Realtimeを設定しModbusTCP Appsとデータをやり取りします。

Done!

Programming

Data Unit Type

DUT_ATV320_ModbusStatus_w0_structure 

こちらのDUTではSchneiderCPUのModbus TCP Input Register0に該当します。

TYPE DUT_ATV320_ModbusStatus_w0_structure :
STRUCT
RUN :BOOL;
SL1_STOP :BOOL;
SL1_ReqInited :BOOL;
SL1_OP :BOOL;
SL1_PARITALLYOP :BOOL;
SL1_SUSPEND :BOOL;
_b6,_b7,_b8,_b9
,_b10,_b11,_b12
,_b13,_b14,_b15 :BOOL;

END_STRUCT
END_TYPE
uDUT_ATV320_ModbusStatus_w0 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusStatus_w0_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusStatus_w0 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusStatus_w0_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusStatus_w1_structure 

こちらのDUTではSchneiderCPUのModbus TCP Input Register1に該当します。

TYPE DUT_ATV320_ModbusStatus_w1_structure :
STRUCT
IO1_Drive_Power_IL :BOOL;
IO1_OP_IL :BOOL;
_b2,_b3,_b4,_b5
,_b6,_b7,_b8,_b9
,_b10,_b11,_b12
,_b13,_b14,_b15 :BOOL;
END_STRUCT
END_TYPE
uDUT_ATV320_ModbusStatus_w1 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusStatus_w1_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusStatus_w1 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusStatus_w1_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusStatus_w2_Structure 

こちらのDUTではSchneiderCPUのModbus TCP Input Register2 に該当します。

TYPE DUT_ATV320_ModbusStatus_w2_Structure :
STRUCT
IO1_MC_POwer_Status :BOOL;
IO1_MC_Power_Error :BOOL;
IO1_MC_JOG_FW :BOOL;
IO1_MC_JOG_BW :BOOL;
IO1_MC_JOG_DONE :BOOL;
IO1_MC_JOG_BUSY :BOOL;
IO1_MC_JOG_CMDABORED :BOOL;
IO1_MC_JOG_ERROR :BOOL;
IO1_MC_MOVEVEL_IL :BOOL;
IO1_MC_MOVEVEL_CMD :BOOL;
IO1_MC_MOVEVEL_CONTUPDATE :BOOL;
IO1_MC_MOVEVEL_INVEL :BOOL;
IO1_MC_MOVEVEL_BUSY :BOOL;
IO1_MC_MOVEVEL_CMDABORED :BOOL;
IO1_MC_MOVEVEL_ERROR :BOOL;
IO1_STATUS_VALID :BOOL;
END_STRUCT
END_TYPE
uDUT_ATV320_ModbusStatus_w2 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusStatus_w2_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusStatus_w2 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusStatus_w2_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusStatus_w3_Structure 

こちらのDUTではSchneiderCPUのModbus TCP Input Register3 に該当します。

TYPE DUT_ATV320_ModbusStatus_w3_Structure :
STRUCT
IO1_STATUS_ERRORSTOP :BOOL;
IO1_STATUS_DISABLED :BOOL;
IO1_STATUS_STOPPING :BOOL;
IO1_STATUS_STANDSTILL :BOOL;
IO1_STATUS_CONTMOTION :BOOL;
IO1_STATUS_ERROR :BOOL;
IO1_MCREADMOTIONSTS_VALID :BOOL;
IO1_MCREADMOTIONSTS_CONSTANTVEL :BOOL;
IO1_MCREADMOTIONSTS_ACCELERATING :BOOL;
IO1_MCREADMOTIONSTS_DECELERATING :BOOL;
IO1_MCREADMOTIONSTS_ERROR :BOOL;
IO1_MC_RESET_DONE :BOOL;
IO1_MC_RESET_BUSY :BOOL;
IO1_MC_RESET_ERROR :BOOL;
IO1_MC_STOP_DONE :BOOL;
IO1_MC_STOP_BUSY :BOOL;
END_STRUCT
END_TYPE
uDUT_ATV320_ModbusStatus_w3 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusStatus_w3_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusStatus_w3 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusStatus_w3_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusStatus_w4_Structure 

こちらのDUTではSchneiderCPUのModbus TCP Input Register4 に該当します。

TYPE DUT_ATV320_ModbusStatus_w4_Structure :
STRUCT
IO1_MC_STOP_ERROR :BOOL;
_b1,_b2,_b3,_b4,_b5
,_b6,_b7,_b8,_b9
,_b10,_b11,_b12
,_b13,_b14,_b15 :BOOL;
END_STRUCT
END_TYPE
uDUT_ATV320_ModbusStatus_w4 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusStatus_w4_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusStatus_w4 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusStatus_w4_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusStatus 

こちらのDUTではすべてのStatus wordを一つのDUTにもう一回まとめます。このDUTではGVLを使用します。

TYPE DUT_ATV320_ModbusStatus :
STRUCT
w0 :uDUT_ATV320_ModbusStatus_w0;
w1 :uDUT_ATV320_ModbusStatus_w1;
w2 :uDUT_ATV320_ModbusStatus_w2;
w3 :uDUT_ATV320_ModbusStatus_w3;
w4 :uDUT_ATV320_ModbusStatus_w4;
w5_ActualSpeed :INT;
END_STRUCT
END_TYPE
DUT_ATV320_ModbusCmds_w0_structure 

こちらのDUTではSchneiderCPUのModbus TCP Output Register0 に該当します。

TYPE DUT_ATV320_ModbusCmds_w0_structure :
STRUCT
PowerON :BOOL;
JogFW :BOOL;
JogBW :BOOL;
MoveVel :BOOL;
ContUpdate :BOOL;
Reset :BOOL;
Stop :BOOL;
_b7,_b8,_b9
,_b10,_b11,_b12
,_b13,_b14,_b15 :BOOL;
END_STRUCT
END_TYPE
uDUT_ATV320_ModbusCmds_w0 

Union Data Typeを使用し変数をWORD Formatにまとめます。そうするとDUT_ATV320_ModbusCmds_w0_structureと同じMemory Offsetになります。

TYPE uDUT_ATV320_ModbusCmds_w0 :
UNION
_raw :WORD;
data :DUT_ATV320_ModbusCmds_w0_structure;
END_UNION
END_TYPE
DUT_ATV320_ModbusCmds 

こちらのDUTではすべてのCommand wordを一つのDUTにもう一回まとめます。このDUTではGVLを使用します。

TYPE DUT_ATV320_ModbusCmds :
STRUCT

w0 :uDUT_ATV320_ModbusCmds_w0;
w1 :WORD;
w2_Jog_Cmd :INT;
w3_MoveVel :INT;
END_STRUCT
END_TYPE

Pous

先程定義したDUTをプログラムに定義します。

Mapping

DataLayer_RealtimeとUser programの変数間のMappingも忘れずに。

HMI

次はWeb Visualizatinを作成します。

Add Visualization Manager

Applicationを右クリック>Add Object>Visualization Managerします。

AddでVisualization Mangerを追加します。

Visuilation

Applicationを選択し>右クリック>Add Object>Visualizationします。

Visualizationの名前を入力し>Addします。

Visualization_MC_JOG

Schneider ATV320のJog動作の画面になります。

Visualization_MC_POWER

Schneider ATV320の電源操作の画面になります。

Visualization_MC_RESET

Schneider ATV320のリセット画面になります。

Visualization_MC_Status

Schneider ATV320の状態一覧画面になります。

Visualization_MC_STOP

Schneider ATV320の停止一覧画面になります。

Visualization_MC_VEL

Schneider ATV320の定速運転画面になります。

Visualization_System

Schneider TM221 CPU状態の表示画面になります。

Visualization

最後に、先程作成したすべての画面を1つのTab Elementsとしてまとめます。

Add WebVisu

Visualization Manager>Add Object>WebVisuでWeb表示を追加します。

WebVisu名を入力します。

Done!

WebVisuのTabから…ボタンで起動画面を設定します。

画面を選び>Okします。

Access

こちらのLinkからWeb表示画面にアクセスできます。

http://localhost:8080/webvisu.htm

Result

Source Project

こちらのLinkからCtlx ProjectとSchneider ProjectをDownloadしてください。

https://github.com/soup01Threes/Schneider/blob/main/State3_Control%20by%20Modbus%20TCP%203%20party.7z

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

シェアする

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

フォローする