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

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型に変換 |
コンストラクター
定義
アセンブリ:fins.dll
Finsクラスの新しいインスタンスを初期化します
public Fins();
例
Osd.Omron.Fins fins = new Osd.Omron.Fins();
プロパティ
Fins.MessageLogプロパティ
定義
public string MessageLog{ get; };
例
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プロパティ
定義
public byte[] ClientFinsAddress
例
fins.ClientFinsAddress = new byte[3] {0, 10, 0}
注釈
ClientFinsAddress[0] : ネットワークアドレス
ClientFinsAddress[1] : ノードアドレス
ClientFinsAddress[2] : 号機アドレス
Fins.ServerFinsAddressプロパティ
定義
public byte[] ServerFinsAddress
例
fins.ServerFinsAddress = new byte[3] {0, 1, 0};
注釈
ServerFinsAddress[0] : ネットワークアドレス
ServerFinsAddress[1] : ノードアドレス
ServerFinsAddress[2] : 号機アドレス
メソッド
Fins.Connectメソッド
定義
public byte[] Connect(string TargetIP, bool TcpConnect = false);
パラメータ
接続先IPアドレス
trueでTCP接続、falseでUDP接続 (省略時はUDP接続)
戻り値
送信元と送信先のFINSノードアドレスを格納したbyte配列
byte[0]:送信先ノード番号
byte[1]:送信元ノード番号
例
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);
}
注釈
TCP接続の場合は、TcpClientのインスタンスを作成し指定したIPv4アドレスとポート番号9600番へ非同期接続し、接続先に「FINS ノードアドレス情報送信コマンド」を送信しノードアドレスを取得します。 以後は取得したノードアドレスを使ってコマンドを作成します
Fins.Closeメソッド
定義
public void Close();
例
fins.Close();
注釈
TCP接続の場合は、TcpClientを閉じるように要求しインスタンスを破棄済みとしてマークします
Fins.SendCommandメソッド
定義
public byte[] SendCommand(byte[] command)();
戻り値
レスポンスが格納されたbyte配列
例
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メソッド
定義
public byte[] MemOffset(string memstring, short offset);
パラメータ
メモリを表す文字列
メモリ種別 | 表記例 |
---|---|
DM | D100 |
EM0 | E0_100 |
WR | W100 |
HR | H100 |
CIO | 100 |
オフセット位置
戻り値
FINSコマンドで使用するI/Oメモリの指定に従ったbyte配列
byte[0]:メモリタイプ
byte[1]:アドレス(上位)
byte[2]:アドレス(下位)
byte[3]:ビット位置 (0x00固定)
例
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メソッド
定義
public byte[] read(string memadrstr, int readsize);
パラメータ
メモリを表す文字列
読み出すサイズ
戻り値
例
byte[] res = fins.read("D0", 3);
Console.WriteLine(BitConverter.ToString(res));
// res = 00-01-00-02-00-03
注釈
バイト配列を数値などに変換するにはtoInt16()などの変換命令で変換します
Fins.writeメソッド
定義
public void write(string memadrstr, byte[] data);
パラメータ
メモリを表す文字列
書込みデータ
例
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メソッド
定義
public void fill(string memadrstr, int size, byte[] data);
パラメータ
メモリを表す文字列
書込みデータ (2バイト)
例
int data = 100;
byte[] filldata = BitConverter.GetBytes((short)data).Reverse().ToArray();
fins.fill("D2000", 100, filldata);
Fins.MultiReadメソッド
定義
public byte[] MultiRead(string memaddresses);
パラメータ
メモリを表す文字列(複数 カンマ区切り)
例
byte[] res = fins.MultiRead("D0,D10,D50");
Fins.runメソッド
定義
public void run(byte Mode);
パラメータ
モード
例
fins.run(0x02);
注釈
0x02 :モニタモード
0x04 :運転モード
Fins.stopメソッド
定義
public void stop();
例
fins.stop();
Fins.ReadUnitDataメソッド
定義
public byte[] ReadUnitData();
例
byte[] res = fins.ReadUnitData();
注釈
Fins.ReadUnitStatusメソッド
定義
public byte[] ReadUnitStatus();
例
byte[] res = fins.ReadUnitStatus();
注釈
Fins.ReadCycleTimeメソッド
定義
public byte[] ReadCycleTime();
例
byte[] res = fins.ReadCycleTime();
注釈
Fins.Clockメソッド
定義
public byte[] Clock();
例
byte[] res = fins.Clock();
Fins.SetClockメソッド
定義
public void SetClock();
例
fins.SetClock();
注釈
Fins.ErrorClearメソッド
定義
public void ErrorClear(byte[] code);
パラメータ
故障コード
例
fins.ErrorClear(new byte[2] { 0xFF, 0xFF });
注釈
Fins.ErrorLogReadメソッド
定義
public byte[] ErrorLogRead(int startIndex, int count);
パラメータ
読出し開始レコードNo
読出しレコード数
例
byte[] res = fins.ErrorLogRead(0, 20);
注釈
Fins.ErrorLogClearメソッド
定義
public void ErrorLogClear();
例
fins.ErrorLogClear();
Fins.WordToBinメソッド
定義
public string WordToBin(byte[] data);
例
res = fins.read("D0", 2);
string WordToBin = fins.WordToBin(res);
Console.WriteLine(WordToBin);
//out 00010010001101000101011001111000
Fins.toBitArrayメソッド
定義
public BitArray toBitArray(byte[] data);
例
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メソッド
定義
public bool[] toBoolArray(byte[] data);
例
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メソッド
定義
public short[] toInt16(byte[] data);
例
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メソッド
定義
public int[] toInt32(byte[] data);
例
res = fins.read("D20", 10);
int[] data32 = fins.toInt32(res);
Console.WriteLine(String.Join(",", data32));
//out 1376276,1507350,1638424,1769498,1900572
Fins.toInt64メソッド
定義
public long[] toInt64(byte[] data);
例
res = fins.read("D30", 8);
long[] data64 = fins.toInt64(res);
Console.WriteLine(String.Join(",", data64));
//out 9288811672436766,10414728759410722
Fins.toUInt16メソッド
定義
public ushort[] toUInt16(byte[] data);
例
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メソッド
定義
public uint[] toUInt32(byte[] data);
例
res = fins.read("D50", 10);
uint[] datau32 = fins.toUInt32(res);
Console.WriteLine(String.Join(",", datau32));
//out 3342386,3473460,3604534,3735608,3866682
Fins.toUInt64メソッド
定義
public ulong[] toUInt64(byte[] data);
例
res = fins.read("D60", 8);
ulong[] datau64 = fins.toUInt64(res);
Console.WriteLine(String.Join(",", datau64));
//out 17733189824741436,18859106911715392
Fins.toFloatメソッド
定義
public float[] toFloat(byte[] data);
例
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メソッド
定義
public double[] toDouble(byte[] data);
例
res = fins.read("D80", 8);
double[] datad = fins.toDouble(res);
Console.WriteLine(String.Join(",", datad));
//out 4.22791874120785E-307,5.11796186559102E-307
Fins.toStringメソッド
定義
public string toString(byte[] data);
例
res = fins.read("D90", 5);
string datastr = fins.toString(res);
Console.WriteLine(datastr);
//out 1234567890