/// <summary> /// Обновляет, опрашивает состояние и получает данные с терминала /// Тип терминала задается в конструкторе класса переменной _TermType /// </summary> public void Refresh(SPort cPort) { //IDevice cDevice = null; switch (_TermType) { case "IMP01": case "TEM05M": Tem05 cTem05 = new Tem05(); //cDevice.Refresh(cPort); cTem05._TimeDelay = _TimeDelay; cTem05._TimeWait = _TimeWait; cTem05._TermId = _TermId; cTem05.Refresh(cPort); ResData = cTem05.ResData; break; case "SPT961": SPT961 cSPT961 = new SPT961(); cSPT961._TimeDelay = _TimeDelay; cSPT961._TimeWait = _TimeWait; cSPT961._TermId = _TermId; cSPT961.RequestParam = _RequestParam; cSPT961.Refresh(cPort); ResData = cSPT961.ResData; break; default: throw new ArgumentException("Терминала типа '" + _TermType + "' в системе не описано."); break; } }
/// <summary> /// Возвращает строку данных /// </summary> /// <returns></returns> public String getDataString() { string sep = ";"; string sepArray = ""; int intStart; int intStartHead; String strItem; String strData, currVal = ""; /*Это заголовок*/ String strDataHead; String retData, strStatus = "49"; Tem05 cTem05 = new Tem05(); SPT961 cSpt961 = new SPT961(); int Code_D1 = 0; int Code_D2 = 0; string sResVal = ""; String[] arrItem; Config cConf = new Config(); string strTime; arrProtocolElement = cConf.getObjectProtocol(_TermType, _TermProtocolIndex); String strAdd = ""; strTime = ResData.strTime; if (strTime == null) { strTime = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second; } retData = _TermId.ToString() + sep + _RequestParam.ProtocolIndex + sep + strTime; if (_RequestParam.ReportType != null) { sepArray = "="; sep = ","; retData = ""; } //Config.SysObjectProtocol Protokol; try { //strData = ResData.strData; strDataHead = ResData.strHead; String[] arrDataLine = ResData.strData.Split(sepArray.ToCharArray()); foreach (string DataLine in arrDataLine) { strData = DataLine; strItem = ""; foreach (Config.SysObjectProtocolMap Protocol in arrProtocolElement) { /*Если данные*/ if (Protocol.Index > 0) { if (_TermType == "TEM05M") { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); //intStart = Convert.ToInt16(Convert.ToInt32(intStart, 16)) * 2; intStart = intStart * 2; /*if (intStart > 1) * intStart = intStart + 2; */ strItem = strData.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "SPT961") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = Data_Hex_Asc(ref strItem); //sResVal = cSpt961.getConvertHexToString(strItem); //sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "TEM104") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = strItem; } else { sResVal = (GetHexToDouble(strItem).ToString()); } } else { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); intStart = intStart * 2; strItem = strDataHead.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } /* Значения кода для выставления запятой */ if (Protocol.Name == "DR1") // Первый канал { Code_D1 = Convert.ToInt16(sResVal); } if (Protocol.Name == "DR2") // Второй канал { Code_D2 = Convert.ToInt16(sResVal); } if (Protocol.Comma == 1) { sResVal = cTem05.GetStrComma(Code_D1, Protocol.Name, sResVal); } if (Protocol.Comma == 2) { sResVal = cTem05.GetStrComma(Code_D2, Protocol.Name, sResVal); } /*@TODO дописать в общем виде*/ /* ДАнные из заголовока*/ if (Protocol.Name == "DOR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } /* ДАнные из заголовока*/ if (Protocol.Name == "WTR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } currVal = currVal + sep + sResVal; } retData = retData + sep + strStatus + currVal + sepArray; currVal = ""; } } catch (Exception e) { strStatus = "4"; } //return "1;1;21:21:08;49;0;0;0;1;11;0;0;4;41;.22955;1.995;16.5179;667.859;755.027;27.147;434.3;2732.36;97429.3;44310.2;0;84.44;28.86;13.21"; return(retData);//= retData + sep + strStatus + currVal; }
/// <summary> /// Обновляет, опрашивает состояние и получает данные с терминала /// Тип терминала задается в конструкторе класса переменной _TermType /// </summary> public void Refresh(SPort cPort) { //IDevice cDevice = null; switch (_TermType) { case "IMP01": case "TEM05M": Tem05 cTem05 = new Tem05(); //cDevice.Refresh(cPort); cTem05._TimeDelay = _TimeDelay; cTem05._TimeWait = _TimeWait; cTem05._TermId = _TermId; cTem05.Refresh(cPort); ResData = cTem05.ResData; break; case "SPT961": SPT961 cSPT961 = new SPT961(); cSPT961._TimeDelay = _TimeDelay; cSPT961._TimeWait = _TimeWait; cSPT961._TermId = _TermId; cSPT961.RequestParam = _RequestParam; cSPT961.Refresh(cPort); ResData = cSPT961.ResData; break; case "TEM104": TEM104 cTEM104 = new TEM104(); cTEM104._TimeDelay = _TimeDelay; cTEM104._TimeWait = _TimeWait; cTEM104._TermId = _TermId; cTEM104.RequestParam = _RequestParam; cTEM104.Refresh(cPort); ResData = cTEM104.ResData; break; default: throw new ArgumentException("Терминала типа '" + _TermType+"' в системе не описано."); break; } }
/// <summary> /// Возвращает строку данных /// </summary> /// <returns></returns> public String getDataString() { string sep = ";"; string sepArray = ""; int intStart; int intStartHead; String strItem; String strData, currVal = ""; /*Это заголовок*/ String strDataHead; String retData, strStatus = "49"; Tem05 cTem05 = new Tem05(); SPT961 cSpt961 = new SPT961(); int Code_D1 = 0; int Code_D2 = 0; string sResVal = ""; String[] arrItem; Config cConf = new Config(); string strTime; arrProtocolElement = cConf.getObjectProtocol(_TermType, _TermProtocolIndex); String strAdd = ""; strTime = ResData.strTime; if (strTime == null) { strTime = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second; } retData = _TermId.ToString() + sep + _RequestParam.ProtocolIndex + sep + strTime; if (_RequestParam.ReportType != null) { sepArray = "="; sep = ","; retData = ""; } //Config.SysObjectProtocol Protokol; try { //strData = ResData.strData; strDataHead = ResData.strHead; String[] arrDataLine = ResData.strData.Split(sepArray.ToCharArray()); foreach (string DataLine in arrDataLine) { strData = DataLine; strItem = ""; foreach (Config.SysObjectProtocolMap Protocol in arrProtocolElement) { /*Если данные*/ if (Protocol.Index > 0) { if (_TermType == "TEM05M") { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); //intStart = Convert.ToInt16(Convert.ToInt32(intStart, 16)) * 2; intStart = intStart * 2; /*if (intStart > 1) intStart = intStart + 2; */ strItem = strData.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "SPT961") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = Data_Hex_Asc(ref strItem); //sResVal = cSpt961.getConvertHexToString(strItem); //sResVal = (GetHexToDouble(strItem).ToString()); } else if (_TermType == "TEM104") { intStart = Convert.ToInt16(Protocol.Pos); arrItem = strData.Split(';'); strItem = arrItem[intStart]; sResVal = strItem; } else { sResVal = (GetHexToDouble(strItem).ToString()); } } else { intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16)); intStart = intStart * 2; strItem = strDataHead.Substring(intStart, Protocol.Len * 2); strAdd = strAdd + strItem; sResVal = (GetHexToDouble(strItem).ToString()); } /* Значения кода для выставления запятой */ if (Protocol.Name == "DR1") // Первый канал { Code_D1 = Convert.ToInt16(sResVal); } if (Protocol.Name == "DR2") // Второй канал { Code_D2 = Convert.ToInt16(sResVal); } if (Protocol.Comma == 1) { sResVal = cTem05.GetStrComma(Code_D1, Protocol.Name, sResVal); } if (Protocol.Comma == 2) { sResVal = cTem05.GetStrComma(Code_D2, Protocol.Name, sResVal); } /*@TODO дописать в общем виде*/ /* ДАнные из заголовока*/ if (Protocol.Name == "DOR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } /* ДАнные из заголовока*/ if (Protocol.Name == "WTR") { string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2); sResVal = binaryval.Substring(Protocol.Comma + 1, 1); } currVal = currVal + sep + sResVal; } retData = retData + sep + strStatus + currVal + sepArray; currVal = ""; } } catch(Exception e) { strStatus = "4"; } //return "1;1;21:21:08;49;0;0;0;1;11;0;0;4;41;.22955;1.995;16.5179;667.859;755.027;27.147;434.3;2732.36;97429.3;44310.2;0;84.44;28.86;13.21"; return retData ;//= retData + sep + strStatus + currVal; }