〜 シンプル通信PLC For OMRON Ver 2 のリファレンス 〜

プロパティ
プロパティ名 意味 設定値 説明
Password
(PARAMで表記する場合は、"ライセンスキー")
ライセンスキー ライセンスキー ベクターにて、送金すると、ライセンスキーが得られます。
このプロパティに、そのライセンスキーを設定すると、制限が解除されます。
Port シリアルポートの番号 1,2 その他、Windowsで対応するポートを設定できます。
Bps ボーレート 1200,2400,4800,9600,19200,
38400,57600,115200
シリアルポートのボーレートを設定します。
Bit ビット 7,8 シリアルポートのビットを設定します。
Parity パリティ 0(ノンパリティ)
1(奇数パリティ)
2(偶数パリティ)
シリアルポートのパリティを設定します。
StopBit ストップビット 1(1ビット)
2(2ビット)
シリアルポートのストップビットを設定します。
Ver 1とは、設定値が異なりますので、ご注意ください。
MachineNo 号機No 0〜99 号機Noを設定します。
RR、RDなどのメソッドを使って値を設定したり、取得する場合に、号機Noを指定できます。
Ver バージョン - コントロールのバージョンを取得します。
Ver 2 新プロパティ 主に、FINSコマンド用のプロパティ
Ready 送信可能 設定不可。読取専用。 通信コマンド(Send、Read、Writeなど)を実行できる場合、TRUEを返します。
これは、直前の通信処理が終わっているかを調べるためにも利用できます。
RsWait ウェイト時間 0〜15 FINSのウェイト時間を設定します。
ICF ネットワーク中継 0:直接
1:ネットワーク(非推奨)
FINSのICFを設定します。
ネットワークの設定は、サポート対象外
DNA 相手先ネットワークアドレス 0〜127 FINSのDNSを設定します。
DA1 相手先ノードアドレス 0〜254 FINSのDA1を設定します。
DA2 相手先号機アドレス 0〜255 FINSのDA2を設定します。
TimeOut タイムアウト時間(ミリ秒) コマンドの返信を待つ時間を指定します。この時間を経ても返信が無い場合、エラーになります。


メソッド
メソッド名 意味 引数値 戻り値 説明
Open()
as Boolean

OpenS()
as Boolean
ポートを開く - 正常: True
エラー: False
ポートを開き、通信を開始します。
ポートを開けない場合、falseを返します。
OpenSは、Openの特別なものです。
ライセンスキー(Password)が設定されていない場合、
Openを実行すると、シェアウェアの確認ダイアログが
表示されますが、OpenSでは、この表示はありません。
しかし、ライセンスキーが設定されていない場合、
使用期限が過ぎると使用できなくなるのは共通です。
OpenSは、試用期間中に、ダイアログ表示を行いたくない場合や、ASPでの利用の場合に、使います。
Close ポートを閉じます - - ポートを閉じます
FINSコマンド 主に、FINSコマンドの送信関係
ReadCH(
  area as String,
  ch as Long,
  num as Long)
as Long
チャネルデータ取得
(非同期)
area:エリア種別
ch:アドレス
num:データ数
正常:0
エラー:詳細
メモリエリアの情報を取得する。
例1
データメモリの0チャネルから、2チャネル分を取得する
 ReadCH("DM", 0, 2);
ReadCHs(
  area as String,
  ch as Long,
  num as Long)
as Variant
チャネルデータ取得
(同期)
area:エリア種別
ch:アドレス
num:データ数
正常:
 データ配列
エラー:
 文字列配列

 ret(0):"Error"
 ret(1):"エラー番号"
メモリエリアの情報を取得する。
例1
データメモリの0チャネルから、2チャネル分を取得する
 Dim ret
 ret = ReadCHs("DM", 0, 2);
正常であれば、ret(0),ret(1),ret(2)に、データが入っています。
エラーの場合は、ret(0)には、"Error",ret(1)には、エラー番号が文字列として入っています。
ReadIO(
  area as String,
  dataType as String,
  ch as Long,
  bit as Long,
  num as Long)
as Long
データ取得
(非同期)
area:エリア種別
dataType:データの種類
ch:アドレス
bit:ビット
num:データ数
正常:0
エラー:詳細
メモリエリアの情報を取得する。
例1
データメモリの0チャネルから、2チャネル分を取得する
 ReadIO("DM","C", 0, 0, 2);
例2
リレーの2チャネルの1ビットから、3ビット分を取得する
 ReadIO("CIO","B", 2, 1, 3);
ReadIOs(
  area as String,
  dataType as String,
  ch as Long,
  bit as Long,
  num as Long)
as Variant
データ取得
(同期)
area:エリア種別
dataType:データの種類
ch:アドレス
bit:ビット
num:データ数
正常:
 データ配列
エラー:
 文字列配列

 ret(0):"Error"
 ret(1):"エラー番号"
メモリエリアの情報を取得する。
例1
データメモリの0チャネルから、3チャネル分を取得する
 Dim ret
 ret = ReadIOs("DM","C", 0, 0, 2)
正常であれば、ret(0),ret(1),ret(2)に、データが入っています。
エラーの場合は、ret(0)には、"Error",ret(1)には、エラー番号が文字列として入っています。
WriteCH(
  area as String,
  ch as Long,
  data as Variant,
  num as Long)
as Long
チャネルデータ書込
(非同期)
area:エリア種別
ch:アドレス
data:データ
 (値、または、配列)
num:データ数
正常:0
エラー:詳細
メモリエリアにチャネルデータを書き込む。
チャネルデータが1つの場合は、そのまま、複数の場合は、配列で指定します。
例1
データメモリの0チャネルにデータ(4)を書き込む。
 WriteCH("DM", 0, 4, 2);
例2
データメモリの0チャネルから、2チャネル分を書き込む。
 d[0] = 1;
 d[1] = 3;
 WriteCH("DM", 0, d, 2);
WriteCHs(
  area as String,
  ch as Long,
  data as Variant,
  num as Long)
as Long
チャネルデータ書込
(同期)
area:エリア種別
ch:アドレス
data:データ
 (値、または、配列)
num:データ数
正常:0
エラー:詳細
メモリエリアにチャネルデータを書き込む。
チャネルデータが1つの場合は、そのまま、複数の場合は、配列で指定します。
例1
データメモリの0チャネルにデータ(4)を書き込む。
 WriteCHs("DM", 0, 4, 2);
例2
データメモリの0チャネルから、2チャネル分を書き込む。
 d[0] = 1;
 d[1] = 3;
 WriteCHs("DM", 0, d, 2);
WriteIO(
  area as String,
  dataType as String,
  ch as Long,
  bit as Long,
  data as Variant,
  num as Long)
as Long
データ書込
(非同期)
area:エリア種別
dataType:データの種類
ch:アドレス
bit:ビット
data:データ
 (値、または、配列)
num:データ数
正常:0
エラー:詳細
メモリエリアに、チャネルやビットデータを書き込む。
チャネルデータが1つの場合は、そのまま、複数の場合は、配列で指定します。
例1
データメモリの0チャネルにデータ(4)を書き込む。
 WriteIO("DM", "C", 0, 0, 4, 2);
例2
データメモリの0チャネルから、2チャネル分を書き込む。
 d[0] = 1;
 d[1] = 3;
 WriteIO("DM", "C", 0, 0, d, 2);
WriteIOs(
  area as String,
  dataType as String,
  ch as Long,
  bit as Long,
  data as Variant,
  num as Long)
as Long
データ書込
(非同期)
area:エリア種別
dataType:データの種類
ch:アドレス
bit:ビット
data:データ
 (値、または、配列)
num:データ数
正常:0
エラー:詳細
メモリエリアに、チャネルやビットデータを書き込む。
チャネルデータが1つの場合は、そのまま、複数の場合は、配列で指定します。
例1
データメモリの0チャネルにデータ(4)を書き込む。
 WriteIOs("DM", "C", 0, 0, 4, 2);
例2
データメモリの0チャネルから、2チャネル分を書き込む。
 d[0] = 1;
 d[1] = 3;
 WriteIOs("DM", "C", 0, 0, d, 2);
SendFINS(
  command as String,
  data as String)
as Long
FINSコマンドの送信
(非同期)
command:コマンド
data:任意の文字列
正常:0
エラー:詳細
任意のデータを送信します。
このメソッドにより、全てのFINSコマンドを利用することができます。
例1
リレーの0チャネルから、2チャネル分を取得する
 SendFINS("0101", "B00000000002");
SendFINSs(
  command as String,
  data as String)
as String
FINSコマンドの送信
(同期)
command:コマンド
data:任意の文字列
正常: 値
エラー:
  空文字列
任意のデータを送信します。
このメソッドにより、全てのFINSコマンドを利用することができます。
例1
データメモリの1チャネルから、2チャネル分を取得する
 String ret = SendFINSsyn("0101", "820001000002");
GetRun() as Long シーケンサの動作を取得します - -1:エラー
0:プログラム
1:モニタ
2:運転
シーケンサの動作状況を取得
SetRun(
  mode as Short)
as Long
シーケンサの動作を設定 mode:
 0:プログラム
 1:モニタ
 2:運転
正常:0
エラー:詳細
シーケンサの動作を設定します
SendEx(
  val as String,
  Type as Long)
as Boolean
任意のデータの送信
(非同期)
val: 送信データ
Type: 送信のタイプ
(0:通常 1:デリミタ 2:なし)
正常:True
エラー: False
シーケンサに任意のコマンドを送信することができます。
コントロールは、FCSとターミネータを自動的に付けて送信しますので、FCS以降の文字列をメソッドに与える必要はありません。
シーケンサのデータは、OnComExイベントを使って受け取ります。
例:
SendEx("@00TSE",0)
この例を実行すると、OnComExイベントが発生し、@00TSE02*を得ることができます。

Typeについて
0が指定されると、与えられた文字列に、FCSとターミネータを自動的に付けて送信します。
1が指定されると、与えられた文字列に、FCSとデリミタを自動的に付けて送信します。
2が指定されると、与えられた文字列のみを送信します。
通常は、0を指定します。

132文字以上のコマンドを送信する場合、一度に送信することができませんので、分割して、送信することになります。
この場合、最後の文字列と、途中の文字列を区別するために途中の文字列は、デリミタを付加した文字列となります。
例えば、300文字を送信する場合、3分割して、送信しますが、1、2番目の分については、デリミタを、最後の分についてターミネータを付加する必要があります。
SendExsyn(
  val as String,
  Type as Long)
as String
任意のデータの送信
(同期)
val: 送信データ
Type: 送信のタイプ
(0:通常 1:デリミタ 2:なし)
正常: 値
エラー:
  空文字列
シーケンサに任意のコマンドを送信し、返信を受け取ります。
SendExが送信後、すぐに制御を返すのに対して、この関数は、シーケンサからの返信を待って、制御を返します。
エラーが発生した場合、空文字列を返します。
正常に終了した場合、シーケンサからのレスポンスデータが返ります。
ただし、シーケンサからレスポンスデータのうち、デリミタ(CR)は、含まれません。

コマンドの送信に関しては、SendExと同等です。
Cコマンド Cコマンドの送信関係
RR(
  ch as Long)
as Boolean
リレー読込
(非同期)
アドレス 正常: True
エラー: False
アドレス(ch)のリレー(内部リレー)の値を
読み出すコマンドを送信します。
シーケンサのデータは、OnComイベントを
使って受け取ります。
RRsyn(
  ch as Long)
as Long
リレー読込
(同期)
アドレス 正常: 値
エラー: -1
アドレス(ch)のリレー(内部リレー)の値を
読み出します。
WR(
  ch as Long,
  val as Long)
as Boolean
リレー書込
(非同期)
ch: アドレス
val: 書き込む値
正常: True
エラー: False
アドレス(ch)のリレー(内部リレー)に
値(val)を書き込むコマンドを送信します。
シーケンサのデータは、OnComイベントを
使って受け取ります。
WRsyn(
  ch as Long,
  val as Long)
as Long
リレー書込
(同期)
ch: アドレス
val: 書き込む値
正常: 0
エラー: -1
アドレス(ch)のリレー(内部リレー)に
値(val)を書き込みます。
RD(
  ch as Long)
as Boolean
データメモリ読込
(非同期)
アドレス 正常: True
エラー: False
アドレス(ch)のデータメモリの値を
読み出すコマンドを送信します。
シーケンサのデータは、OnComイベントを
使って受け取ります。
RDsyn(
  ch as Long)
as Long
データメモリ読込
(同期)
アドレス 正常: 値
エラー: -1
アドレス(ch)のデータメモリの値を
読み出します。
WD(
  ch as Long,
  val as Long)
as Boolean
データメモリ書込
(非同期)
ch: アドレス
val: 書き込む値
正常: True
エラー: False
アドレス(ch)のデータメモリに値(val)を
書き込むコマンドを送信します。
シーケンサのデータは、OnComイベントを
使って受け取ります。
WDsyn(
  ch as Long,
  val as Long)
as Long
データメモリ書込
(同期)
ch: アドレス
val: 書き込む値
正常: 0
エラー: -1
アドレス(ch)のデータメモリに
値(val)を書き込みます。

ReadIO、ReadCHなどの違いについて
全てのコマンド送信のベースは、SendFINSと、SendFINSsです。
このメソッドの違いは、SendFINSでは、データ送信の後、すぐに、制御が返り、データの受信は、イベントで処理を行います。
SendFINSsは、データの送信後、データを受信するか、タイムアウトすると制御が返り、受信データを処理できます。
SendFINSsは、プログラムは作りやすいのですが、タイムアウトの時間を考慮に入れておく必要があります。

SendFINSと、SendFINSsを使えば、FINSコマンドの処理をプログラムできますが、よく利用される、リレーの状態の参照や、データメモリへの書き込みなどを、これらのメソッドを使ってプログラムするのは、手間が掛かります。
ReadIOや、ReadIOsなどは、この手間を省くことができます。さらに、ReadCHや、ReadCHsなどは、扱うデータをチャネルに特化することで、より簡単に扱えるようになっています。
従いまして、ReadCHでできることは、ReadIOでもでき、ReadIOでできることは、SendFINSでもできます。このような上下関係になっています。

FINSコマンド
コマンド名称機能
0101 I/O メモリエリアの読出 連続したI/O メモリエリアの内容の読み出し
0102 I/O メモリエリアの書込 連続したI/O メモリエリアの内容の書き込み
その他のコマンドに関しては、シーケンサのマニュアルを参照のこと

エリア種別
文字列意味
CIOチャネル I/O
WR内部補助リレー
HR保持リレー
AR特殊補助リレー
TIMタイマ
CNTカウンタ
DMデータメモリ
TKタスクフラグ
IRインデックスレジスタ
DRデータレジスタ
CPクロックパルス
CFコンディションフラグ
EMCBカレントの拡張データメモリ
EMCNカレントの拡張データメモリの番号
EM00 〜 EM0F
EM10 〜 EM18
拡張データメモリ

データの種類
文字列データの意味
Bビット
BF強制 ON/OFF付 ビット
Cチャネル(ワード)
CF強制 ON/OFF付 チャネル(ワード)
Uアップフラグ
UF強制 ON/OFF付 アップフラグ
NOW現在値
Sステータス

I/Oメモリ種別 設定表 (CS/CJモード)
エリア種別とデータの種類で、指定できる組み合わせを示します。
例えば、"CIO"と"B"の組み合わせでは、リレーのビット(30)を取得できます。
"TIM"と"C"の組み合わせでは、対象がないため、エラーとなります。
B BFC CFU UF NOWS
CIO3070B0F0
WR 3171B1F1
HR 3272B2F2
AR 33 B3
TIM 0949 89
CNT 0949 89
DM 02 82
TK 06 46
IR DC
DR BC
CP 07
CF 07
EMCB0A 98
EMCN BC
EM00 - EM0F
EM10 - EM18
xx xx
EMの"xx"は、EM00の場合、20。EM0Fの場合、2Fと、文字が変わります。

メソッドのエラー値
意味
-1シーケンサからのコマンドを受けました。
通常、パソコンからのコマンドに対して、シーケンサが値を返しますが、このエラーは、シーケンサのSEND命令によるデータを受けた場合に発生します。
-11チャネル(ワード)の指定範囲を超えました。
-12ビットの指定範囲を超えました。
-13取得するデータ数が範囲を超えました。
-21エリア種別の設定が不正です。「CIO」、「WR」などの設定を見直してください。
-22データの種類の設定が不正です。「B」「C」などの設定を見直してください。
-23I/Oメモリ種別を特定できません。エリア種別と、データの種類の指定を見直してください。
-24FINSコマンドが不正です。
-30書き込みデータに不正な値が含まれています。
-101送信に失敗しました。ポートが開かれていないか、コマンド送信中のため、送信できない状態です。
-102タイムアウトしました
-201実装していないFINSコマンドです
-202データの長さが一致しません
-203送信コマンドと受信コマンドが一致しません
-205受信データに異常がありました。
正の値FINSコマンドの異常を知らせるレスポンスコードが、そのまま、返ります。
0(参考)正常です。


イベント
イベントは、非同期のメソッドを実行した場合にのみ発生します。
イベント名 意味 引数値 説明
OnComFINS(
 command as Variant
 val as Variant)
FINSデータ受信 command:
受信テキストを分割した配列

val:
読み出しデータの配列、または、メッセージの配列
シーケンサに非同期のFINSコマンドメソッドを使用して、コマンドを送信し、シーケンサより正常に応答が返ってきた時、イベントが発生します。

command:
command(0) コマンド前までのデータ
ICF、DA2などが含まれます。
command(1) コマンドコード。
“0101”、”0102”など、4文字のコマンドコード
command(2) 終了コード
“0000”、”0101”など、4文字のレスポンスコード
command(3) 終了コードに続くデータ
データの読み出し系のコマンドの場合、読み出されたデータ
command(4) FCS

val:
データ読み出し系のコマンド(ReadCH,、ReadIO)を送信した場合、チャネルやビットデータが配列として渡されます。
データ書き込み系のコマンド(WriteCH、WriteIO)を送信した場合、val(0)に文字列の”Ok”が渡されます。
エラーが発生した場合、val(0)に文字列の”Error”が渡されます。

このイベント内で、ReadIO、WriteIOなどのコマンドを実行できますが、その場合は、すぐに、この関数を抜けるようにしてください。長い処理を行うと、この関数を実行中に、再びイベントが発生し、動作が不安定になります。
OnCom(Res as Long) データ受信 シーケンサに非同期のメソッドを使用して、コマンドを送信し、シーケンサより正常に応答が返ってきた時、イベントが発生します。
RR、RDコマンドを送信した場合は、Resに値が入ります。
このイベント内で、RR、RDなどのコマンドを実行できますが、その場合は、すぐに、この関数を抜けるようにしてください。長い処理を行うと、この関数を実行中に、再びイベントが発生し、動作が不安定になります。
例:危険な記述
Private Sub Rs1.OnCom(Byval Res as Long)
 Rs1.RR 0
 for i = 0 to 1000000 ・・・この関数を実行中に、次のイベントが発生し2重に実行されてしまいます。
 next
End Sub

また、コマンド送信後の構文にブレークポイントを設定し停止させると、再開してもイベントが発生しません。
上記の例では、For文にブレークポイントを設定すると、シーケンサからデータが返ってきても、次のイベントが発生しません。
OnComEx(Res as String) データ受信
(SendEx専用)
シーケンサにSendEx関数を使ってデータを送信し、シーケンサより正常に応答が返ってきた時、イベントが発生します。
Resは、シーケンサからのレスポンスデータです。
シーケンサからレスポンスデータのうち、デリミタ(CR)は、Resに含まれません。
例えば、
SendEx("@00TSE",0)
を実行した場合、「@00TSE02*」がResに入り、シーケンサからのデータに含まれる(CR)は除かれます。
OnError(lErr) エラー発生 エラー番号 シーケンサにコマンドを送信し、シーケンサより応答が返ってこない場合、イベントが発生します。
現在、コマンド送信後、3秒経っても返信が無い場合、エラーとします。