/// <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); }
/// <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); }
/// <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; }
/// <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); }
/// <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)); }