SimotionD445とProfinetでつながってるDevicesを無効・有効する関数を紹介します。
デバイスを無効する関数は:_deactivateDpSlave()
デバイスを有効する関数は:_ activateDpSlave()
その2つの関数も一つ大事なパラメータがあります。それはDiagnostics addressです。
TIAではそのAddressを調べるにはDevicesクリック>general>Diagnostics addressで赤枠の数字になります。普段はあまり使わなくて、そういうシステム的な関数を実行するときだけ必要ですね。
_deactivateDpSlave()
最初はデバイスを無効する関数を紹介します。
INPUT
- logicalAddressOfDpStation
- DINT
- DPStation(Profibus)やPNStation(Profinet)の診断アドレスです。
- reqActDeactGetStateMode
- EnumReqActDeactGetStateMode
- REQUEST_TRUE (0)
- 実行する
- REQUEST_FALSE (1)
- Query status with REQUEST_TRUE(?)これはちょっとわかりません。
- REQUEST_ABORT (2) 実行中止する
- REQUEST_TRUE (0)
- EnumReqActDeactGetStateMode
- dpAlarmMode
- EnumDeviceDpAlarmMode
- SET_DP_ALARM (0)
- 無効したらDP Alarmsを生成します。
- DO_NOT_SET_DP_ALARM (1)
- DP Alarmsを生成しません。
- SET_DP_ALARM (0)
- EnumDeviceDpAlarmMode
- nextCommand
- 次のコマンドを実行するの条件設定です。
- EnumNextCommandMode
- IMMEDIATELY (60)
- Asynchronous
- IMMEDIATELYならFunctionがREQUEST_TRUEによって実行されます。そして再実行するには、REQUEST_FALSEが必要になります。そのREQUEST_TRUE>REQUEST_FALSE>REQUEST_TRUEの順番ではないと再起動になりません。
- WHEN_COMMAND_DONE (160)
- Synchronous
- コマンド実行完了したら再実行になります。nous
- ABORT_URRENT_COMMAND (260)
- Abort
- IMMEDIATELY (60)
- EnumNextCommandMode
- 次のコマンドを実行するの条件設定です。
- ioId(optional):EnumIoIdType
- EnumIoIdType
- 該当するPN/DP デバイスがInputデバイスか、Outputデバイスか。あまりきにしなくてもよいです。
- DefaultはINPUTです。逆にINPUTだめならOUTPUTすればよいです。
- INPUT (198) Input address
- OUTPUT (199) Output address
- timeToWaitForStationAlarm (optional)
- UDINT
- 無効するStationからが“無効になりました”の信号くるまでの待ち時間です。この時間過ぎると内部処理が完了だと見されます。
- そして関数がAcivation state状態を判断し、いまのStation状態を返しします。
- 例えば、16#06なら、Stationが無効になりました、のことです。
- 0:DeFaultで待ち時間ありません
- 60(Default):SimotionのバージョンがV4.4以下なら、最大60s待ちます。
- >0:XX秒を待ちます。
- SimotionがバージョンV4.3なら、Defaultの60になります
Return value: DINT
関数の実行Statusが戻ります。
16#00000000 JOBが中止されいます。
16#00000002 PROFIBUS slave/IO device 無効になりました。Job実行成功です。
16#00000006 PROFIBUS slave/IO device 無効になりました。(‘station failure’ alarm待たない)
16#00007000 機能が実行してない。
16#00007001 機能が初期化になりました。(asynchronousのみ)
16#00007002 Functionality 実行(asynchronousのみ)
16#00007003 JobがAcceptedされたが、実行続けなくて中止になった。
16#FFFF8090 Specified logical base address 無効です。
16#FFFF8091 該当する番号のDPStationが見つかりません。
16#FFFF8092 “Activate” or “Deactivate” 実行中に”Deactivate” リクエストされる
16#FFFF8093 有効なDP Stationではありません
16#FFFF8098 関数はTimeoutによって失敗
16#FFFF8099 内部エラー
16#FFFF80C1 “Activate”実行中に”Deactivate” リクエストされる
16#FFFF80C3 Temporary bottleneck: No additional function resource currently available.?
Example
プログラム例は以下になります:
retVal := _deactivateDpSlave(
logicalAddressOfDpStation := 16364,
reqActDeactGetStateMode := REQUEST_TRUE,
dpAlarmMode := DO_NOT_SET_DP_ALARM,
nextCommand := WHEN_COMMAND_DONE,
ioId := INPUT,
timeToWaitForStationAlarm := 0
);
実行になりますと、PN Devicesが無効になり、TIAからみると灰色のICONもついています。
_ activateDpSlave()
DP/PN Stationを有効する関数のパラメータは_deactivateDpSlave()と似ています。
INPUT
- logicalAddressOfDpStation
- DINT
- DPStation(Profibus)やPNStation(Profinet)の診断アドレスです。
- reqActDeactGetStateMode
- EnumReqActDeactGetStateMode
- REQUEST_TRUE (0)
- 実行する
- REQUEST_FALSE (1)
- Query status with REQUEST_TRUE(?)これはちょっとわかりません。
- REQUEST_ABORT (2) 実行中止する
- REQUEST_TRUE (0)
- EnumReqActDeactGetStateMode
- dpAlarmMode
- EnumDeviceDpAlarmMode
- SET_DP_ALARM (0)
- 有効したらDP Recovery Messageを生成します。
- DO_NOT_SET_DP_ALARM (1)
- DP Recovery Messageを生成しません。
- SET_DP_ALARM (0)
- EnumDeviceDpAlarmMode
- nextCommand
- 次のコマンドを実行するの条件設定です。
- EnumNextCommandMode
- IMMEDIATELY (60)
- Asynchronous
- IMMEDIATELYならFunctionがREQUEST_TRUEによって実行されます。そして再実行するには、REQUEST_FALSEが必要になります。そのREQUEST_TRUE>REQUEST_FALSE>REQUEST_TRUEの順番ではないと再起動になりません。
- WHEN_COMMAND_DONE (160)
- Synchronous
- コマンド実行完了したら再実行になります。nous
- ABORT_URRENT_COMMAND (260)
- Abort
- IMMEDIATELY (60)
- EnumNextCommandMode
- 次のコマンドを実行するの条件設定です。
- ioId(optional):EnumIoIdType
- EnumIoIdType
- 該当するPN/DP デバイスがInputデバイスか、Outputデバイスか。あまりきにしなくてもよいです。
- DefaultはINPUTです。逆にINPUTだめならOUTPUTすればよいです。
- INPUT (198) Input address
- OUTPUT (199) Output address
- timeToWaitForStationAlarm (optional)
- UDINT
- 有効するStationからが“有効になりました”の信号くるまでの待ち時間です。この時間過ぎると内部処理が完了だと見されます。
- そして関数がAcivation state状態を判断し、いまのStation状態を返しします。
- 例えば、16#05なら、Stationが有効になりました、のことです。
- 0:DeFaultで待ち時間ありません
- 60(Default):SimotionのバージョンがV4.4以下なら、最大60s待ちます。
- >0:XX秒を待ちます。
- SimotionがバージョンV4.3なら、Defaultの60になります
Return value: DINT
関数の実行Statusが戻ります。
16#00000000 JOBが中止されいます。
16#00000002 PROFIBUS slave/IO device 有効になりました。Job実行成功です。
16#00000005 PROFIBUS slave/IO device 有効になりました。(‘station recovery’ alarm待たない)
16#00007000 機能が実行してない。
16#00007001 機能が初期化になりました。(asynchronousのみ)
16#00007002 Functionality 実行(asynchronousのみ)
16#00007003 JobがAcceptedされたが、実行続けなくて中止になった。
16#FFFF8090 Specified logical base address 無効です。
16#FFFF8091 該当する番号のDPStationが見つかりません。
16#FFFF8092 “Activate” or “Deactivate” 実行中に”Deactivate” リクエストされる
16#FFFF8093 有効なDP Stationではありません
16#FFFF8098 関数はTimeoutによって失敗
16#FFFF8099 内部エラー
16#FFFF80C1 “Activate”実行中に”Deactivate” リクエストされる
16#FFFF80C3 Temporary bottleneck: No additional function resource currently available.?
Example
実行になりますと、PN Devicesが有効になり、TIAからみると緑のICONもついています。