ADS関連+ JSON

データのやり取りに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テスト関連も後でアップロードされます

エンディング!


 

おすすめ

転載: blog.csdn.net/Ding86341631/article/details/108341387