データのやり取りにADSを使用する場合、新しい変数がある場合は、基になるPLCと上位のコンピューター制御プログラムを同時に変更する必要があるため、比較的面倒です。開発の便宜上、データのやり取りにはJson形式を選択できます。
JSONの利点
- JSONはプレーンテキストです。
- JSONは自己記述的で読みやすいものです。
- JSONは階層構造になっています(値に値があります)。
- JSONデータは、AJAX(非同期JavaScriptおよびXML)を使用して送信できます。
実際のアプリケーションでは、ajaxとjsonを使用してタスクを完了することがよくあります。これは、XMLよりもはるかに簡単で高速です。XMLを使用する場合は、XMLドキュメントを読み取り、XML DOMを使用してドキュメントを走査して値を読み取り、変数に格納する必要があります。に。JSONでは、JSON文字列を読み取るだけで済みます。
JSONライブラリのダウンロード
公式ウェブサイト:http
:
//json.codeplex.com/ ソースアドレス:https://github.com/JamesNK/Newtonsoft.Json Newtonsoft.Json.dllダウンロード:https://github.com/JamesNK/Newtonsoft.Json/releases
適切な.net環境を見つけ、プロジェクトで参照します
使用中に渡されるJSONデータのキー値の名前はPascalまたはCamelの命名法であることに注意してください
でる
public class ADSVariable : INotifyPropertyChanged
{
//使用了INotifyPropertyChanges interface接口
//当值发生改变时,触发
#region 字段
private int handle; //句柄
private string adsVarName; //变量名
private string name;
private string typeName;
private Type type; //数据类型
private string varValue; //值
private string description;
#endregion
#region 事件
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region 属性
public int Handle
{
get{return handle;}
set{handle = value;}
}
*********************************
AdsVarName
Name
TypeName
Type
Description
*********************************
public string TypeName
{
get{ return typeName;}
set{
try{
typeName = value;
this.type = Type.GetType(typeName, false, true);
}catch(Exception ex){
throw ex;
}
}
}
public string VarValue
{
get{return varValue; }
set{
varValue = value;
NotifyPropertyChanged();
}
}
#endregion
#region 构造函数
/// <summary>
/// <param name="handle"></param>
/// <param name="adsVarName"></param>
/// <param name="name"></param>
/// <param name="typeName"></param>
/// <param name="varValue"></param>
/// <param name="description"></param>
public ADSVariable(int handle, string adsVarName, string name, string typeName, string varValue,string description)
{
this.Handle = handle;
this.AdsVarName = adsVarName;
this.Name = name;
this.TypeName = typeName;
this.VarValue = varValue;
this.Description = description;
}
#endregion
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
ADSの共通インターフェース
interface IADSAccessable
{
/// <summary>
/// 注册变量对象列表
/// </summary>
List<ADSVariable> LstADSVariable { get; set; }
/// <summary>
/// 通过配置文件导入注册变量对象列表
/// </summary>
/// <param name="filepath"></param>
void RegeditADSVeriableByfile(string filepath);
/// <summary>
/// 清空LstADSVariable
/// </summary>
void ResetADSVeriable();
/// <summary>
/// 链接控制器
/// </summary>
/// <param name="netID"></param>
/// <param name="srvPort"></param>
void Connect(string netID, int srvPort);
/// <summary>
/// 通过同步方式读取注册在ADSHelper中的所有变量值,更新至字段LstADSVariable中
/// </summary>
void ReadAllADSVariables();
/// <summary>
/// 通过变量名称字符串从ADS设备中以同步方式读取变量值,存入object类型对象中。
/// </summary>
/// <param name="varName">变量名称</param>
/// <returns>ADSVariable对象</returns>
ADSVariable ReadAnyByVarName(string varName);
/// <summary>
/// 通过变量名写入变量值
/// </summary>
/// <typeparam name="T">变量类型</typeparam>
/// <param name="name">变量名称</param>
/// <param name="value">设定值</param>
void WriteAnyByVarName<T>(string name, T value);
//void WriteAnyByVarName(string name, string value);
/// <summary>
/// 断开与ADS设备的通讯连接
/// </summary>
void Disconnect();
}
ADS関連のインターフェースの実装
後でアップロードします
UTテスト関連も後でアップロードされます
エンディング!