PROFINET - Siemens PLC でのレコードの使用

Read Record と Write Record コマンド

PROFINET は、In-Sight ビジョンシステムと通信する 2 番目の方法として、Read Record および Write Record コマンドを使用した通信もサポートしています。これらのコマンドは、In-Sight ビジョンシステムのメモリの特定の領域に明示的に書き込みを行います。Read Record および Write Record コマンドは、特定のデバイスに送信され、そのデバイスはそのメッセージに対する応答を常に返します。結果として、Read Record および Write Record コマンドは、あまり頻繁には行われない操作に適しています。

In-Sight ビジョンシステムでは、次の Record コマンドがサポートされています。

インデックス 説明
1 ジョブ名
10 Inspection ID + Inspection Result Code + Inspection Result バイト 0 ~ 995
11 Inspection Result バイト 996 ~ 1995
12 Inspection Result バイト 1996 ~ 2995
13 Inspection Result バイト 2996 ~ 3995
14 Inspection Result バイト 3996 ~ 3999
30 User Data バイト 0 ~ 999
31 User Data バイト 1000 ~ 1999
32 User Data バイト 2000 ~ 2999
33 User Data バイト 3000 ~ 3999
:  
  • レコード 10 ~ 13 は読み取り専用レコードです。このデータは、Inspection ID、Inspection Result Code、および Inspection Results データを含む Inspection Results モジュールと同じフォーマットです。これらのレコードに書き込みを試みると、アクセス拒否を示すエラーコード 0xB6 が返されます。
  • レコード 30 ~ 33 は読み取り/書き込みレコードです。「WRREC」(SFB53) を使用して User Data レコードを書き込む場合は、バッファを保持している User Data からスプレッドシートの ReadUserData 関数へのデータの書き込み信号を発信するため、Inspection Control モジュールの Set User Data ビット (ビット 2) も使用する必要があります。最初に User Data レコードを書き込み、次に Set User Data ビットをセットします。

    User Data モジュールを含む周期接続が確立されている場合に PLC がこのレコード範囲に書き込みを試みると、状態の競合が発生したことを示すエラーコード 0xB5 が生成されます。大量のデータを転送する必要があるアプリケーションでは、周期接続の User Data モジュールか、または User Data Write Record コマンドが使用されます。両方を同時に使用することはできません。

  • Siemens CP 343-1 モジュールを PROFINET I/O コントローラとして使用し、FB52 - PNIO READ OR WRITE RECORD を使用してデータのレコードを読み取り/書き込みしている場合、各読み取り/書き込みレコードデータの最初の 480 バイトのみが転送されます。
  • In-Sight ビジョンシステムが PROFINET IO ネットワーク経由で通信するように設定され、レコード 30 ~ 33 へのユーザデータの書き込みが成功した場合、ユーザデータの読み取りを試行すると、レコード 30 ~ 33 が異常な結果を返します。

In-Sight ビジョンシステム上でのジョブの変更

In-Sight ビジョンシステムと Siemens PLC の間で Read Record および Write Record コマンドを使用して行われる最も一般的な操作は、ジョブの変更です。Siemens PLC 内では、これらのコマンドは「WRREC」(SFB 53) および「RDREC」(SFB 52) ブロックを使用して送信されます。

以下の手順では、「WRREC」ブロックを追加することによって、In-Sight ビジョンシステム上の現在のジョブを変更する方法を説明します。

  1. PLC プロジェクトのシンボルテーブルを開きます (Simatic Manager プロジェクトの [S7 Program] ツリーノードにあります)。
  2. 次のシンボルをプロジェクトに追加します。

    シンボル

    アドレス

    データ型

    説明

    LoadJob

    M 124.1

    BOOL

    LoadJob コマンドをトリガします。

    LoadJobBusy

    M 124.2

    BOOL

    LoadJob コマンドの実行中は真。

    LoadJobDone

    M 124.3

    BOOL

    LoadJob コマンドが成功した場合に真。

    LoadJobErr

    M 124.4

    BOOL

    LoadJob コマンドが失敗した場合に真。

  3. OB1 メインプログラムブロックを開き、[View] メニューから [LAD] を選択して、エディタをラダーモードに設定します。
  4. 関数ツリーからブロックをドラッグして、WRREC コールをラダーネットワークに追加します。このブロックは、[Libraries] → [Standard Library] → [System Function Blocks] → [DP] ノードにあります。
  5. 下の図のようにラダーロジックを追加して、ラングを完成します。

  6. 関数ブロック内の ID パラメータは、コマンドの送信先である In-Sight モジュールの診断アドレスに相当する 16 進値に設定する必要があります。これは、HW Config ツールのモジュールリストにあります。この例では、診断アドレスは 2044 (16 進値では 7FC) です。
  7. プロジェクトを PLC にダウンロードして、PLC を Run モードにします。
  8. PLC プロジェクトの変数テーブルを開きます。次のエントリを変数テーブルに追加します。

    アドレス

    シンボル

    データ型

    M 124.1

    LoadJob

    BOOL

    M 124.2

    LoadJobBusy

    BOOL

    M 124.3

    LoadJobDone

    BOOL

    M 124.4

    LoadJobErr

    BOOL

    MD 128

    CHARACTER

    MD 132

    CHARACTER

    MD 136

    CHARACTER

    MD 140

    CHARACTER

    MD 144

    CHARACTER

  9. [Variable] メニューから [Monitor] を選択して、モニタリングを有効にします。
  10. In-Sight Explorer を使用して、ビジョンシステムをオフラインにします。
  11. 変数テーブルの MD 128 ~ MD 147 エントリに、ロードするジョブの名前を入力します。ジョブ名の最後の文字の後にヌル文字 ($0) を入力する必要があります。

  12. ジョブ名を入力した後、[Modify value] 列の「LoadJob」行に「true」と入力します。
  13. 次に、[Valuable] メニューから [Activate Modify Values] を選択して、値を PLC のメモリにコミットします。
  14. 指定したジョブがロードされて、In-Sight Explorer に表示され、LoadJobDone 変数に「true」と表示されます。

DWord の STATUS 出力で Write/Read Record メッセージから返されるエラー情報 (ERROR ビットが 1 にセット)

STATUS 出力パラメータには、有用なエラー診断情報が含まれます。

以下の表に、STATUS パラメータで返される値の説明を示します。これらの値は、バイト配列 [1...4] として解釈されます。

エラー情報の構造は、次のとおりです。

フィールド要素:

名前:

説明

STATUS[1]

Function_Num

  • エラーがなかった場合、B#16#00。
  • DPV1-PDU の関数 ID。エラーの場合、B#16#80 は OR 結合されます。DPV1 プロトコル要素が使用されなかった場合は、B#16#C0。

STATUS[2]

Error_Decode

エラー ID の場所。

STATUS[3]

Error_Code_1

エラー ID

STATUS[4]

Error_Code_2

製造元固有のエラー ID 拡張。

STATUS[2] の値は、次のとおりです。

Error_Decode

(B#16#...)

ソース

説明

00 ~ 7F

CPU

エラーも警告もありません。

80

DPV1

IEC 61158-6 によるエラー。

81 ~ 8F

CPU

B#16#8x は、SFB の n 番目のコールパラメータのエラーを示します。

FE、FF

DP プロファイル

プロファイル固有のエラー。

STATUS[3] の値は、次のとおりです。

Error_Decode

(B#16#...)

Error_Code_1

(B#16#...)

DVP1 による説明

説明

00

00

 

エラーも警告もありません。

70

00

予約済み、拒否

初期コール。アクティブなデータレコード転送はありません。

 

01

予約済み、拒否

初期コール。データレコード転送が開始されました。

 

02

予約済み、拒否

中間コール。データレコード転送は既にアクティブです。

80

90

予約済み、成功

無効な論理開始アドレス。

 

92

予約済み、成功

ANY ポインタに対して違法な型。

 

93

予約済み、成功

ID または F_ID によってアドレス指定された DP コンポーネントは設定されていません。

 

95

 

追加の割り込み情報をフェッチするときの H システムのエラー (外部 DP インタフェースを介してローカルまたは分散 I/O 層で追加割り込み情報をフェッチするときには、このエラーは「グループエラー」として出力されます)。

:  接続中または更新中は、追加割り込み情報が一時的に使用できなくなることがあります。

 

96

 

H システムでマスタとリザーブのスイッチオーバが発生し、前のマスタ CPU が STOP モードになりました。その時点で、OB の処理中でした。SFB 54 は、OB 開始情報、管理情報、ヘッダ情報、または追加割り込み情報を提供できません。SFC 6「RD_SINFO」は、OB 開始情報を読み出します。SFC 13「DPNRM_DG」は、OB 4x、55、56、57、82、および 83 について、影響を受けた DP スレーブの現在の診断フレームを同期して読み取ります (OB 開始情報からのアドレス情報)。

 

A0

読み取りエラー

モジュールの読み取り時に否定的確認応答。

 

A1

書き込みエラー

モジュールの書き込み時に否定的確認応答。

 

A2

モジュール失敗

層 2 の DP プロトコルエラー。

 

A3

予約済み、成功

 

A4

予約済み、成功

バス通信が中断されました。

 

A5

予約済み、成功

 

A7

予約済み、成功

DP スレーブまたはモジュールが占有されています (一時的エラー)。

 

A8

バージョン不一致

DP スレーブまたはモジュールが互換性のないバージョンを報告しています。

 

A9

サポートされない機能

機能が DP スレーブまたはモジュールによってサポートされていません。

 

AA ~ AF

ユーザ固有

DP スレーブまたはモジュールは、アプリケーションの製造元固有のエラーを報告しています。DP スレーブまたはモジュールの製造元のマニュアルを参照してください。

 

B0

無効なインデックス

モジュール内に未知のデータレコード。違法なデータレコード番号 3256。

 

B1

書き込み長エラー

RECORD パラメータで指定された長さが正しくありません。SFB54 では、AINFO に長さエラー。

 

B2

無効なスロット

構成されたスロットは空です。

 

B3

タイプの不一致

実際のモジュールタイプが、指定されたモジュールタイプに一致しません。

 

B4

無効な領域

DP スレーブまたはモジュールは、無効な領域へのアクセスを報告しています。

 

B5

ステータスの不一致

DP スレーブまたはモジュールの準備ができていません。

 

B6

アクセス拒否

DP スレーブまたはモジュールがアクセスを拒否しています。

 

B7

無効な範囲

DP スレーブまたはモジュールは、パラメータまたは値の範囲が無効であることを報告しています。

 

B8

無効なパラメータ

DP スレーブまたはモジュールは、無効なパラメータを報告しています。

 

B9

無効なタイプ

DP スレーブまたはモジュールは、無効なタイプを報告しています。

 

BA ~ BF

ユーザ固有

DP スレーブまたはモジュールは、アクセス時に製造元固有のエラーを報告しています。DP スレーブまたはモジュールの製造元のマニュアルを参照してください。

 

C0

読み取り制約の不一致

モジュールにはデータレコードがありますが、読み取りデータはまだありません。

 

C1

書き込み制約の不一致

モジュールの同じデータレコードに対する前の書き込み要求が、モジュールによってまだ処理されていません。

 

C2

リソースビジー

モジュールは、CPU の最大ジョブ数を処理中です。

 

C3

リソース使用不能

必要な操作リソースが現在、占有されています。

 

C4

 

内部一時エラー。ジョブを実行できませんでした。ジョブを繰り返してください。このエラーが頻繁に発生する場合は、工場の電気干渉の原因を調べてください。

 

C5

 

DP スレーブまたはモジュールを使用できません。

 

C6

 

優先度クラスのキャンセルのため、データレコード転送はキャンセルされました。

 

C7

 

DP マスタがウォームまたはコールドリスタートされたため、ジョブはキャンセルされました。

 

C8 ~ CF

 

DP スレーブまたはモジュールは、製造元固有のリソースエラーを報告しています。DP スレーブまたはモジュールの製造元のマニュアルを参照してください。

 

Dx

ユーザ固有

DP スレーブ固有。DP スレーブの説明を参照してください。

81

00 ~ FF

 

初期コールパラメータのエラー (SFB54 では MODE)。

 

00

 

違法な操作モード。

82

00 ~ FF

 

2 番目のコールパラメータのエラー。

:

:

 

:

88

00 ~ FF

 

8 番目のコールパラメータのエラー (SFB54 では TINFO)。

 

01

 

正しくない ID シンタックス。

 

23

 

数量フレームを超えているか、ターゲット領域が小さすぎます。

 

24

 

正しくない ID 範囲。

 

32

 

DB/DI 番号がユーザ範囲外です。

 

3A

 

DB/DI 番号が、ID 領域 DB/DI について NULL であるか、指定された DB/DI が存在しません。

89

00 ~ FF

 

9 番目のコールパラメータのエラー (SFB54 では AINFO)。

 

01

 

正しくない ID シンタックス。

 

23

 

数量フレームを超えているか、ターゲット領域が小さすぎます。

 

24

 

正しくない ID 範囲。

 

32

 

DB/DI 番号がユーザ範囲外です。

 

3A

 

DB/DI 番号が、ID 領域 DB/DI について NULL であるか、指定された DB/DI が存在しません。

8A

00 ~ FF

 

10 番目のコールパラメータのエラー。

:

:

 

:

8F

00 ~ FF

 

15 番目のコールパラメータのエラー。

FE、FF

00 ~ FF

 

プロファイル固有のエラー。

DPV1 エラーでは、DP マスタは STATUS[4] データを CPU と SFB の両方にわたします。DPV1 エラーがなかった場合、この値は 0 に設定されますが、SFB52 (読み取りレコード) では、以下の例外があります。

  • MLEN が RECORD のターゲット領域の長さより大きかった場合、STATUS[4] は RECORD のターゲット領域の長さを含みます。
  • 実際のデータレコード長が MLEN より小さく、MLEN が RECORD のターゲット領域の長さより小さかった場合、STATUS[4] は MLEN に等しくなります。
  • STATUS[4] が 255 より大きく、255 に設定しなければならなかった場合、STATUS[4] は 0 になります。