Siemens S7
S7comm で Siemens S7 の PLC につなぎます。ラックとスロット、メモリー領域、型付きのバイトとビットのアドレス指定、そして S7 固有のデータ型。
Siemens S7 のドライバーは、ISO-on-TCP に載る古くからの Step 7 のプロトコル、S7comm で Siemens S7 の PLC と話します。メモリー領域、データブロックの番号、バイト、ビットという絶対アドレスを使うので、エンジニアリングのプロジェクトからシンボルを書き出さなくても動きます。Connector の Siemens S7 のドライバーの下に機器を追加し、下の項目を埋めてください。パネルは、このプロトコルが使う項目だけを見せます。
接続
| 項目 | 意味 | 既定 |
|---|---|---|
| ホスト | CPU(またはその前に立つ CP モジュール)の IP アドレスかホスト名。 | 空 |
| ラック / スロット | Siemens のハードウェア構成で設定した、CPU のラック番号とスロット番号です。1 行に数値の入力欄が 2 つ並び、先がラック、後がスロットです。 | 0 / 0 |
| 読み出し周期(ms) | 上書きしないタグに対する、機器全体の読み取りの周期。 | 1,000 |
TCP のポートは 102(ISO-on-TCP)に固定なので、ポートの項目はありません。機器の見出しは、組み立てられた接続先を見せます。たとえば s7://192.168.0.2:0:1(ホスト、ラック、スロット)です。
ラックとスロットはハードウェアと合っている必要があります。S7-1200 と S7-1500 の CPU はラック 0、スロット 0 か 1 で答えます。よくある S7-300 の CPU はラック 0、スロット 2 にいます。S7-400 のラックは構成によって変わります。スロットが違うと、間違ったデータを読むのではなく、接続が失敗します。
各タグは自分の読み出し周期(ms)を持てます。タグの値が 0 のときは、機器の周期に戻ります。
アドレス指定
S7 のタグは、自由記述の文字列ではなく型付きの項目でアドレスを取ります。パネルは、タグの「取得元」のカードにそれらを見せます。
| 項目 | 意味 | 受け付ける値 | 既定 |
|---|---|---|---|
| エリア | 読むメモリー領域。 | DataBlock、Merker、ProcessInput、ProcessOutput、Timer、Counter |
DataBlock |
| DB 番号 | どのデータブロックか。エリアが DataBlock のときだけ出ます。 |
0 以上 | 1 |
| 開始バイト | その領域の中で値が始まるバイトの位置。Timer と Counter の領域では、この入力欄はタイマー番号またはカウンター番号という名前になり、タイマーやカウンターの番号を尋ねます。 |
0 以上 | 0 |
| ビット(0~7) | 開始バイトの中でのビットの位置。ブール値のタグにだけ出ます。 | 0~7 | 0 |
| 最大長(空欄なら 254) | S7 の STRING の宣言された最大長。Timer と Counter の領域以外の、文字列のタグにだけ出ます。 |
1 以上、または空欄 | 空欄 |
領域は、Siemens のふつうの書き方に対応します。Merker はフラグのメモリー(M)、ProcessInput はプロセスイメージの入力(I/E)、ProcessOutput はプロセスイメージの出力(Q/A)、Timer と Counter は S7 のタイマーとカウンターの領域です。タイマーとカウンターは、バイトではなく番号でアドレスを取ります。Timer で番号 5 なら T5 を、Counter で番号 3 なら C3 を読みます。古くからの絶対アドレスを読み替えると次のようになります。
| 従来のアドレス | データ型 | 入力する項目 |
|---|---|---|
REAL を持つ DB5.DBD12 |
Float | エリア DataBlock、DB 番号 5、開始バイト 12 |
DB1.DBX3.4 |
Boolean | エリア DataBlock、DB 番号 1、開始バイト 3、ビット 4 |
INT を持つ DB2.DBW20 |
Int16 | エリア DataBlock、DB 番号 2、開始バイト 20 |
MW10 |
Int16 | エリア Merker、開始バイト 10 |
M10.3 |
Boolean | エリア Merker、開始バイト 10、ビット 3 |
IB2 |
Byte | エリア ProcessInput、開始バイト 2 |
Q4.1 |
Boolean | エリア ProcessOutput、開始バイト 4、ビット 1 |
T5 |
Int16 | エリア Timer、タイマー番号 5 |
C3 |
Int16 | エリア Counter、カウンター番号 3 |
ブール値のタグは、バス上でちょうど 1 ビットを読み書きします。まわりのバイトを書き直すことは決してありません。ほかのすべての型は、開始バイトから、そのデータ型のちょうどの幅でバイト単位のアドレスを取ります。「取得元」のカードの読み取り専用の取得元のアドレス(バス上)の行が、編集しているそばから組み立てられたアドレスを見せます。
データ型
タグのデータ型が、バス上での S7 固有の型を決めます。S7 固有の 13 の幅がすべて使えます。
| データ型 | S7 の型 | バス上の大きさ |
|---|---|---|
| Boolean | BOOL | 1 ビット |
| SByte | SINT | 1 バイト |
| Byte | USINT | 1 バイト |
| Int16 | INT | 2 バイト |
| UInt16 | UINT | 2 バイト |
| Int32 | DINT | 4 バイト |
| UInt32 | UDINT | 4 バイト |
| Int64 | LINT | 8 バイト |
| UInt64 | ULINT | 8 バイト |
| Float | REAL | 4 バイト |
| Double | LREAL | 8 バイト |
| String | STRING | 最大長 + 2 バイト |
| DateTime | DTL | 12 バイト |
複数バイトの値は、S7 固有のビッグエンディアンのバイト順を自動で使います。バイト順の選択肢がないのは、必要がないからです。
文字列のタグは、標準の S7 STRING の並びを読みます。宣言された最大長が 1 バイト、現在の長さが 1 バイト、そのあとに ASCII の文字が続きます。最大長は、ブロックの中の STRING の宣言と一致している必要があります(空欄は S7 の最大値である 254 の意味です)。ドライバーは、1 回の読み取りで最大長 + 2 バイトを運びます。日時のタグは、S7-1200/1500 の系列の DTL 構造体(年からナノ秒まで)に対応します。古い 8 バイトの DATE_AND_TIME は出ません。
書き込み
アクセスが読み書きか書き込みのみのタグは書き込めます。書き込みは、読み取りと同じ領域、バイト、ビットを対象にします。ブール値の書き込みはその 1 ビットを立て、ほかはすべてその型のちょうどのバイトを書きます。新しいタグは読み取りのみから始まります。
機器検出
S7comm には同報による機器検出がないので、Connector はこのドライバーに機器検出のボタンを出しません。機器とそのタグは手で追加してください。
知っておくとよいこと
- S7-1200/1500 の CPU では、S7comm の絶対アドレス指定に Siemens のプロジェクト側の設定が 2 つ必要です。CPU の PUT/GET 通信によるアクセスを許可と、アドレスを取るすべてのデータブロックでの最適化されたブロックアクセスを切ることです。最適化された DB には、アドレスを取るためのバイトの位置がありません。
- タイマーとカウンターの領域は、バイトの位置ではなく番号でアドレスを取ります。入力欄はタイマーやカウンターそのもの(T0、T1、T2 と C0、C1、C2)を尋ねます。どちらの値も 16 ビットのワード 1 つなので、Int16 と組み合わせてください。それより広い型や狭い型は、タグの名前を診断ログに残して拒否され、その機器のほかのタグは読み取りを続けます。
- 届かない PLC があっても起動時の損はありません。機器は背後で再試行を続け、接続がつながるまでそのタグは品質が悪いものとして読まれます。
- 機器がオンラインになったあとでケーブルが抜かれた場合は、次の読み取りで気付きます。機器はオフラインになり、そのタグは品質が悪くなり、ネットワークが戻れば自分で再接続します。CPU が拒否するアドレスはそうはならないので、書き間違えたタグ 1 つが機器の残りを道連れにすることは決してありません。