本ソフトウエアは、三菱電機(株)製PLC(シーケンサ)におけるMCプロトコルイーサネット通信用DLLです。 PLCデバイス値の読み込み、書き込み等が出来ます。
1. 一般仕様
1.基本仕様
| 通信手順 | MELSECコミュニケーションプロトコル(MCプロトコル) TCP/IP または、 UDP/IP |
| 電文フォーマット | QnA互換3Eフレーム バイナリコード |
| ネットワーク番号、PC番号 | ネットワーク番号:00 PC番号:FF 自局のみ |
| PLC通信ポート | RJ71EN71、QJ71E71-100、Q,iQ-R CPUイーサネットポート |
| 対応.NET | .NET Framework4.6 32ビット、64ビット |
2.メソッド一覧
2-1.TCP
| メソッド名 | 説明 |
|---|---|
| Connect | 指定された接続先(PLC)へ接続します。 |
| Disconnected | 接続を切断します。 |
| DevRead | デバイスの値を読み込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。 |
| DevReadRex | デバイスの値を読み込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。iQ-R用 |
| DevWrite | デバイスに値を書き込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。 |
| DevWriteRex | デバイスに値を書き込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。iQ-R用 |
| コールバック関数 | Connect, DevRead, DevWrite, DevReadRex, DevWriteRex の実行結果は、コールバック関数で取得します。 |
DevReadRex, DevWriteRex のデバイス先頭アドレスは、8桁(10進)です。DevRead, DevWrite は、iQ-R でも使用できます。
情報操作
| メソッド名 | 説明 |
|---|---|
| SetCallBack | コールバック関数を登録します。CpuType等下記メソッド用です。 |
| CpuType | PLCのCPUタイプを取得します。 |
| RemoteUnLock | PLC通信ポートのロック解除を行います。交信可能状態とします。 |
| RemoteLock | PLC通信ポートのロックを行います。交信不可能状態とします。 |
2-2.UDP
| メソッド名 | 説明 |
|---|---|
| Open | UDPポートをオープンします。 |
| Close | UDPポートをクローズします。 |
| DevRead | デバイスの値を読み込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。 |
| DevReadRex | デバイスの値を読み込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。iQ-R用 |
| DevWrite | デバイスに値を書き込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。 |
| DevWriteRex | デバイスに値を書き込みます。使用出来るデバイスは、M,B,D,W,R,ZR,SM,SD です。iQ-R用 |
| コールバック関数 | DevRead, DevWrite, DevReadRex, DevWriteRex の実行結果は、コールバック関数で取得します。 |
DevReadRex, DevWriteRex のデバイス先頭アドレスは、8桁(10進)です。DevRead, DevWrite は、iQ-R でも使用できます。
情報操作
| メソッド名 | 説明 |
|---|---|
| SetCallBack | コールバック関数を登録します。CpuType等下記メソッド用です。 |
| CpuType | PLCのCPUタイプを取得します。 |
| RemoteUnLock | PLC通信ポートのロック解除を行います。交信可能状態とします。 |
| RemoteLock | PLC通信ポートのロックを行います。交信不可能状態とします。 |
2-3.数値文字変換
PLCとの読み込み、書き込みデータは、16ビット整数の配列データで行われます。 PLCにて32ビット整数、文字列、実数が使用されている場合は、以下の数値変換関数にて相互変換を行うことが出来ます。
| メソッド名 | 説明 |
|---|---|
| D2ToDW | 2つのワード値(16ビット整数)をダブルワード値(32ビット整数)に変換します。 |
| DWToD2 | ダブルワード値(32ビット整数)を2つのワード値(16ビット整数)に変換します。 |
| DarToStr | ワード配列(16ビット整数)による文字列を文字列(string)に変換します。PLC側での文字コードは、Shift_JISとなります。 |
| StrToDar | 文字列(string)をワード配列(16ビット整数)による文字列に変換します。PLC側での文字コードは、Shift_JISとなります。 |
| DarWToStr | ワード配列(16ビット整数)による文字列を文字列(string)に変換します。PLC側での文字コードは、Unicodeとなります。iQ-R用 |
| StrToDarW | 文字列(string)をワード配列(16ビット整数)による文字列に変換します。PLC側での文字コードは、Unicodeとなります。iQ-R用 |
| D2ToFloat | 2つのワード値(16ビット整数)を実数(単精度)に変換します。 |
| FloatToD2 | 実数(単精度)を2つのワード値(16ビット整数)に変換します。 |
| D4ToDouble | 4つのワード値(16ビット整数)を実数(倍精度)に変換します。 |
| DoubleToD4 | 実数(倍精度)を4つのワード値(16ビット整数)に変換します。 |
2-4.共通
| メソッド名 | 説明 |
|---|---|
| Version | バージョン情報を取得します。 |
3.開発、実行環境
本DLL(MelEther.dll)は、.NET用のDLLです。実行には .NET Framework 4.6 が必要です。
2. プログラム例
C# によるTCP通信プログラム例 PLCは、iQ-R
// ******* melsec イーサネット通信例 *******
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MelEtherSmpl
{
public partial class Form1 : Form
{
MelEther.mTcp melTcpd;
int ibitword; //0:bit 1:word
public Form1()
{
InitializeComponent();
}
// form load
private void Form1_Load(object sender, EventArgs e){
melTcpd = new MelEther.mTcp();
string sv = string.Empty;
int iv = MelEther.melEth.Version(ref sv);
label2.Text = iv.ToString() + ":" + sv;
int ir = MelEther.melEth.keyCodeChk("キーコード");
if (ir != 0)
MessageBox.Show("キーコードエラー", "MelEther例", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
// 接続
private void button1_Click(object sender, EventArgs e){
int ir = melTcpd.Connect("192.168.1.89", 4000, CallBack, 1);
textBox1.Text = ir.ToString();
}
// 切断
private void button2_Click(object sender, EventArgs e){
melTcpd.Disconnected();
textBox1.Text = "切断 self";
}
// デバイス ワード 読み込み
private void button3_Click(object sender, EventArgs e){
int ir = melTcpd.DevRead("D", 200, 20); // D200から20ワード読み込み
ibitword = 1;
textBox1.Text = ir.ToString();
}
// デバイス ビット 読み込み
private void button5_Click(object sender, EventArgs e){
int ir = melTcpd.DevRead("M", 100, 16); // M100 から 16点読み込み
ibitword = 0;
textBox1.Text = ir.ToString();
}
// デバイス ワード書込み
private void button4_Click(object sender, EventArgs e){
Int16[] idata = new Int16[22];
idata[0] = 123; idata[1] = 456; // ワード D300,D301
int ia = 98000;
MelEther.NumConv.DWToD2(ia, ref idata, 2); // ダブルワード D302,D303
float fldt = 1.41421356f;
MelEther.NumConv.FloatToD2(fldt, ref idata, 4); // 単精度実数 D304,D305
double dbdt = 6.02E+23d;
MelEther.NumConv.DoubleToD4(dbdt, ref idata, 6); // 倍精度実数 D306-D309
string sa = "漢字89Yz";
MelEther.NumConv.StrToDar(sa, ref idata, 10); // 文字列 shift_jis D310-D314
sa = "日本12Ab";
MelEther.NumConv.StrToDarW(sa, ref idata, 15); // 文字列 unicode D315-D321
int ir = melTcpd.DevWrite("D", 300, idata); // D300 から22ワード書き込み
textBox1.Text = ir.ToString();
}
// デバイス ビット 書込み
private void button6_Click(object sender, EventArgs e){
Int16[] idata = new Int16[10];
idata[0] = 1; idata[2] = 1; idata[9] = 1; // M200, M202, M209 on
int ir = melTcpd.DevWrite("M", 200, idata); // M200 から 10点書き込み
textBox1.Text = ir.ToString();
}
// コールバック関数
public System.Boolean CallBack(MelEther.ETHCONT Content, int iErrCode, Int16[] iValue, int iUser){
if (Content == MelEther.ETHCONT.Connect)
textBox1.Text = "接続した";
if (Content == MelEther.ETHCONT.DisConnect)
textBox1.Text = "切断した";
if (Content == MelEther.ETHCONT.RecvData){
textBox1.Text = iErrCode.ToString();
if (iErrCode == 0 && iValue.Length > 0)
if (ibitword == 0)
RecvDataB(iValue); //bit
else if (ibitword == 1)
RecvDataW(iValue); //word
}
return true;
}
// 受信データ ビット
private void RecvDataB(Int16[] ivalue){
int il = ivalue.Length;
string sv = string.Empty;
for (int ia = 0; ia < il; ia++)
sv += ivalue[ia].ToString() + ",";
textBox2.Text = sv;
}
// 受信データ ワード
private void RecvDataW(Int16[] ivalue){
string sv = string.Empty;
int id0 = ivalue[0]; int id1 = ivalue[1]; // D200,D201 ワード
sv = id0.ToString() + "," + id1.ToString() + "\r\n";
int idd2 = 0;
MelEther.NumConv.D2ToDW(ivalue, 2, ref idd2); // D202,D203 ダブルワード
sv += idd2.ToString() + "\r\n";
float fd = 0.0f;
MelEther.NumConv.D2ToFloat(ivalue, 4, ref fd); // D204,D205 単精度実数
sv += fd.ToString() + "\r\n";
double dda = 0.0f;
MelEther.NumConv.D4ToDouble(ivalue, 6, ref dda); // D206-D209 倍精度実数
sv += dda.ToString() + "\r\n";
string sd = string.Empty;
MelEther.NumConv.DarToStr(ivalue, 10, ref sd); // D210-D214 文字列 shift_jis
sv += sd + "\r\n";
MelEther.NumConv.DarWToStr(ivalue, 15, ref sd); // D215-D220 文字列 unicode
sv += sd + "\r\n";
textBox2.Text = sv;
}
}
}
3. 購入方法等
- 税抜き価格 ¥35,000.-
- 銀行振り込み確認後、メールにて送付します。
購入、問い合わせ等は下記のお問い合わせよりお願いします。
お問い合わせ
