1. TOP
  2. PCサンプル
  3. PCツール
  4. FinsMes
  5. finsdll

ダウンロード

ダウンロードされたときは利用規約に同意したものとみなします

関連資料

FinsMesの説明はFinsMesのページを参照してください

FINS通信の説明はFINSメッセージ通信を参照してください

FINSコマンドの説明はCJ1W-ETN21にあるマニュアルの
通信コマンドリファレンスマニュアルとEthernetユニットユーザーズマニュアル(アプリケーション構築編)を参照してください

Osd.Omron.Finsクラス

コンストラクター

Fins()Finsクラスの新しいインスタンスを初期化します

プロパティ

MessageLog通信ログを取得します
ClientFinsAddress送信元FINSアドレスの設定と取得をします
ServerFinsAddress送信先FINSアドレスの設定と取得をします

メソッド

Connect(string, bool)接続先IPアドレスを指定してUDPまたはTCPで接続
Close()接続を終了
SendCommand(byte[])接続しているホストにFINSコマンドを送信
MemOffset(string, short)メモリのアドレス表記をFINSコマンドのメモリ指定方法に変換
read(string, int)メモリエリアの読出し (0101)
write(string, byte[])メモリエリアの書込み (0102)
fill(string, int, byte[])メモリエリアの一括書込み (0103)
MultiRead(string)メモリエリアの複合読出し (0104)
run(byte)運転モード変更 (0401)
stop()運転停止 (0402)
ReadUnitData()CPUユニット情報の読出し (0501)
ReadUnitStatus()CPUユニットステータスの読出し (0601)
ReadCycleTime()サイクルタイム読出し (0620)
Clock()時間情報読出し (0701)
SetClock()時間情報書込み (0702)
ErrorClear(byte[])異常解除 (2101)
ErrorLogRead(int, int)異常履歴読出し (2102)
ErrorLogClear()異常履歴クリア (2103)
WordToBin(byte[])バイト配列を2進数の0または1で表す文字列型に変換
toBitArray(byte[])バイト配列をBitArray型に変換
toBoolArray(byte[])バイト配列をBool型の配列に変換
toInt16(byte[])バイト配列をInt16型の配列に変換
toInt32(byte[])バイト配列をInt32型の配列に変換
toInt64(byte[])バイト配列をInt64型の配列に変換
toUInt16(byte[])バイト配列をUInt16型の配列に変換
toUInt32(byte[])バイト配列をUInt32型の配列に変換
toUInt64(byte[])バイト配列をUInt64型の配列に変換
toFloat(byte[])バイト配列をFloat型の配列に変換
toDouble(byte[])バイト配列をDouble型の配列に変換
toString(byte[])バイト配列をString型に変換

コンストラクター

定義

名前空間:Osd.Omron
アセンブリ:fins.dll

Finsクラスの新しいインスタンスを初期化します

public Fins();

Osd.Omron.Fins fins = new Osd.Omron.Fins();

プロパティ

Fins.MessageLogプロパティ

定義

通信ログを取得します

public string MessageLog{ get; };

DM0の値を読出したときのコマンドとレスポンスを取得する例です


public staic viod ReadMemory()
{
	Osd.Omron.Fins fins = new Osd.Omron.Fins();
	fins.ServerFinsAddress = new byte[3] {0, 1, 0};
	fins.ClientFinsAddress = new byte[3] {0, 10, 0}
	fins.Connect("192.168.0.20");
	byte[] res = fins.read("D0", 1);
	string text = fins.MessageLog;
	Console.WriteLine(text);
	//[UDP]-> 80-00-02-00-14-00-00-0A-00-01-01-01-82-00-00-00-00-01
	//[UDP]<- C0-00-02-00-0A-00-00-14-00-01-01-01-00-00-12-34
}
	

Fins.ClientFinsAddressプロパティ

定義

送信元FINSアドレスの設定と取得をします

public byte[] ClientFinsAddress
fins.ClientFinsAddress = new byte[3] {0, 10, 0}

注釈

FINSアドレスはbyte[3]の内容は以下の通りです
ClientFinsAddress[0] : ネットワークアドレス
ClientFinsAddress[1] : ノードアドレス
ClientFinsAddress[2] : 号機アドレス


Fins.ServerFinsAddressプロパティ

定義

送信先FINSアドレスの設定と取得をします

public byte[] ServerFinsAddress
fins.ServerFinsAddress = new byte[3] {0, 1, 0};

注釈

FINSアドレスはbyte[3]の内容は以下の通りです
ClientFinsAddress[0] : ネットワークアドレス
ClientFinsAddress[1] : ノードアドレス
ClientFinsAddress[2] : 号機アドレス


メソッド

Fins.Connectメソッド

定義

指定したIPアドレスと接続します

public byte[] Connect(string TargetIP, bool TcpConnect = false);
パラメータ
TargetIP
string
接続先IPアドレス
TcpConnect
bool
trueでTCP接続、falseでUDP接続 (省略時はUDP接続)
戻り値
戻り値
byte[]
送信元と送信先のFINSノードアドレスを格納したbyte配列
byte[0]:送信先ノード番号
byte[1]:送信元ノード番号

TCP接続する例です

public void FinsTcpConnect()
		{
			Osd.Omron.Fins fins = new Osd.Omron.Fins();
			fins.ServerFinsAddress = new byte[3] {0, 1, 0};
			fins.ClientFinsAddress = new byte[3] {0, 10, 0}
			byte[] FinsNode = fins.Connect("192.168.0.1", true);
		}
	

注釈

UDP接続の場合は、UdpClientのインスタンスを作成し指定したIPv4アドレスとポート番号9600番を接続先として設定します。
TCP接続の場合は、TcpClientのインスタンスを作成し指定したIPv4アドレスとポート番号9600番へ非同期接続し、接続先に「FINS ノードアドレス情報送信コマンド」を送信しノードアドレスを取得します。 以後は取得したノードアドレスを使ってコマンドを作成します


Fins.Closeメソッド

定義

接続を終了します

public void Close();

すでにConnectしているfinsの接続を終了する例です

fins.Close();

注釈

UDP接続の場合は、UdpClientのリソースを解放します
TCP接続の場合は、TcpClientを閉じるように要求しインスタンスを破棄済みとしてマークします


Fins.SendCommandメソッド

定義

FINSコマンドを送信してレスポンスを受信します

public byte[] SendCommand(byte[] command)();
戻り値
戻り値
byte[]
レスポンスが格納されたbyte配列

IPアドレス(192.168.0.20)のPLCにUDP接続してFINSコマンドを送信する例です

public void FinsSend()
{
	Osd.Omron.Fins fins = new Osd.Omron.Fins();
	fins.Connect("192.168.0.20", "0.20.0", "0.10.0");

	byte[] cmd = new byte[12];
	cmd[0] = 0x80;
	cmd[1] = 0x00;
	cmd[2] = 0x02;
	cmd[3] = 0;     // 送信先FINSアドレス
	cmd[4] = 20;
	cmd[5] = 0;
	cmd[6] = 0;     // 送信元FINSアドレス
	cmd[7] = 10;
	cmd[8] = 0;
	cmd[9] = 1;     // SID
	cmd[10] = 0x05; // CPU情報読出し0501
	cmd[11] = 0x01;

	byte[] res = fins.SendCommand(cmd);
	Console.WriteLine(BitConverter.ToString(res));
}
		

Fins.MemOffsetメソッド

定義

メモリのアドレス表記をFINSコマンドのメモリ指定方法に変換します

public byte[] MemOffset(string memstring, short offset);
パラメータ
memstring
string
メモリを表す文字列
メモリをあらわす文字
メモリ種別表記例
DMD100
EM0E0_100
WRW100
HRH100
CIO100
※ ビットは未対応
offsetshortオフセット位置
戻り値
戻り値
byte[]
FINSコマンドで使用するI/Oメモリの指定に従ったbyte配列
byte[0]:メモリタイプ
byte[1]:アドレス(上位)
byte[2]:アドレス(下位)
byte[3]:ビット位置 (0x00固定)

DM100からオフセット+1のアドレス(D101)を変換する例

byte[] mem = fins.MemOffset("D100", 1);
Console.WriteLine(BitConverter.ToString(mem));
// mem = 82-00-65-00
		

注釈

アドレスはチャネル(ワード)のみ指定可能です
アドレスとI/Oメモリ種別の対応は以下の通りです

アドレスI/Oメモリ種別
DM0x82
EM0-F0xA0-0xAF
EM10-180x60-0x68
WR0xB1
HR0xB2
CIO0xB0

Fins.readメソッド

定義

メモリエリアの読出し(0101)

public byte[] read(string memadrstr, int readsize);
パラメータ
memstring
string
メモリを表す文字列
readsize
int
読み出すサイズ
戻り値
戻り値
byte[]
読出しデータ

DM0から3CH読み出す例

byte[] res = fins.read("D0", 3);
Console.WriteLine(BitConverter.ToString(res));
// res = 00-01-00-02-00-03
		

注釈

D0からD2までの3チャネルを読み出してバイト配列に格納します
バイト配列を数値などに変換するにはtoInt16()などの変換命令で変換します


Fins.writeメソッド

定義

メモリエリアの書込み (0102)

public void write(string memadrstr, byte[] data);
パラメータ
memstring
string
メモリを表す文字列
data
byte[]
書込みデータ

D1000からD1999までに連番を書き込む例

byte[] writedata = new byte[2000];
for (int cnt = 0; cnt < 1000; cnt++)
{
	byte[] data = BitConverter.GetBytes((short)cnt).Reverse().ToArray();
	Array.Copy(data, 0, writedata, cnt * 2, 2);
}
fins.write("D1000", writedata);
		

Fins.fillメソッド

定義

メモリエリアの一括書込み (0103)

public void fill(string memadrstr, int size, byte[] data);
パラメータ
memstring
string
メモリを表す文字列
data
byte[]
書込みデータ

DM2000からDM2099に数値100を書き込む例

int data = 100;
byte[] filldata = BitConverter.GetBytes((short)data).Reverse().ToArray();
fins.fill("D2000", 100, filldata);
		

Fins.MultiReadメソッド

定義

メモリエリアの複合読出し (0104)

public byte[] MultiRead(string memaddresses);
パラメータ
memaddresses
string
メモリを表す文字列(複数 カンマ区切り)

DM0とDM10とDM50の値を読み出す例

byte[] res = fins.MultiRead("D0,D10,D50");

Fins.runメソッド

定義

運転モード変更 (0401)

public void run(byte Mode);
パラメータ
Mode
byte
モード

モニタモードへ変更する例

fins.run(0x02);

注釈

モードの種類
0x02 :モニタモード
0x04 :運転モード


Fins.stopメソッド

定義

運転停止 (0402)

public void stop();

モニタモードへ変更する例

fins.stop();

Fins.ReadUnitDataメソッド

定義

CPUユニット情報の読出し (0501)

public byte[] ReadUnitData();

モニタモードへ変更する例

byte[] res = fins.ReadUnitData();

注釈

以下の情報を読み出します
CPUユニットの形式
CPU高機能ユニットの構成
CPUユニットの内部システムのバージョン
リモートI/O情報
エリア情報
CPUユニット情報

Fins.ReadUnitStatusメソッド

定義

CPUユニットステータスの読出し (0601)

public byte[] ReadUnitStatus();
byte[] res = fins.ReadUnitStatus();

注釈

以下の情報を読み出します
運転状態
運転モード
運転停止異常情報
運転継続異常情報
メッセージ有無
故障コード
異常メッセージ

Fins.ReadCycleTimeメソッド

定義

サイクルタイム読出し (0620)

public byte[] ReadCycleTime();
byte[] res = fins.ReadCycleTime();

注釈

以下の情報を読み出します
平均サイクルタイム
サイクルタイム最大値
サイクルタイム最小値

Fins.Clockメソッド

定義

時間情報読出し (0701)

public byte[] Clock();
byte[] res = fins.Clock();

Fins.SetClockメソッド

定義

時間情報書込み (0702)

public void SetClock();
fins.SetClock();

注釈

PCの時間をPLCに書き込みます

Fins.ErrorClearメソッド

定義

異常解除 (2101)

public void ErrorClear(byte[] code);
パラメータ
code
byte[]
故障コード

全ての異常を解除する例

fins.ErrorClear(new byte[2] { 0xFF, 0xFF });

注釈

code = FFFF: 発生している全ての異常を解除します

Fins.ErrorLogReadメソッド

定義

異常履歴読出し (2102)

public byte[] ErrorLogRead(int startIndex, int count);
パラメータ
startIndex
int
読出し開始レコードNo
count
int
読出しレコード数

全ての異常を読み出す例

byte[] res = fins.ErrorLogRead(0, 20);

注釈

code = FFFF: 発生している全ての異常を解除します
レコード最大数
格納数
読出レコード数
異常履歴データ 1~20

Fins.ErrorLogClearメソッド

定義

異常履歴クリア (2103)

public void ErrorLogClear();
fins.ErrorLogClear();

Fins.WordToBinメソッド

定義

バイト配列を2進数の0または1で表す文字列型に変換

public string WordToBin(byte[] data);

DM0から2CH分の値を読み出して文字列へ格納します

res = fins.read("D0", 2);
		string WordToBin = fins.WordToBin(res);
		Console.WriteLine(WordToBin);
		//out 00010010001101000101011001111000
	

Fins.toBitArrayメソッド

定義

バイト配列をBitArray型に変換

public BitArray toBitArray(byte[] data);

DM0から2CH分の値を読み出してBitArray型変数bitsへ格納します

res = fins.read("D0", 2);
		BitArray bits = fins.toBitArray(res);
		StringBuilder sb = new StringBuilder();
		for (int i = bits.Length; i > 0; i--)
		{
			char c = bits[i - 1] ? '1' : '0';
			sb.Append(c);
		}
		Console.WriteLine(sb.ToString());
		//out 00010010001101000101011001111000
	

Fins.toBoolArrayメソッド

定義

バイト配列をbool型の配列に変換

public bool[] toBoolArray(byte[] data);

DM0から2CH分の値を読み出してbool型の配列へ格納します

res = fins.read("D0", 2);
		bool[] bools = fins.toBoolArray(res);
		Console.WriteLine(String.Join(",", bools));
		//out False,False,False,True,False,False,True,False, ...
	

Fins.toInt16メソッド

定義

バイト配列をInt16型の配列に変換

public short[] toInt16(byte[] data);

DM10から10CH分の値を読み出してshort型の配列へ格納します

res = fins.read("D10", 10);
		short[] data16 = fins.toInt16(res);
		Console.WriteLine(String.Join(",", data16));
		//out 10,11,12,13,14,15,16,17,18,19
	

Fins.toInt32メソッド

定義

バイト配列をInt32型の配列に変換

public int[] toInt32(byte[] data);

DM20から10CH分の値を読み出してint型の配列へ格納します

res = fins.read("D20", 10);
		int[] data32 = fins.toInt32(res);
		Console.WriteLine(String.Join(",", data32));
		//out 1376276,1507350,1638424,1769498,1900572
	

Fins.toInt64メソッド

定義

バイト配列をInt64型の配列に変換

public long[] toInt64(byte[] data);

DM30から8CH分の値を読み出してlong型の配列へ格納します

res = fins.read("D30", 8);
		long[] data64 = fins.toInt64(res);
		Console.WriteLine(String.Join(",", data64));
		//out 9288811672436766,10414728759410722
	

Fins.toUInt16メソッド

定義

バイト配列をUInt16型の配列に変換

public ushort[] toUInt16(byte[] data);

DM40から10CH分の値を読み出してushort型の配列へ格納します

res = fins.read("D40", 10);
		ushort[] datau16 = fins.toUInt16(res);
		Console.WriteLine(String.Join(",", datau16));
		//out 40,41,42,43,44,45,46,47,48,49
	

Fins.toUInt32メソッド

定義

バイト配列をUInt32型の配列に変換

public uint[] toUInt32(byte[] data);

DM50から10CH分の値を読み出してuint型の配列へ格納します

res = fins.read("D50", 10);
		uint[] datau32 = fins.toUInt32(res);
		Console.WriteLine(String.Join(",", datau32));
		//out 3342386,3473460,3604534,3735608,3866682
	

Fins.toUInt64メソッド

定義

バイト配列をUInt64型の配列に変換

public ulong[] toUInt64(byte[] data);

DM60から8CH分の値を読み出してulong型の配列へ格納します

res = fins.read("D60", 8);
		ulong[] datau64 = fins.toUInt64(res);
		Console.WriteLine(String.Join(",", datau64));
		//out 17733189824741436,18859106911715392
	

Fins.toFloatメソッド

定義

バイト配列をfloat型の配列に変換

public float[] toFloat(byte[] data);

DM70から10CH分の値を読み出してfloat型の配列へ格納します

res = fins.read("D70", 10);
		float[] dataf = fins.toFloat(res);
		Console.WriteLine(String.Join(",", dataf));
		//out 6.520418E-39,6.704092E-39,6.887766E-39,7.07144E-39,7.255113E-39
	

Fins.toDoubleメソッド

定義

バイト配列をDouble型の配列に変換

public double[] toDouble(byte[] data);

DM80から8CH分の値を読み出してdouble型の配列へ格納します

res = fins.read("D80", 8);
		double[] datad = fins.toDouble(res);
		Console.WriteLine(String.Join(",", datad));
		//out 4.22791874120785E-307,5.11796186559102E-307
	

Fins.toStringメソッド

定義

バイト配列を文字列(UTF8)に変換

public string toString(byte[] data);

DM90から5CH分の値を読み出して文字列へ格納します

res = fins.read("D90", 5);
		string datastr = fins.toString(res);
		Console.WriteLine(datastr);
		//out 1234567890
	

この記事へのコメント