テクセル

MCプロトコルイーサネット通信用DLL


本ソフトウエアは、三菱電機(株)製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. 購入方法等

  1. 税抜き価格 ¥35,000.-
  2. 銀行振り込み確認後、メールにて送付します。

購入、問い合わせ等は下記のお問い合わせよりお願いします。
お問い合わせ