テクセル

JoyWatcher サーバ通信用 DLL jwComDNet.dll


jwComDNet.dll は、joyWatcher のタグ値を読み書きするDLLです。

□ 一般仕様

  • 対応.NET.NET Framework4.5 32ビット
  • 対応する JoyWatcher のバージョンバージョン 9.0 以降の JoyWatcher

本DLLは、.NET 用の DLL で C# 等の言語での開発を想定しています。また、 本DLLは、JoyWatcher の JoyWaApi.dll をコール(使用)しています。

メソッド一覧

メソッド名 説明
open JoyWatcher のネットワークに接続します。
close JoyWatcher との接続を切断します。
closeForce JoyWatcher との接続を強制的に切断します。
getTagId タグの登録を行い、タグのIDを取得します。
jwRead タグの現在値を読み込みます。※1
jwRead1 1タグの現在値を読み込みます。※1
jwRead_LS タグの現在値を読み込みます。文字列の場合、16文字(半角)以上の長さに対応します。
jwWrite 指定されたタグに値を書込みます。※1
jwWrite1 指定された1タグに値を書込みます。※1
jwWrite_LS 指定されたタグに値を書込みます。文字列の場合、16文字(半角)以上の長さに対応します。
jwAsyncSelect 値変化の検出を行いたいタグとコールバック関数を登録します。
jwRemoveAsync 値変化の検出用タグの登録を解除します。

※1 jwRead、jwRead1、jwWrite、jwWrite1 で文字列を扱う場合の文字長は最大16文字(半角)です。
PLC側の文字コードは、シフトJISです。

□ プログラム例

以下に C# でのプログラム例を示します。joyWatcher が三菱電機(株) PLC iQ-R と通信を行った場合です。
なお、ここでは joyWatcher サーバ設計のタグ登録の説明は省略とします。また、プログラムのエラー処理は省略しています。


// jwComDNet.dll C# 例
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 jwComDNCSSmpl
{
   public partial class Form1 : Form
   {
      jwComDNet.JwCom jwComDNetd;
      int[] itag;

      public Form1()
      {
         InitializeComponent();
      }

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

         jwComDNetd = new jwComDNet.JwCom();
      }

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

         int ir = jwComDNetd.open();
         if (ir == 0)
            textBox1.Text = "接続失敗";
         else
            textBox1.Text = "接続成功";
      }

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

         jwComDNetd.close();
         textBox1.Text = "切断";
      }

   // tag登録 id取得
      private void button3_Click(object sender, EventArgs e){

         string[] stag = new string[12];
         stag[0] = "RCPU$WORD.D0$VALUE";    // word
         stag[1] = "RCPU$WORD.D1$VALUE";
         stag[2] = "RCPU$DWORD.D20$VALUE";  // dword
         stag[3] = "RCPU$DWORD.D22$VALUE";
         stag[4] = "RCPU$FLOAT.D40$VALUE";  // float
         stag[5] = "RCPU$FLOAT.D42$VALUE";
         stag[6] = "RCPU$DOUBLE.D50$VALUE"; // double
         stag[7] = "RCPU$DOUBLE.D54$VALUE";
         stag[8] = "RCPU$STR.D100$VALUE";   // string
         stag[9] = "RCPU$STR.D120$VALUE";
         stag[10] = "RCPU$MDEV.M0$VALUE";   // bool
         stag[11] = "RCPU$MDEV.M1$VALUE";
         int ir = jwComDNetd.getTagId(stag, ref itag);     // tag登録 id取得
         if (ir != 0)
            textBox1.Text = "タグ登録失敗";
         else{
            int[] icbtag = new int[6];
            icbtag[0] = itag[0];
            icbtag[1] = itag[2];
            icbtag[2] = itag[4];
            icbtag[3] = itag[6];
            icbtag[4] = itag[8];
            icbtag[5] = itag[10];
            int ik = jwComDNetd.jwAsyncSelect(1, icbtag, this.JwCallBack); // コールバックタグ登録
            if (ik == 0)
               textBox1.Text = "コールバック登録失敗";
         }
      }

   // tagの現在値読み込み
      private void button5_Click(object sender, EventArgs e){

         object[] obv = new object[12];
         int ir = jwComDNetd.jwRead_LS(itag, ref obv);
         if (ir == 0){
            int il = itag.Length;
            string sv = string.Empty;
            for (int ia = 0; ia < il; ia++)
               sv += obv[ia].ToString() + ", ";
            textBox2.Text = sv;
         }
         else
            textBox1.Text = "読み込みエラー " + ir.ToString();
      }

   // 1タグの現在値読み込み
      private void button6_Click(object sender, EventArgs e){

         object obv = jwComDNetd.jwRead1(itag[4]);
         if (obv == null)
            textBox1.Text = "読み込みエラー";
         else
            textBox2.Text = obv.ToString();
      }

   // タグ値書き込み
      private void button7_Click(object sender, EventArgs e){

         int[] iwtag = new int[6];     // 書き込みデータ用タグID
         iwtag[0] = itag[1];
         iwtag[1] = itag[3];
         iwtag[2] = itag[5];
         iwtag[3] = itag[7];
         iwtag[4] = itag[9];
         iwtag[5] = itag[11];
         object[] obv = new object[6];      // 書き込みデータ
         obv[0] = 128;
         obv[1] = 1048576;
         obv[2] = 2.2360679;
         obv[3] = 6.0E+23;
         obv[4] = "漢字ひらがなカタカナカタカナ0123ABCxyz";
         obv[5] = true;
         int ir = jwComDNetd.jwWrite_LS(iwtag, obv);
         if (ir != 0)
            textBox1.Text = "書き込み失敗";
      }

   // 1タグ値書き込み
      private void button8_Click(object sender, EventArgs e){

         int ir = jwComDNetd.jwWrite1(itag[5], 7893.265);
         if (ir != 0)
            textBox1.Text = "書き込みエラー";
      }

   // jw callback
      public void JwCallBack(int isyu, int[] itag, bool[] bchange, object[] obval){

         int ik = bchange.Length; bool bisinf = false;
         for(int ia = 0; ia < ik; ia++){    // jw切断検出
            if (bchange[ia] == true){
               if (obval[ia].GetType().Equals(typeof(string))){
                  if (obval[ia] == null){
                     bisinf = true;
                     break;
                  }
               }
               else if (double.IsInfinity((double)obval[ia])){   // ∞ ?
                  bisinf = true;
                  break;
               }
            }
         }
         if (bisinf == true){
            textBox1.Text = "jwサーバ切断";
            return;
         }
         string sv = string.Empty;
         for (int ia = 0; ia < ik; ia++) {
            if (bchange[ia] == true)   // タグ値変化あり?
               sv += "(" + ia.ToString() + ")" + obval[ia].ToString();
         }
         textBox3.Text = sv;
      }
   }
}
      

callbackは、タグ値が変化した時に呼ばれます。また、JoyWatcherサーバとの通信が切断されるとタグ値が無限大となります。


jwComDNet.dll の価格、内容等に関する問い合わせは下記のお問い合わせよりお願いします。
お問い合わせ
計測制御監視システム
PowerShellでの使用例 PowerShellでJoyWatcherのタグ値を読み書き

JoyWatcher は、東京ガス(株)の製品です。