finsdll

ダウンロード

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

GitHub FinsMes

GitHubからFinsMesのソースとfins.dllのソースがダウンロードできます

関連資料

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]の内容は以下の通りです
ServerFinsAddress[0] : ネットワークアドレス
ServerFinsAddress[1] : ノードアドレス
ServerFinsAddress[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
メモリを表す文字列
メモリ種別 表記例
DM D100
EM0 E0_100
WR W100
HR H100
CIO 100
※ ビットは未対応

offset   short
オフセット位置

戻り値

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メモリ種別
DM 0x82
EM0-F 0xA0-0xAF
EM10-18 0x60-0x68
WR 0xB1
HR 0xB2
CIO 0xB0

Fins.readメソッド

定義

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

public byte[] read(string memadrstr, int readsize);
							

パラメータ

memadrstr   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);
							

パラメータ

memadrstr   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);
							

パラメータ

memadrstr   string
メモリを表す文字列

data   byte[]
書込みデータ (2バイト)

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);
    							

    注釈

    以下の情報を読み出します
  • レコード最大数
  • 格納数
  • 読出レコード数
  • 異常履歴データ 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