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 は、東京ガス(株)の製品です。
