テクセル

MCプロトコルシリアル通信用DLL


本ソフトウエアは、三菱電機株式会社製PLCにおけるMCプロトコルシリアル通信用DLLです。 PLCのデバイス値の読み込み、書き込みが出来ます。

1. 一般仕様

1.基本仕様

通信手順 MCプロトコル QnA互換4Cフレーム 形式5
伝送速度 1200/2400/4800/9600/14400/19200/38400/57600/115200 bps
伝送データ データ長7または、8ビット パリティ 偶数、奇数またはなし サムチェック有り
対象通信ポート CPUのシリアル通信ポート、シリアルコミュニケーションユニット(RJ71C24、QJ71C24Nなど)
対応.NET .NET Framework4.6 32ビット、64ビット

2.メソッド一覧

2-1.シリアル通信

メソッド名 説明
Open シリアル通信ポートをオープンします。
Close シリアル通信ポートをクローズします。
Initial 伝送シーケンスの初期化を行います。
GetPlcAdd 現在のPLCアクセス先を取得します。(局番、ネットワークNO.、PC番号、要求先ユニットIO番号、自局番号)
SetPlcAdd PLCアクセス先をセットします。(局番、ネットワークNO.、PC番号、要求先ユニットIO番号、自局番号)
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用です。
SetWatchTime PLCからの応答監視時間をセットします。
Version 本DLLのバージョン情報を取得します。
コールバック関数 DevRead, DevWrite, DevReadRex, DevWriteRex の実行結果は、コールバック関数で取得します。

DevReadRex, DevWriteRex のデバイス先頭アドレスは、8桁(10進)です。DevRead, DevWrite は、iQ-R でも使用できます。

情報操作

メソッド名 説明
SetCallBack コールバック関数を登録します。CpuTypeメソッド用です。
CpuType PLCのCPUタイプを取得します。

2-2.数値変換

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-3.共通

メソッド名 説明
Version バージョン情報を取得します。

3.開発、実行環境

本DLL(melSerial.dll)は、.NET用のDLLです。実行には .NET Framework 4.6 が必要です。

2. プログラム例

C# によるプログラム例 PLCは、iQ-Rです。エラー処理は、省略しています。


// ******* melserial プログラム例 *******
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 melSerialSmpl
{
   public partial class Form1 : Form
   {
      MelSerial.melSerial melSeriald;
      int ibitword;     //0:bit 1:word

      public Form1()
      {
         InitializeComponent();
      }

   // form load
      private void Form1_Load(object sender, EventArgs e){

         melSeriald = new MelSerial.melSerial();
         int ir = melSeriald.KeyCodeChk("キーコード");
         if (ir != 0)
            textBox1.Text = "キーコードエラー";
      }

   // open
      private void button1_Click(object sender, EventArgs e){

         MelSerial.Rs232Parat Rs232parad = new MelSerial.Rs232Parat();
         Rs232parad.iComNo = 3;                            // comポートNO.
         Rs232parad.uiBps = MelSerial.BaudRate._BPS_9600;  //通信速度
         Rs232parad.cByteSize = 8;                         //バイト長
         Rs232parad.byParity = MelSerial.PARITY._EVENPARITY;    //偶数パリティ
         Rs232parad.byStopBits = MelSerial.STOPBIT._ONESTOPBIT; //1 ストップビット
         int ir = melSeriald.Open(Rs232parad, this.CallBack);
         textBox1.Text = ir.ToString();
      }

   // close
      private void button2_Click(object sender, EventArgs e){

         melSeriald.Close();
      }

   // デバイス値読み込み ワード
      private void button3_Click(object sender, EventArgs e){

         int ir = melSeriald.DevRead("D", 200, 20);        // D200から20ワード読み込み
         textBox1.Text = ir.ToString();
         ibitword = 1;
      }

   // デバイス値読み込み ビット
      private void button4_Click(object sender, EventArgs e){

         int ir = melSeriald.DevRead("M", 100, 16);        // M100 から 16点読み込み
         textBox1.Text = ir.ToString();
         ibitword = 0;
      }

   // デバイス値書き込み ワード
      private void button5_Click(object sender, EventArgs e){

         Int16[] idata = new Int16[22];
         idata[0] = 123; idata[1] = 456;                   // ワード D300,D301
         int ia = 98000;
         MelSerial.NumConv.DWToD2(ia, ref idata, 2);       // ダブルワード D302,D303
         float fldt = 1.41421356f;
         MelSerial.NumConv.FloatToD2(fldt, ref idata, 4);  // 単精度実数 D304,D305
         double dbdt = 6.02E+23d;
         MelSerial.NumConv.DoubleToD4(dbdt, ref idata, 6); // 倍精度実数 D306-D309
         string sa = "漢字89Yz";
         MelSerial.NumConv.StrToDar(sa, ref idata, 10);    // 文字列 shift_jis D310-D314
         sa = "日本12Ab";
         MelSerial.NumConv.StrToDarW(sa, ref idata, 15);   // 文字列 unicode D315-D321
         int ir = melSeriald.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 = melSeriald.DevWrite("M", 200, idata);   // M200 から 10点書き込み
         textBox1.Text = ir.ToString();
      }

   // call back
      public bool CallBack(MelSerial.RSCONT Content, int iercd, Int16[] iValue, int iComNo){

         if (Content == MelSerial.RSCONT.Error)
            textBox1.Text = "エラー" + iercd.ToString();
         if (Content == MelSerial.RSCONT.TimeOut)
            textBox1.Text = "タイムアウト";
         if (Content == MelSerial.RSCONT.ReadData){
            if (ibitword == 0)
               RecvDataB(iValue);      // ビット
            if (ibitword == 1)
               RecvDataW(iValue);      // ワード
         }
         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;
         MelSerial.NumConv.D2ToDW(ivalue, 2, ref idd2);      // D202,D203 ダブルワード
         sv += idd2.ToString() + "\r\n";
         float fd = 0.0f;
         MelSerial.NumConv.D2ToFloat(ivalue, 4, ref fd);     // D204,D205 単精度実数
         sv += fd.ToString() + "\r\n";
         double dda = 0.0f;
         MelSerial.NumConv.D4ToDouble(ivalue, 6, ref dda);   // D206-D209 倍精度実数
         sv += dda.ToString() + "\r\n";
         string sd = string.Empty;
         MelSerial.NumConv.DarToStr(ivalue, 10, ref sd);     // D210-D214 文字列 shift_jis 
         sv += sd + "\r\n";
         MelSerial.NumConv.DarWToStr(ivalue, 15, ref sd);    // D215-D220 文字列 unicode
         sv += sd + "\r\n";
         textBox2.Text = sv;
      }

   }
}
            

3. 購入方法等

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

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