Beispiel #1
0
        /// <summary>
        /// 设置通讯协议定义
        /// </summary>
        /// <param name="tpl">协议名称</param>
        /// <param name="cmd">指令名称</param>
        /// <param name="tagdevice">协议设备定义</param>
        /// <param name="taginput">协议输入参数定义</param>
        /// <param name="tagoutput">协议输出参数定义</param>
        /// <returns>是否设置成功</returns>
        public bool setTpl(string tpl, string cmd, string tagdevice, string taginput, string tagoutput)
        {
            if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(cmd) || string.IsNullOrEmpty(tagdevice) ||
                string.IsNullOrEmpty(taginput) || string.IsNullOrEmpty(tagoutput))
            {
                return(false);
            }
            PtlParam ptlParam = new PtlParam();

            ptlParam.pmdevice = tagdevice;
            ptlParam.pminput  = taginput;
            ptlParam.pmout    = tagoutput;
            if (ptlParam.pmdevice.StartsWith(";"))
            {
                ptlParam.pmdevice = ptlParam.pmdevice.Substring(1);
            }
            if (ptlParam.pminput.StartsWith(";"))
            {
                ptlParam.pminput = ptlParam.pminput.Substring(1);
            }
            if (ptlParam.pmout.StartsWith(";"))
            {
                ptlParam.pmout = ptlParam.pmout.Substring(1);
            }
            if (ptlParam.pmdevice.EndsWith(";"))
            {
                ptlParam.pmdevice = ptlParam.pmdevice.Substring(0, ptlParam.pmdevice.Length - 1);
            }
            if (ptlParam.pminput.EndsWith(";"))
            {
                ptlParam.pminput = ptlParam.pminput.Substring(0, ptlParam.pminput.Length - 1);
            }
            if (ptlParam.pmout.EndsWith(";"))
            {
                ptlParam.pmout = ptlParam.pmout.Substring(0, ptlParam.pmout.Length - 1);
            }
            ptlParam.pmdevice = ptlParam.pmdevice.Replace(";;", ";");
            ptlParam.pminput  = ptlParam.pminput.Replace(";;", ";");
            ptlParam.pmout    = ptlParam.pmout.Replace(";;", ";");
            if (PTLParam.ContainsKey(tpl + ":" + cmd))
            {
                PTLParam[tpl + ":" + cmd] = ptlParam;
            }
            else
            {
                PTLParam.Add(tpl + ":" + cmd, ptlParam);
            }
            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// 设置设备指令,使用dvID做指令ID
        /// </summary>
        /// <param name="tpl">协议类型</param>
        /// <param name="cmd">指令</param>
        /// <param name="tagdata">数据参数,使用tag标记格式</param>
        public bool setCommand(string tpl, string cmd, string tagdata)
        {
            //if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(cmd) || CmdState.Response == this.CheckState())
            //    return false;

            PtlParam ptlParam = new PtlParam();
            if (PTLParam.ContainsKey(tpl + ":" + cmd))
                ptlParam = PTLParam[tpl + ":" + cmd];
            else
            {
                Estar.Common.Tools.NameObjectList ps = new Estar.Common.Tools.NameObjectList();
                ps["tpl"] = tpl;
                ps["cmd"] = cmd;
                if (null == this.query)
                    return false;
                DataTable tab = this.query.getTable(dbItem, ps);
                if (null == tab || tab.Rows.Count < 1)
                    return false;
                //从数据库中取出的参数转换成tag格式参数
                DataColumnCollection dbcols = tab.Columns;
                if (!dbcols.Contains("type") || !dbcols.Contains("pms"))
                    return false;
                foreach (DataRow dr in tab.Rows)
                {
                    if (DBNull.Value == dr["type"])
                        continue;
                    string pmtype = Convert.ToString(dr["type"]);
                    switch (pmtype)
                    {
                        case "协议":
                            ptlParam.pmdevice = Convert.ToString(dr["pms"]);
                            break;
                        case "Input":
                            ptlParam.pminput += Convert.ToString(dr["pms"]) + ";";
                            break;
                        case "Output":
                            ptlParam.pmout += Convert.ToString(dr["pms"]) + ";";
                            break;
                    }
                }
                if (ptlParam.pmdevice.EndsWith(";"))
                    ptlParam.pmdevice = ptlParam.pmdevice.Substring(0, ptlParam.pmdevice.Length - 1);
                if (string.IsNullOrEmpty(ptlParam.pmdevice)) return false;
                if (ptlParam.pminput.EndsWith(";"))
                    ptlParam.pminput = ptlParam.pminput.Substring(0, ptlParam.pminput.Length - 1);
                if (ptlParam.pmout.EndsWith(";"))
                    ptlParam.pmout = ptlParam.pmout.Substring(0, ptlParam.pmout.Length - 1);
                ptlParam.pmdevice = ptlParam.pmdevice.Replace(";;", ";");
                ptlParam.pminput = ptlParam.pminput.Replace(";;", ";");
                ptlParam.pmout = ptlParam.pmout.Replace(";;", ";");
                if (!PTLParam.ContainsKey(tpl + ":" + cmd))
                    try { PTLParam.Add(tpl + ":" + cmd, ptlParam); }
                    catch { }
            }
            this.inputParam = ptlParam.pminput;
            this.outterParam = ptlParam.pmout;
            this.responseFormat = "";
            //根据协议组成通讯指令
            string pmdevice = basefun.setvaltag(ptlParam.pmdevice, "devid", basefun.valtag(tagdata, "设备地址"));
            dvParam.Command = "";
            string cmdstr = "";
            if (string.IsNullOrEmpty(tagdata))
                dvParam = this.setDevObj(pmdevice);
            else
                cmdstr = comparse.CommandString(pmdevice, ptlParam.pminput, tagdata, ref dvParam);
            IsAscii = dvParam.IsAsc;
            Exchanges = dvParam.Exchanges;
            if (string.IsNullOrEmpty(dvParam.Buss))
                dvParam.Buss = tpl;
            if (string.IsNullOrEmpty(dvParam.Command))
                dvParam.Command = cmd;
            //没有数据参数,则只获取格式参数,便于解析结果
            if (string.IsNullOrEmpty(tagdata))
                return true;
            //转义成字节,使用""""代替原来帧头帧尾的处理
            if (dvParam.IsAsc)
            {
                if (cmdstr.StartsWith("02") && cmdstr.EndsWith("03"))
                    cmdstr = "" + cmdstr.Substring(2, cmdstr.Length - 4) + "";

                return this.setCommand(cmdstr);
            }
            return this.setCommand(cmdstr, true);
        }
Beispiel #3
0
 /// <summary>
 /// 设置通讯协议定义
 /// </summary>
 /// <param name="tpl">协议名称</param>
 /// <param name="cmd">指令名称</param>
 /// <param name="tagdevice">协议设备定义</param>
 /// <param name="taginput">协议输入参数定义</param>
 /// <param name="tagoutput">协议输出参数定义</param>
 /// <returns>是否设置成功</returns>
 public bool setTpl(string tpl, string cmd, string tagdevice, string taginput, string tagoutput)
 {
     if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(cmd) || string.IsNullOrEmpty(tagdevice)
         || string.IsNullOrEmpty(taginput) || string.IsNullOrEmpty(tagoutput))
         return false;
     PtlParam ptlParam = new PtlParam();
     ptlParam.pmdevice = tagdevice;
     ptlParam.pminput = taginput;
     ptlParam.pmout = tagoutput;
     if (ptlParam.pmdevice.StartsWith(";"))
         ptlParam.pmdevice = ptlParam.pmdevice.Substring(1);
     if (ptlParam.pminput.StartsWith(";"))
         ptlParam.pminput = ptlParam.pminput.Substring(1);
     if (ptlParam.pmout.StartsWith(";"))
         ptlParam.pmout = ptlParam.pmout.Substring(1);
     if (ptlParam.pmdevice.EndsWith(";"))
         ptlParam.pmdevice = ptlParam.pmdevice.Substring(0, ptlParam.pmdevice.Length - 1);
     if (ptlParam.pminput.EndsWith(";"))
         ptlParam.pminput = ptlParam.pminput.Substring(0, ptlParam.pminput.Length - 1);
     if (ptlParam.pmout.EndsWith(";"))
         ptlParam.pmout = ptlParam.pmout.Substring(0, ptlParam.pmout.Length - 1);
     ptlParam.pmdevice = ptlParam.pmdevice.Replace(";;", ";");
     ptlParam.pminput = ptlParam.pminput.Replace(";;", ";");
     ptlParam.pmout = ptlParam.pmout.Replace(";;", ";");
     if (PTLParam.ContainsKey(tpl + ":" + cmd))
         PTLParam[tpl + ":" + cmd] = ptlParam;
     else
         PTLParam.Add(tpl + ":" + cmd, ptlParam);
     return true;
 }
Beispiel #4
0
        /// <summary>
        /// �����豸ָ��,ʹ��dvID��ָ��ID
        /// </summary>
        /// <param name="tpl">������</param>
        /// <param name="cmd">ָ��</param>
        /// <param name="tagdata">���ݲ���,ʹ��tag��Ǹ�ʽ</param>
        public bool setCommand(string tpl, string cmd, string tagdata)
        {
            if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(cmd) || CmdState.Response == this.CheckState())
                return false;

            PtlParam ptlParam = new PtlParam();
            if (PTLParam.ContainsKey(tpl + ":" + cmd))
                ptlParam = PTLParam[tpl + ":" + cmd];
            else
            {
                Estar.Common.Tools.NameObjectList ps = new Estar.Common.Tools.NameObjectList();
                ps["tpl"] = tpl;
                ps["cmd"] = cmd;
                if (null == this.query)
                    return false;
                DataTable tab = this.query.getTable(dbItem, ps);
                if (null == tab || tab.Rows.Count < 1)
                    return false;
                //�����ݿ���ȡ���IJ���ת����tag��ʽ����
                DataColumnCollection dbcols = tab.Columns;
                if (!dbcols.Contains("type") || !dbcols.Contains("pms"))
                    return false;
                foreach (DataRow dr in tab.Rows)
                {
                    if (DBNull.Value == dr["type"])
                        continue;
                    string pmtype = Convert.ToString(dr["type"]);
                    switch (pmtype)
                    {
                        case "��":
                            ptlParam.pmdevice = Convert.ToString(dr["pms"]);
                            break;
                        case "Input":
                            ptlParam.pminput += Convert.ToString(dr["pms"]) + ";";
                            break;
                        case "Output":
                            ptlParam.pmout += Convert.ToString(dr["pms"]) + ";";
                            break;
                    }
                }
                if (ptlParam.pmdevice.EndsWith(";"))
                    ptlParam.pmdevice = ptlParam.pmdevice.Substring(0, ptlParam.pmdevice.Length - 1);
                if (string.IsNullOrEmpty(ptlParam.pmdevice)) return false;
                if (ptlParam.pminput.EndsWith(";"))
                    ptlParam.pminput = ptlParam.pminput.Substring(0, ptlParam.pminput.Length - 1);
                if (ptlParam.pmout.EndsWith(";"))
                    ptlParam.pmout = ptlParam.pmout.Substring(0, ptlParam.pmout.Length - 1);
                ptlParam.pmdevice = ptlParam.pmdevice.Replace(";;", ";");
                ptlParam.pminput = ptlParam.pminput.Replace(";;", ";");
                ptlParam.pmout = ptlParam.pmout.Replace(";;", ";");
                if (!PTLParam.ContainsKey(tpl + ":" + cmd))
                    PTLParam.Add(tpl + ":" + cmd, ptlParam);
            }
            this.inputParam = ptlParam.pminput;
            this.outterParam = ptlParam.pmout;
            this.responseFormat = "";
            //����Э�����ͨѶָ��
            string pmdevice = basefun.setvaltag(ptlParam.pmdevice, "devid", basefun.valtag(tagdata, "�豸��ַ"));
            dvParam.Command = "";
            string cmdstr = "";
            if (string.IsNullOrEmpty(tagdata))
                dvParam = this.setDevObj(pmdevice);
            else
                cmdstr = comparse.CommandString(pmdevice, ptlParam.pminput, tagdata, ref dvParam);
            IsAscii = dvParam.IsAsc;
            Exchanges = dvParam.Exchanges;
            if (string.IsNullOrEmpty(dvParam.Buss))
                dvParam.Buss = tpl;
            if (string.IsNullOrEmpty(dvParam.Command))
                dvParam.Command = cmd;
            //û�����ݲ���,��ֻ��ȡ��ʽ����,���ڽ������
            if (string.IsNullOrEmpty(tagdata))
                return true;
            //ת����ֽ�,ʹ��""""����ԭ��֡ͷ֡β�Ĵ���
            if (dvParam.IsAsc)
            {
                if (cmdstr.StartsWith("02") && cmdstr.EndsWith("03"))
                    cmdstr = "" + cmdstr.Substring(2, cmdstr.Length - 4) + "";
                return this.setCommand(cmdstr);
            }
            return this.setCommand(cmdstr, true);
        }
Beispiel #5
0
        /// <summary>
        /// 设置设备指令,使用dvID做指令ID
        /// </summary>
        /// <param name="tpl">协议类型</param>
        /// <param name="cmd">指令</param>
        /// <param name="tagdata">数据参数,使用tag标记格式</param>
        public bool setCommand(string tpl, string cmd, string tagdata)
        {
            //if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(cmd) || CmdState.Response == this.CheckState())
            //    return false;

            PtlParam ptlParam = new PtlParam();

            if (PTLParam.ContainsKey(tpl + ":" + cmd))
            {
                ptlParam = PTLParam[tpl + ":" + cmd];
            }
            else
            {
                Estar.Common.Tools.NameObjectList ps = new Estar.Common.Tools.NameObjectList();
                ps["tpl"] = tpl;
                ps["cmd"] = cmd;
                if (null == this.query)
                {
                    return(false);
                }
                DataTable tab = this.query.getTable(dbItem, ps);
                if (null == tab || tab.Rows.Count < 1)
                {
                    return(false);
                }
                //从数据库中取出的参数转换成tag格式参数
                DataColumnCollection dbcols = tab.Columns;
                if (!dbcols.Contains("type") || !dbcols.Contains("pms"))
                {
                    return(false);
                }
                foreach (DataRow dr in tab.Rows)
                {
                    if (DBNull.Value == dr["type"])
                    {
                        continue;
                    }
                    string pmtype = Convert.ToString(dr["type"]);
                    switch (pmtype)
                    {
                    case "协议":
                        ptlParam.pmdevice = Convert.ToString(dr["pms"]);
                        break;

                    case "Input":
                        ptlParam.pminput += Convert.ToString(dr["pms"]) + ";";
                        break;

                    case "Output":
                        ptlParam.pmout += Convert.ToString(dr["pms"]) + ";";
                        break;
                    }
                }
                if (ptlParam.pmdevice.EndsWith(";"))
                {
                    ptlParam.pmdevice = ptlParam.pmdevice.Substring(0, ptlParam.pmdevice.Length - 1);
                }
                if (string.IsNullOrEmpty(ptlParam.pmdevice))
                {
                    return(false);
                }
                if (ptlParam.pminput.EndsWith(";"))
                {
                    ptlParam.pminput = ptlParam.pminput.Substring(0, ptlParam.pminput.Length - 1);
                }
                if (ptlParam.pmout.EndsWith(";"))
                {
                    ptlParam.pmout = ptlParam.pmout.Substring(0, ptlParam.pmout.Length - 1);
                }
                ptlParam.pmdevice = ptlParam.pmdevice.Replace(";;", ";");
                ptlParam.pminput  = ptlParam.pminput.Replace(";;", ";");
                ptlParam.pmout    = ptlParam.pmout.Replace(";;", ";");
                if (!PTLParam.ContainsKey(tpl + ":" + cmd))
                {
                    try { PTLParam.Add(tpl + ":" + cmd, ptlParam); }
                    catch { }
                }
            }
            this.inputParam     = ptlParam.pminput;
            this.outterParam    = ptlParam.pmout;
            this.responseFormat = "";
            //根据协议组成通讯指令
            string pmdevice = basefun.setvaltag(ptlParam.pmdevice, "devid", basefun.valtag(tagdata, "设备地址"));

            dvParam.Command = "";
            string cmdstr = "";

            if (string.IsNullOrEmpty(tagdata))
            {
                dvParam = this.setDevObj(pmdevice);
            }
            else
            {
                cmdstr = comparse.CommandString(pmdevice, ptlParam.pminput, tagdata, ref dvParam);
            }
            IsAscii   = dvParam.IsAsc;
            Exchanges = dvParam.Exchanges;
            if (string.IsNullOrEmpty(dvParam.Buss))
            {
                dvParam.Buss = tpl;
            }
            if (string.IsNullOrEmpty(dvParam.Command))
            {
                dvParam.Command = cmd;
            }
            //没有数据参数,则只获取格式参数,便于解析结果
            if (string.IsNullOrEmpty(tagdata))
            {
                return(true);
            }
            //转义成字节,使用""""代替原来帧头帧尾的处理
            if (dvParam.IsAsc)
            {
                if (cmdstr.StartsWith("02") && cmdstr.EndsWith("03"))
                {
                    cmdstr = "" + cmdstr.Substring(2, cmdstr.Length - 4) + "";
                }

                return(this.setCommand(cmdstr));
            }
            return(this.setCommand(cmdstr, true));
        }