今回はS7-300でSFC59を使って安全出力モジュールの診断情報を取得します。
まずSFC59はどんなBlockなのか見てみます。
- Input
- REQ:BOOL
- 1=SFC59を実行する
- IOID:BYTE
- 診断情報を取りたいモジュールのアドレスエリアID
- LADDR:WORD
- 診断情報を取りたいモジュールのアドレス
- RECNUM:BYTE
- Data Recordの番号(各Manualを参照ください。)
- REQ:BOOL
- Output
- RET_VAL:INT
- Functionが実行エラーになるとエラーコードが戻ります。
- BUSY:BOOL
- 1=Data Recordを読込中
- RECORD:ANY
- モジュールからのData Record情報の格納先です。Byteしか入りません。パラメータの入り方はP#DB13.DBX0.0 Byte 100…みたいに。
- RET_VAL:INT
プログラム
IOIDはB#16#54なのは、もしInput系ならB#16#54、Output系ならB#16#55。安全出力モジュールはInput・Output両方もあり、しかもINとOUTもアドレス同じなので16#54になります。
今回診断したいモジュールの先頭アドレスは145なので、16進数に変換したらW#16#91になります。
Data Recordは1になるのはET 200S Distributed I/O System Installation and Operating Manualの中に0なら4Byteの診断データもらえ、1ならそれぞれのモジュールのチャンネルの診断情報までいただけます。
各モジュールがもらえるData RecordのByte数:
今回いただきたいのは4F-DOなので、24Byte数のデータがもらえます。
P#DB1002.DBX0.0 Byte 24も、Byte数に合わせて入れます。
DB1002の中身は:
最後、F-DOのモジュールの診断情報をのせます:
参考:
ET 200S Distributed I/O System Installation and Operating Manual
System Software for S7-300/400 System and Standard Functions Volume 1 and Volume 2
PROFINET IO – Diagnostics Processing in the User Program
parameter LADDR for SFC58 and SFC59
はいーお疲れ様です。