今回の記事ではBeckhoffのEL6751を使用しCANOPEN Masterを立ち上げ、Schneider社のATV320とCAN通信します。よろしくおねがいします。
EL6751?
EL6751はCANOPENのMasterもしくはSlave機能を揃えるTerminalで、EtherCATのネットワーク内にCANOPENデバイスと通信できます。 さらに、一般的なCANメッセージの送信・受信もアプリケーションプログラム上でしなくても済みます。
その便利なEL6751は以下の基本機能が揃えています:
- すべてのCANopen PDO通信タイプに対応
- event-controlled
- time-controlled (event timer),
- synchronous.
- PCコントローラーのタスクサイクルと同期
- 起動時、実行時のパラメータ通信(SDO)対応
- Emergency message handling・guarding ・heartbeat対応
- パラメーターと診断のインターフェースあり
- オンラインバスの負荷表示
Layout
こちらはEL6751のLayoutやLEDの意味を説明します。
Wiring
こちらは配線です。Pin2はCAN-、Pin7はCAN+で、Pin3とPin6は内部でつながってるCAN Groundです。
CAN OPEN
CANopenは、ネットワークデバイス間の通信をobject dictionaries とobjectsで管理します。ネットワークデバイスは、process data objects(PDO)やservice data objects (SDO)を使って、他のデバイスのobject dictionaryからオブジェクトデータを要求したり、変更した値を書き戻すことができます。
PDOs (process data objects)
プロセスデータをリアルタイムに伝送します。
SDOs (service data object)
object dictionaryの読み書きができます。
SYNC object (synchronization object)
ネットワーク機器の同期をとります。
EMCY object (emergency object),
デバイスやその周辺機器の信号エラーです。
NMT services
ネットワーク制御する
NMT node guarding
ネットワークデバイスを監視します。
NMT heartbeat
ネットワークデバイスを監視します。
Reference Link
CIA402
CIA402は、CANopenネットワーク上で動作するドライブ制御機能のプロファイルであり、Electrically Driven Machinery、EDMの制御を行うための標準規格です。このプロファイルは、CANopenオブジェクト辞書を定義し、制御命令やフィードバック情報の交換に必要なCANメッセージを規定しています。CIA402は、モーションコントロール用途に特化しており、モータの位置、速度、加速度、トルク制御などが可能です。
CIA402に準拠した制御機器は、同一のプロトコルであるCANopenを介して相互に通信できるため、異なるメーカーの制御機器を組み合わせても問題なく動作するという利点があります。また、規格に基づく設計により、制御機器の互換性が確保されるため、より柔軟な設計やシステムの拡張性が実現できます。
ATV320 Indexの主なパラメータは以下になります。()は該当するCANOPENアドレスで、例えばControlwordは6040、StatusWordは6041です。下図は、ドライブ操作のための制御図です:
以下速度制御モードでの簡略図です。
Index 6041 Statusword
- Bit 0 : Ready to switch on、1=電源供待ち
- Bit 1 : Switched on、1=Ready
- Bit 2 : Operation enabled、1=Running
- Bit 3 : Fault、1=エラー検知された
- Bit 4 : Voltage enabled、1=電源供給中
- Bit 5 : Quick Stop、0=Quick Stopが有効中
- Bit 6 : Switch on disabled、1=電源供給してない
- Bit 7 : Warning、1=Warningあり
- Bit 8 : reserved
- Bit 9 : Remote、デバイスがFieldbusから制御してるか
- Bit 10:Target Reached、1=速度指令値に到達した
- Bit 11 : Internal limit active
- Bit 12-13 : reserved
- Bit 14 : メーカー指定STOP Flag
- Bit 15 : メーカー指定Direction Flag
Operation State
ドライブの動作状態は、Control Wordが送信されるか、エラー発生などイベントが発生するかにより変化します。現在ドライブの状態は、Status Wordの値で特定することができます。
1 – Not ready to switch on
初期化が開始されます。通信ネットワークからに隠されてる過渡的な状態です。
2 – Switch on disabled
パワーステージがスイッチオンできない状態です。そのときはドライブがロックされ、モーターに電源が供給されいません。もし独立した制御ステージの場合、電源を供給する必要はありませんが、主電源コンタクター付きの独立した制御ステージの場合、そのコンセントは閉じていません。調整や設定のパラメータの変更が可能です。
3 – Ready to switch on
ワーステージはスイッチオンの準備ができており、パワーステージの主電源を待っている状態です。独立した制御ステージの場合、電源ステージを供給する必要はありませんが、そのあとにあるシステムは状態 4 – Switched onに移行するために電源ステージを供給することをまっています。
主電源コンタクタ付きの独立した制御ステージの場合、コンタクタは閉じていません。ドライブはロックされ、モーターに電力は供給されません。調整や設定のパラメータの変更が可能です。
4 – Switched on
パワーステージはスイッチオンになり、独立した制御ステージの場合、パワーステージに電源が供給されている必要があります。主電源コンタクター付きの独立した制御ステージの場合、コンタクターは閉じられます。そのときはドライブがロックされ、モーターに電源が供給されない。ドライブのパワーステージは動作可能な状態ですが、出力に電圧はまだ出力されていません。
調整や設定のパラメータの変更が可能で、変更された場合はState 2 – Switch on disabledに戻ります。
.
5 – Operation enabled
パワーステージが有効になっていて、ドライブはランニング状態になります。もし独立した制御ステージの場合は、電源ステージを供給する必要があります。主電源コンタクター付きの独立した制御ステージの場合、コンタクターは閉じられます。
そのときドライブのロックが解除され、モーターに電源が供給されます。
ドライブ機能が起動し、モーター端子に電圧が供給されます。
reference valueがゼロ、または停止コマンドの場合は、モータに電力が供給されず、トルクが発生しません。 [Auto tuning] を実行するには、ドライブが状態5 – 動作可能になっている必要があります。
調整パラメータの変更は可能ですが、設定パラメータの変更ができません。
6 – Quick stop active
ドライブは急速停止を行い、動作状態を6-Quick stop activeにロックされたままです。モーターを再起動する前に、動作状態2-switch on disabledに移行する必要があります。
ドライブが急速停止中、ドライブはロック解除されますが、モーターに電源が供給されます。設定パラメータを変更することはできません。
7 – Fault reaction
エラーが検知されてから8-Faultに移行するときになります。
8 – Fault
パワーステージが無効になって、ドライブがロックされ、モーターに電源が供給されない状態になります。
Index 6040 Controlword
- Bit 0 : Switch on、Main Contactor制御する
- Bit 1 : Enable voltage、AC 電源供給を承認する
- Bit 2 : Quick Stop active、0=Quick Stop 使用中
- Bit 3 : Enable operation、1=Runコマンド
- Bit 4 – 6 : 予備
- Bit 7 : Fault reset、立ち上げでFaultをリセット
- Bit 8:Halt
- Bit 9-10 : 予備
- Bit11-15:メーカー指定
Command Example
- ShutDown
- 3-Ready to Switch Onに移行する
- コマンド例:0006HEX
- SwitchOn
- 4-Switched Onに移行する
- コマンド例:0007HEX
- Enable Operation
- 5-Operation enabledに移行する
- コマンド例:000FHEX
- Disable Operation
- 4-Switched on に移行する
- コマンド例:0007HEX
- Disable voltage
- 2-Switch on disabledに移行する
- コマンド例:0000HEX
- Quick Stop
- 6-Quick Stop Activeや2-Switch on disabledに移行する
- コマンド例:0002HEX
- Fault Reset
- 2-Switch on disabledに移行する
- コマンド例:0080HEX
State Digarm
CIA402のState Digarmです。
How to read it?
Implementation
Download EDS File
下記のLinkからATV320のEDS FileをDownloadしてください。
https://www.se.com/in/en/download/document/ATV320_CANopen_EDS_V2.9/
Configuration
Wiring
こちらはEL6751とATV320の配線です。
ATV320 Side
Process Data
最初のPDOは、デフォルトでCiA402のVelocity mode のPDO1になります。これは非同期で、2つのデータを含みます:出力のControl Word(6040 hex, CMD)と目標速度(6042 hex, LFRD)、入力のStatus Word(6041 hex, ETA)と現在速度値(6044 hex, RFRD)になります。
2番目のPDOセット(PDO2)はデフォルトで無効化されており、なおかつ設定可能です(1から4までのWord)。これは、調整用および追加の制御・監視機能用に使用いただけます。
第3PDOセット(PDO3)はデフォルトで非アクティブ化されており、設定や構成はできません:RPDO3(受信)、通信スキャナーの4つの出力ワードを含む(NC1〜NC4)、
TPDO3(送信)、通信スキャナーの4つの入力ワードを含む(NM1〜NM4)になります。
Parameters
Communicaions
まずはCan Openの通信設定を行います。下図のようにNST>ConF>FULL>CON>Cn0 のMenuに移動しましょう。
Address
ATV320のCANOPEN Slave アドレスを設定します。Adc0を開き>今回は2にします。つまりこのATV320のCAN OPEN Slaveアドレスは2です。
こちらAdのc0パラメータはModbusアドレス6051に該当します。
Baudrate
次はATV320のCAN OPEN通信速度を設定します。bdc0 Menuを開きます。今回は125に設定する。つまり通信速度は125kです。
こちらのbdc0パラメータはModbusアドレス6053に該当します。
Error Code
こちらのMenuは読み専用ですが、ErC0 Menuを開くと現在ATV320のエラーコードを確認できます。いまは0で、つまりエラーなしです。
こちらのErC0パラメータはModbusアドレス6056に該当します。
こちらはエラーCodeの一覧です。そしてCAN通信エラーが発生した場合、CoFは表示されます。
Code | Description |
0 | CANOPEN通信にエラーなし |
1 | CAN Overun/Bus OFF |
2 | Node Guarding error |
3 | CAN Overrun |
4 | Heartbeat エラー |
5 | NMT states Chart error |
Setpoint Reference
次はATV320のSetpoin参照値をCANOPENネットワークから参照するように変更します。下図のようにNST>ConF>FULL>CTL>Fr1 のMenuに移動し、Fr1の値をCAnに変更しましょう。
Scanner Inputs
8 BytesのCAN 入力データのMappingを確認や変更します。下図のようにNST>ConF>ICS-に移動しましょう。
rNA1
rNA1Menuを開き、現在値はETAです。ETAはCIA402 のState Registerに該当します。
rNA2
rNA2Menuを開き、現在値はrFrdです。ETAはCIA402 のState Registerに該当します。
rFrdはINT (Signed16)、現在のATV320の速度出力値になります。(-32767 rpm … 32767 rpm)
Scanner Outputs
8 BytesのCAN 出力データのMappingを確認や変更します。下図のようにNST>ConF>OCS-に移動しましょう。
nCA1
nCA1Menuを開き、現在値はCMDです。ETAはCIA402 のコマンドレジスタに該当します。
nCA2
nCA2Menuを開き、現在値LFrDは速度セットポイントです。LFrDはINT (Signed16)、ATV320の速度指定値になります。(-32767 rpm … 32767 rpm)
TwinCAT Side
Install the EDS File
先程のEDS Fileを以下のPathに移動します。
C:\TwinCAT\3.1\Config\Io\CANopen
Add EtherCAT Master
I/O>Devices>Add New Itemで新しいデバイスを追加します。
EtherCAT>EtherCAT Masterを選び>Okします。
いま接続してるEtherCAT NetworkのLAN CARDを選び>Okします。
Add EK1101
次はEK1101を追加します。Device1>右クリック>Add New Itemします。
EK1101を選び>Okします。
よし、EK1101が追加されました。
Add EL6751
EL6751 CAN Master Terminalを追加します。Term1(EK1101)を右クリック>Add New Itemします。
EK6751を選び>OKで進みます。
Done!
Add CanOpen Master
DeviceからCanopen Masterを追加します。Devices>右クリック>Add New Itemします。
CANopen Master EL6751,EtherCATを選び>Okで進みます。
EL6751が追加され、EtherCATのFieldが自動的にTerm 2(EL6751)になります。
もし複数のEL6751 Terminalがある場合、SearchボタンでリングさせたいTerminalを選択できます。
Baudrate
Baudrateを実際のCAN Networkに合わせて設定してください。
Add ATV320
次はSchneider社のATV320を追加します。
Schneider Electric>ATV320_V3.5..を選び>Okで進みます。
ATV320のCAN Slaveが追加されました。
Configuration
ATV320が追加されたら自動的にCAN Node設定画面が表示されます。
Address
CAN NodeのIDをATV320の設定に合わせましょう。
Add PLC
PLC>右クリック>Add New Itemします。
Standard PLC Project>Addで新しいPLCプロジェクトを追加します。
Program
次はプログラムを作成します。
Interfaces
ITF_ATV320_Basic
こちらはATV320を制御するFunction BlockのInterfaceです。
DUT
次は構造体を定義します。
DUT_ATV320_NC1_CMD
ATV320 Control wordの構造体になります。
TYPE DUT_ATV320_NC1_CMD : STRUCT b00SwitchON :BIT; b01EnableVoltage :BIT; b02QuickStop :BIT; b03EnableOperation :BIT; b04,b05,b06 :BIT; //Reserved b07FaultReset :BIT; b08Halt :BIT; b09,b10 :BIT; //Reserved b11,b12,b13,b14,b15 :BIT; //Manufacturer specific assignable END_STRUCT END_TYPE |
DUT_ATV320_NW1_ETA
ATV320 Status wordの構造体になります。
TYPE DUT_ATV320_NW1_ETA : STRUCT b00Ready2SwitchON :BIT; b01SwitchON :BIT; b02OperationEnabled :BIT; b03Fault :BIT; b04VoltageEnabled :BIT; b05QuickStopped :BIT; b06SwitchONDisabled :BIT; b07Warning :BIT; b08 :BIT; b09Remote :BIT; b10TargetReached :BIT; b11InternalLimitActive :BIT; b12,b13 :BIT; b14StopKeyFromManufacturer :BIT; b15DriectionFromManufacturer :BIT; END_STRUCT END_TYPE |
e_ATV320_OperationState
ATV320の状態を表す構造体です。
{attribute ‘qualified_only’} {attribute ‘strict’} TYPE e_ATV320_OperationState : ( None :=0 ,NoReady2SwitchOn :=1 ,Switched2Disabled :=2 ,Ready2SwitchOn :=3 ,SwitchedOn :=4 ,OperationEnabled :=5 ,QuickStoppedActivate :=6 ,FauleReactionActivate :=7 ,Fault :=8 ); END_TYPE |
u_ATV320_NC1_CMD
UNIONタイプでControl wordとUINTを同じMemory offsetになるように定義します。
TYPE u_ATV320_NC1_CMD : UNION raw :UINT; CMD :DUT_ATV320_NC1_CMD; END_UNION END_TYPE |
u_ATV320_NW1_ETA
UNIONタイプでStatus wordとUINTを同じMemory offsetになるように定義します。
TYPE u_ATV320_NW1_ETA : UNION raw :UINT; ETA :DUT_ATV320_NW1_ETA; END_UNION END_TYPE |
Function Block
FB_ATV320_Basic
次は基本制御のFunction Blockを作成しましょう。
FUNCTION_BLOCK PUBLIC FB_ATV320_Basic IMPLEMENTS ITF_ATV320_Basic VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR _OperationState :e_ATV320_OperationState; _MaxHz :REAL:=50.0; _MaxRPM :REAL:=1500.0; END_VAR //Process IO VAR //INPUTS NW1 AT%I* :u_ATV320_NW1_ETA; NW2 AT%I* :INT; //OUTPUTs NC1 AT%Q* :u_ATV320_NC1_CMD; NC2 AT%Q* :INT; END_VAR VAR CONSTANT _c_ETAMask :WORD:=16#006F; END_VAR |
METH_CmdDisableOperation
DisableOperationコマンドを発行するためb03EnableOperationをFalseします。
METHOD METH_CmdDisableOperation : BOOL VAR_INPUT iTrigger : BOOL; END_VAR METH_CmdDisableOperation:=FALSE; IF iTrigger THEN NC1.CMD.b03EnableOperation:=FALSE; METH_CmdDisableOperation:= TRUE; NC2:=0; END_IF |
METH_CmdDisableVoltage
DisableVoltageコマンドを発行するためControl wordを0にリセットし、なおかつ速度命令値を0に置き換えます。
METHOD METH_CmdDisableVoltage : BOOL VAR_INPUT iTrigger : BOOL; END_VAR METH_CmdDisableVoltage:=FALSE; IF iTrigger THEN NC1.raw:=16#0; METH_CmdDisableVoltage:=TRUE; NC2:=0; ; END_IF |
METH_CmdEnableOperation
EnableOperationコマンドを発行するためb03EnableOperationをTrueします。
METHOD METH_CmdEnableOperation : BOOL VAR_INPUT iTrigger : BOOL; END_VAR NC1.CMD.b03EnableOperation:=iTrigger AND (Prop_OperationState = e_ATV320_OperationState.SwitchedOn OR Prop_OperationState = e_ATV320_OperationState.OperationEnabled); ; |
METH_CmdFaultReset
FaultResetコマンドを発行するためb07FaultResetをTrueします。
METHOD METH_CmdFaultReset : BOOL VAR_INPUT iTrigger : BOOL; END_VAR METH_CmdFaultReset:=FALSE; NC1.CMD.b07FaultReset:= Prop_OperationState = e_ATV320_OperationState.Fault AND iTrigger; IF NC1.CMD.b07FaultReset THEN METH_CmdFaultReset:=TRUE; NC2:=0; END_IF |
METH_CmdQuickStop
QuickStopコマンドを発行するためControl wordを2にリセットし、なおかつ速度命令値を0に置き換えます。
METHOD METH_CmdQuickStop : BOOL VAR_INPUT iTrigger : BOOL; END_VAR IF iTrigger THEN NC1.raw:=16#02; NC2:=0; ; END_IF METH_CmdDisableVoltage(Prop_OperationState = e_ATV320_OperationState.QuickStoppedActivate); METH_CmdQuickStop:=Prop_OperationState = e_ATV320_OperationState.Switched2Disabled; |
METH_CmdShutDown
ShutDownコマンドを発行するためControl wordを6にリセットし、なおかつ速度命令値を0に置き換えます。
METHOD METH_CmdShutDown : BOOL VAR_INPUT iTrigger : BOOL; END_VAR METH_CmdShutDown:=FALSE; IF iTrigger THEN NC1.raw:=16#06; METH_CmdShutDown:=TRUE; NC2:=0; END_IF |
METH_DriveRun
速度命令値をiSetPointに上書きします。
METHOD METH_DriveRun : BOOL VAR_INPUT iTrigger : BOOL; iSetPoint : INT; END_VAR IF iTrigger AND Prop_OperationState = e_ATV320_OperationState.OperationEnabled THEN NC2:= iSetPoint; END_IF |
METH_Hz2RPM
HZの設定値をRPMに変換します。
METHOD METH_Hz2RPM : INT VAR_INPUT iData : REAL; END_VAR METH_Hz2RPM:= REAL_TO_INT( (iData/_MaxHz)*_MaxRPM); |
METH_RPM2Hz
PRMの現在値をHZに変換します。
METHOD METH_RPM2Hz : REAL VAR_INPUT iData : INT; END_VAR METH_RPM2Hz:= INT_TO_REAL(iData)/_MaxRPM*_MaxHz |
METH_SwitchOn
こちらのMethodはb01EnableVoltage、b02QuickStop、b00SwitchON、b03EnableOperationの順番にTrueします。ATV320状態がReady2SwitchOnからOperationEnabledまでに移行し、Stateの移行には1sのDelayがあります。1s以上経っても状態を移行できなければStep=999になり、b01EnableVoltage、b02QuickStop、b00SwitchON、b03EnableOperationをリセットします。
METHOD METH_SwitchOn : BOOL VAR_INPUT iTrigger : BOOL; END_VAR VAR_INST R_TRIG :R_TRIG; TON :TON; State :e_ATV320_OperationState; Step :INT; END_VAR TON.PT:=T#1S; METH_SwitchOn:=FALSE; R_TRIG(CLK:=iTrigger); IF R_TRIG.Q THEN Step:=5; END_IF CASE Step OF 5: NC1.CMD.b00SwitchON:=FALSE; NC1.CMD.b01EnableVoltage:=FALSE; NC1.CMD.b02QuickStop:=FALSE; TON(IN:=FALSE); Step:=10; 10: NC1.CMD.b01EnableVoltage:=TRUE; NC1.CMD.b02QuickStop:=TRUE; Step:=15; 15: TON( IN:=NOT Prop_OperationState = e_ATV320_OperationState.Ready2SwitchOn ); IF TON.Q THEN Step:=999; END_IF IF Prop_OperationState = e_ATV320_OperationState.Ready2SwitchOn THEN TON(IN:=FALSE); Step:=20; END_IF 20: NC1.CMD.b00SwitchON:=TRUE; Step:=25; 25: NC1.CMD.b00SwitchON:=TRUE; TON( IN:=NOT Prop_OperationState = e_ATV320_OperationState.SwitchedOn ); IF TON.Q THEN Step:=999; END_IF IF Prop_OperationState = e_ATV320_OperationState.SwitchedOn THEN Step:=30; TON(IN:=FALSE); END_IF 30: NC1.CMD.b03EnableOperation:=TRUE; Step:=40; 40: NC1.CMD.b03EnableOperation:=TRUE; TON( IN:=NOT Prop_OperationState = e_ATV320_OperationState.OperationEnabled ); IF TON.Q THEN Step:=999; END_IF IF Prop_OperationState = e_ATV320_OperationState.OperationEnabled THEN Step:=50; TON(IN:=FALSE); END_IF 50: METH_SwitchOn:=TRUE; 999: NC1.CMD.b00SwitchON:=FALSE; NC1.CMD.b01EnableVoltage:=FALSE; NC1.CMD.b02QuickStop:=FALSE; NC1.CMD.b03EnableOperation:=FALSE; Step:=0; END_CASE |
PROPERTY Prop_MaxHz : REAL GET
現在のMaxHz設定を取得します。
Prop_MaxHz:=_MaxHz; |
PROPERTY Prop_MaxHz : REAL SET
現在のMaxHz設定を設定します。
_MaxHz:=Prop_MaxHz; |
PROPERTY Prop_MaxRPM : REAL GET
現在のMaxRPM設定を取得します。
Prop_MaxRPM:=_MaxRPM; |
PROPERTY Prop_MaxRPM : REAL SET
現在のMaxPRM設定を設定します。
_MaxRPM:=Prop_MaxRPM; |
PROPERTY Prop_NW1 : UINT GET
現在の速度(RPM)を取得します。
Prop_NW1:=NW1.raw; |
PROPERTY Prop_OperationState : e_ATV320_OperationState GET
Status wordから現在ATV320の状態をEncodeします。
VAR StateAfterMasked :UINT; END_VAR StateAfterMasked:=Prop_NW1 AND _c_ETAMask; //Init Prop_OperationState:=e_ATV320_OperationState.NoReady2SwitchOn; CASE StateAfterMasked OF 16#0040: Prop_OperationState:=e_ATV320_OperationState.Switched2Disabled; 16#0021: Prop_OperationState:=e_ATV320_OperationState.Ready2SwitchOn; 16#0023: Prop_OperationState:=e_ATV320_OperationState.SwitchedOn; 16#0027: Prop_OperationState:=e_ATV320_OperationState.OperationEnabled; 16#0007: Prop_OperationState:=e_ATV320_OperationState.QuickStoppedActivate; 16#002F: Prop_OperationState:=e_ATV320_OperationState.FauleReactionActivate; 16#0008,16#0028: Prop_OperationState:=e_ATV320_OperationState.Fault; END_CASE |
FB_ATV320_Basic_withHMI
こちらのFunction BlockはFB_ATV320_Basicの拡張になり、HMIの機能が追加されます。
FUNCTION_BLOCK FB_ATV320_Basic_withHMI EXTENDS FB_ATV320_Basic VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR _HMI :DUT_ATV320_Basic_HMI; END_VAR |
METH_HMIUpdate
こちらのMethodはHMIのコマンドから各MethodをTriggerし、ATV320の状態をHMIに表示します。
METHOD PUBLIC METH_HMIUpdate : BOOL METH_CmdFaultReset(iTrigger:=_HMI.PB.bReset); METH_SwitchOn(iTrigger:=_HMI.PB.bSwitchON); METH_DriveRun( iTrigger:=Prop_OperationState = e_ATV320_OperationState.OperationEnabled ,iSetPoint:=_HMI.PB.iSetPoint ); METH_CmdDisableOperation(iTrigger:=_HMI.PB.bDisableOperation); METH_CmdDisableVoltage(iTrigger:=_HMI.PB.bDisableVoltage); METH_CmdQuickStop(iTrigger:=_HMI.PB.bQuickStop); METH_CmdShutDown(iTrigger:=_HMI.PB.bShutdown); _HMI.PL.rCurrentHz:=METH_RPM2Hz(iData:=NW2); _HMI.PL.rCurrentRPM:=NW2; _HMI.PL.State:=Prop_OperationState; |
MAIN
最後はFB_ATV320_Basic_withHMI Function BlockのInstanceを作成、METH_HMIUpdate() Methodを呼び出せばOKです。
PROGRAM MAIN VAR ATV320_1 :FB_ATV320_Basic_withHMI; END_VAR ATV320_1.Prop_MaxHz:=50.0; ATV320_1.Prop_MaxRPM:=1500.0; ATV320_1.METH_HMIUpdate(); |
HMI
次はTF1800を使って簡単なHMIを用意します。
Result
最初はState=Switched2Disabledですね。
Switch ON Buttonをクリックすると、State=OperationEnabledに移行します。
Setpointを変更し速度命令値をATV320に発行しましょう。現在HZ値と現在RPMも表示されます。
最後はDisable VoltageボタンでATV320をSwitched2Disabledに移行しましょう。
Download
Githubから記事のプロジェクトをDownloadしてください。
https://github.com/soup01Threes/TwinCAT3/blob/main/Project_EL6751_ATV320_CANOPEN_Part1.tnzip