/// <summary> /// ����ʽ�������� /// </summary> /// <param name="sdate"></param> /// <param name="Format"></param> /// <param name="Formats"></param> /// <returns></returns> public string GetFormatDateOf16(string sdate, string Format, pmObj pmobj) { string s = ""; if (sdate == "") return ""; DateTime _date; try { _date = Convert.ToDateTime(sdate); } catch (Exception ex) { return ""; } switch (Format) { case "yyyyMMddhhmmss": case "yyMMddhhmmss": case "yyyyMMdd": Format = Format.Replace("hh", "HH"); //��Ϊ24���� s = _date.ToString(Format); if (pmobj.Formats.IndexOf("#") > -1) { int n = 0; string[] srcformat = sdate.Split('-'); string[] dstformat = pmobj.Formats.Split('#'); string sv = ""; //��ÿ������Ԫ��תΪ2���� for (int m = 0; m < srcformat.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(srcformat[m]), 2); s2 = ComplementingBits(s2, basefun.toIntval(dstformat[m]), true, true); sv = sv + s2; } sv = ComplementingBits(sv, pmobj.Len, true, true); s = this.sVal2To16(sv, pmobj.Len / 8); } else s = String10To16(s); break; case "yyMMdd": s = _date.ToString(Format); if (pmobj.Formats.IndexOf("#") > -1) { int n = 0; string[] srcformat = sdate.Split('-'); string[] dstformat = pmobj.Formats.Split('#'); string sv = ""; if (srcformat[0].Length > 2) srcformat[0] = srcformat[0].Substring(2, 2); //��ÿ������Ԫ��תΪ2���� for (int m = 0; m < srcformat.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(srcformat[m]), 2); s2 = ComplementingBits(s2, basefun.toIntval(dstformat[m]), true, true); sv = sv + s2; } sv = ComplementingBits(sv, pmobj.Len, true, true); s = this.sVal2To16(sv, pmobj.Len / 8); } else s = String10To16(s); break; case "hhmmss": case "hhmm": //string y = _date.Year.ToString().Substring(2); //string m = _date.Month.ToString(); //string d = _date.Day.ToString(); //string hour = _date.Hour.ToString(); //string min = _date.Minute.ToString(); //string sec = _date.Second.ToString(); Format = Format.Replace("hh", "HH"); //��Ϊ24���� if (pmobj.Formats.IndexOf("#") > -1) { int n = 0; string[] srcformat = sdate.Split(':'); string[] dstformat = pmobj.Formats.Split('#'); string sv = ""; if (pmobj.Len == 16 && dstformat[2] == "5" && basefun.toIntval(srcformat[2]) > 29) srcformat[2] = "29"; //��ÿ������Ԫ��תΪ2���� for (int m = 0; m < srcformat.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(srcformat[m]), 2); s2 = ComplementingBits(s2, basefun.toIntval(dstformat[m]), true, true); sv = sv + s2; } sv = ComplementingBits(sv, pmobj.Len, true, true); s = this.sVal2To16(sv, pmobj.Len / 8); } else s = String10To16(s); break; default: break; } return s; }
/// <summary> /// �����豸�����������������ͨѶ�����ַ��� /// </summary> /// <param name="devpms">�豸�������ϼ���</param> /// <param name="cmdpms">ָ��������ϼ���</param> /// <returns>ͨѶ�ַ���</returns> public string CommandString(string devpms, string cmdpms, string datapms, ref devObj devobj) { //�����豸���� string[] datapmss = datapms.Split(','); devobj = setDevObj(devpms); string strpm = ""; string[] arrpm = cmdpms.Split(';'); string str = ""; int ilength = 0; pmObj pmXorObj = new pmObj(); for (int i = 0; i < arrpm.Length; i++) { string[] arr = arrpm[i].Split(','); NameObjectList lst = NameValueTag(arrpm[i]); pmObj pmobj = new pmObj(); pmobj.Name = getVarNameByHmStr(arr[0]); pmobj.Len = toIntval(valtag(arrpm[i], "{len}")); pmobj.DataType = valtag(arrpm[i], "{datatype}"); pmobj.Format = valtag(arrpm[i], "{format}"); if (pmobj.Format.StartsWith("��")) pmobj.Format = pmobj.Format.Substring(1); pmobj.Formats = valtag(arrpm[i], "{formats}"); pmobj.Scale = toFloatValue(valtag(arrpm[i], "{scale}")) == 0 ? 1 : toFloatValue(valtag(arrpm[i], "{scale}")); //pmobj.Scale = toIntval(valtag(arrpm[i], "{scale}")) == 0 ? 1 : toIntval(valtag(arrpm[i], "{scale}")); pmobj.Add = toIntval(valtag(arrpm[i], "{add}")); pmobj.SubItems = valtag(arrpm[i], "{subitems}"); pmobj.Value = lst.AllStringValues[0].ToLower(); string strlh = valtag(arrpm[i], "{lh}"); if (strlh == "") pmobj.LH = devobj.LH; else { if (strlh == "0") pmobj.LH = false; else pmobj.LH = true; } if (lst.Keys[0] == "{�豸��ַ}") { if (pmobj.DataType == "word") str = str + exchangeLH(devobj.ID, pmobj.LH); else str = str + exchangeLH(sVal10To16(devobj.ID, pmobj.Len / 8), pmobj.LH); continue; } string svalue = pmobj.Value; //ֵ ilength = basefun.toIntval(lst.AllStringValues[1].ToLower()); //λ�� string datetype = lst.AllStringValues[2].ToLower(); //�������� string format = lst.AllStringValues[3]; //��ʽ //int icale = basefun.toIntval(lst.AllStringValues[5].ToLower()); //�������� //if (icale == 0) icale = 1; switch (datetype) { case "string": if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); long _iv = basefun.toIntval(svalue); svalue = this.sVal10To16(_iv.ToString()); break; case "asc": if (pmobj.Value == "" || pmobj.Value == "?") svalue = (basefun.valtag(datapms, pmobj.Name)).Trim(); svalue = AscToCharactor(svalue); int _lenerr = (pmobj.Len / 8 - svalue.Length / 2); if (_lenerr % 2 == 0) { string strsign = ""; for (int ib = 0; ib < _lenerr; ib++) { strsign = strsign + "20"; } svalue = strsign + svalue; } break; case "asc2": if (pmobj.Value == "" || pmobj.Value == "?") svalue = (basefun.valtag(datapms, pmobj.Name)).Trim(); svalue = AscToCharactor(svalue); _lenerr = (pmobj.Len / 8 - svalue.Length / 2); if (_lenerr % 2 == 0) { string strsign = ""; for (int ib = 0; ib < _lenerr; ib++) { strsign = strsign + "20"; } svalue = strsign + svalue; } if (svalue.Length > 16) svalue = svalue.Substring(0, 16); break; case "int": case "long": case "integer": if (pmobj.SubItems != "") { string[] subs = pmobj.SubItems.Split('+'); int isubs = 0; string _sbit = ""; for (int m = 0; m < subs.Length; m++) { string[] asubs = subs[m].Split('='); string[] asubpms = asubs[1].Split('#'); string subValue = asubpms[0]; if (subValue == "" || subValue == "?") subValue = basefun.valtag(datapms, asubs[0]); if (string.IsNullOrEmpty(subValue)) subValue = "0"; int iSublen = basefun.toIntval(asubpms[1]); string subDataType = asubpms[2]; string subFormat = asubpms[3]; string subScale = asubpms[4]; switch (subDataType.ToLower()) { case "double": //תΪ������ if (subFormat == "") subFormat = "{0:.00}"; if (subFormat.IndexOf("{") > -1) { subValue = string.Format(subFormat, Convert.ToDouble(subValue) * pmobj.Scale); } else subValue = string.Format("{" + subFormat + "}", Convert.ToDouble(subValue) * pmobj.Scale); subValue = basefun.toIntval(subValue).ToString(); subValue = sVal10To2(subValue, iSublen); break; case "integer": case "int": subValue = sVal10To2(subValue, iSublen); break; default: subValue = subValue; break; } //rtns = basefun.setvaltag(rtns, asubs[0], subValue); _sbit = _sbit + subValue; } svalue = this.sVal10To16(Convert.ToInt32(_sbit, 2).ToString()); } else { if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); if (string.IsNullOrEmpty(svalue)) svalue = "0"; long _lv = Convert.ToInt64(basefun.toIntval64(svalue) * pmobj.Scale); svalue = this.sVal10To16(_lv.ToString()); if (pmobj.Format == "db") { svalue = basefun.toIntval64(svalue).ToString() + basefun.toIntval64(svalue).ToString(); } } break; case "float": case "double": if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); if (string.IsNullOrEmpty(svalue)) svalue = "0"; if (pmobj.Format.IndexOf("{") > -1) svalue = string.Format(pmobj.Format, Convert.ToDouble(svalue) * pmobj.Scale); else if (!string.IsNullOrEmpty(pmobj.Format)) svalue = string.Format("{" + pmobj.Format + "}", Convert.ToDouble(svalue) * pmobj.Scale); else svalue = Convert.ToInt32(Convert.ToDouble(svalue) * pmobj.Scale).ToString(); svalue = basefun.toIntval(svalue).ToString(); svalue = this.sVal10To16(svalue, "F".PadLeft(pmobj.Len / 4, 'F')); break; case "bit": //�ѻ�����=1#1#String##+�ѻ�ʱ��=0.1#15#Double#{0:.0}#10; if (pmobj.SubItems != "") { string[] subs = pmobj.SubItems.Split('+'); int isubs = 0; string _sbit = ""; for (int m = 0; m < subs.Length; m++) { string[] asubs = subs[m].Split('='); string[] asubpms = asubs[1].Split('#'); string subValue = asubpms[0]; if (subValue == "" || subValue == "?") subValue = basefun.valtag(datapms, pmobj.Name + ".{" + asubs[0] + "}"); int iSublen = basefun.toIntval(asubpms[1]); string subDataType = asubpms[2]; string subFormat = asubpms[3]; string subScale = asubpms[4]; switch (subDataType.ToLower()) { case "double": //תΪ������ if (string.IsNullOrEmpty(subValue)) subValue = "0"; if (subFormat == "") subFormat = "{0:.00}"; if (subFormat.IndexOf("{") > -1) { subValue = string.Format(subFormat, Convert.ToDouble(subValue) * 10); } else subValue = string.Format("{" + subFormat + "}", Convert.ToDouble(subValue) * pmobj.Scale); subValue = sVal10To2(subValue, iSublen); break; case "integer": case "int": if (string.IsNullOrEmpty(subValue)) subValue = "0"; subValue = sVal10To2(subValue, iSublen); break; default: subValue = subValue; break; } //rtns = basefun.setvaltag(rtns, asubs[0], subValue); _sbit = _sbit + subValue; } try { svalue = this.sVal10To16(Convert.ToInt32(_sbit, 2).ToString()); } catch (Exception ex) { svalue = "00"; }; } else { if (string.IsNullOrEmpty(svalue)) svalue = "0"; if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); if (string.IsNullOrEmpty(svalue)) { return ""; } svalue = this.sVal10To16(Convert.ToInt32(svalue, 2).ToString()); } break; case "date": case "datetime": if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); if (string.IsNullOrEmpty(svalue)) svalue = DateTime.Now.ToString(); if (format.EndsWith("~BCD")) svalue = basefun.toBCDDatetime(svalue, format); else svalue = basefun.toHexDatetime(svalue, format); break; default: if (pmobj.Value == "" || pmobj.Value == "?") svalue = basefun.valtag(datapms, pmobj.Name); break; } if (ilength == 0) ilength = 8 * svalue.Length / 2; if (lst.Keys[0] == "{У����}") { pmXorObj = pmobj; break; } if (svalue == "") svalue = "0"; svalue = ComplementingBits(svalue, ilength); if (!format.EndsWith("~BCD")) svalue = exchangeLH(svalue, pmobj.LH); str = str + svalue; Debug.WriteLine(str); } // -- ĩβ����У���� -- CrcClass crc = new CrcClass(); string xor = ""; switch (devobj.Paritymode) { case "0": xor = crc.CRCXOR(str.Substring(2, str.Length - 2)); break; case "1": xor = crc.CRCSUM(str.Substring(2, str.Length - 2)); break; } string vstr = exchangeLH(ComplementingBits(xor, ilength), pmXorObj.LH); //����ת���ַ����Բ�����֡ͷ��֡β���ֽڽ���ת�崦�� str = str.Substring(2, str.Length - 2) + vstr; str = transferWords(str, devobj.Exchanges); NameObjectList lst0 = NameValueTag(arrpm[0]); NameObjectList lst1 = NameValueTag(arrpm[arrpm.Length - 1]); string strCmd = lst0.AllStringValues[0] + str + lst1.AllStringValues[0]; strCmd = strCmd.ToUpper(); return strCmd; }
private string InfoTomyDate(string s, pmObj pmobj, devObj devobj) { DateTime mydate = System.DateTime.Now; string yy = mydate.Year.ToString().Substring(0, 2); string[] a = String16ToArry(s, 16); switch (pmobj.Format.Trim()) { case "yyMMdd": case "yyyyMMdd": a = String16ToArry(s); if (pmobj.Formats != "") { int n = 0; string[] yformat = pmobj.Formats.Split('#'); for (int m = 0; m < yformat.Length; m++) n = n + basefun.toIntval(yformat[m]); n = n / 8; s = ""; for (int m = 0; m < n; m++) s = s + a[m]; s = this.exchangeLH(s, devobj.LH); //ת�� string[] ax = String16ToArry(s); //ת��Ϊ������ s = ""; for (int m = 0; m < ax.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(sVal16To10(ax[m])), 2); s2 = ComplementingBits(s2, 8, true, true); s = s + s2; } //�����ʽλ���� string[] datas = new string[yformat.Length]; string strdata = ""; int im = 0; for (int m = 0; m < yformat.Length; m++) { string str0 = s.Substring(im, basefun.toIntval(yformat[m])); datas[m] = this.sVal16To10(this.sVal2To16(str0, 1)); im = im + basefun.toIntval(yformat[m]); strdata = strdata + "-" + datas[m]; } s = strdata.Substring(1); } else { if (a.Length == 3) { s = ""; for (int i = 0; i < 3; i++) s += "-" + Convert.ToInt16(a[i], 16).ToString(); s = s.Substring(1); } } if (pmobj.Format.Trim() == "yyyyMMdd") s = yy + s; break; case "hhmmss": a = String16ToArry(s); if (pmobj.Formats != "") { int n = 0; string[] yformat = pmobj.Formats.Split('#'); for (int m = 0; m < yformat.Length; m++) n = n + basefun.toIntval(yformat[m]); n = n / 8; s = ""; for (int m = 0; m < n; m++) s = s + a[m]; s = this.exchangeLH(s, devobj.LH); //ת�� string[] ax = String16ToArry(s); //ת��Ϊ������ s = ""; for (int m = 0; m < ax.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(sVal16To10(ax[m])), 2); s2 = ComplementingBits(s2, 8, true, true); s = s + s2; } //�����ʽλ���� string[] datas = new string[yformat.Length]; string strdata = ""; int im = 0; for (int m = 0; m < yformat.Length; m++) { string str0 = s.Substring(im, basefun.toIntval(yformat[m])); datas[m] = this.sVal16To10(this.sVal2To16(str0, 1)); im = im + basefun.toIntval(yformat[m]); strdata = strdata + ":" + datas[m]; } s = strdata.Substring(1); } else { if (a.Length == 3) s = a[0] + ":" + a[1] + ":" + a[3]; } break; case "hhmm": if (a.Length == 2) s = a[0] + ":" + a[1]; break; case "yyMMddhhmmss": if (a.Length > 5) s = a[0] + "-" + a[1] + "-" + a[2] + " " + a[3] + ":" + a[4] + ":" + a[5]; break; case "yyyyMMDD": case "YYYYMMDD": if (a.Length > 2) s = yy + a[0] + "-" + a[1] + "-" + a[2]; break; case "yyyyMMddhhmmss": if (a.Length > 5) s = yy + a[0] + "-" + a[1] + "-" + a[2] + " " + a[3] + ":" + a[4] + ":" + a[5]; break; case "yyyyMMdd+hhmmss": //����+ʱ���ͣ�������λ��ʽ���д���,����λ��ʽΪ 7#4#5+5#6#5 string[] xformat = null; string[] tformat = null; a = String16ToArry(s); if (pmobj.Formats.IndexOf("+") > -1) { xformat = pmobj.Formats.Split('+'); tformat = pmobj.Format.Split('+'); } string[] arrDatas = new string[tformat.Length]; int mn = 0; for (int ix = 0; ix < xformat.Length; ix++) { int n = 0; string[] yformat = xformat[ix].Split('#'); for (int m = 0; m < yformat.Length; m++) n = n + basefun.toIntval(yformat[m]); n = n / 8; s = ""; for (int m = mn; m < n + mn; m++) s = s + a[m]; mn = mn + n; s = this.exchangeLH(s, devobj.LH); //ת�� string[] ax = String16ToArry(s); //ת��Ϊ������ s = ""; for (int m = 0; m < ax.Length; m++) { string s2 = Convert.ToString(Convert.ToInt32(sVal16To10(ax[m])), 2); s2 = ComplementingBits(s2, 8, true, true); s = s + s2; } //�����ʽλ���� string[] datas = new string[yformat.Length]; string strdata = ""; int im = 0; for (int m = 0; m < yformat.Length; m++) { string str0 = s.Substring(im, basefun.toIntval(yformat[m])); datas[m] = this.sVal16To10(this.sVal2To16(str0, 1)); im = im + basefun.toIntval(yformat[m]); if (tformat[ix] == "yyyyMMdd") strdata = strdata + "-" + datas[m]; else strdata = strdata + ":" + datas[m]; } arrDatas[ix] = strdata.Substring(1, strdata.Length - 1); } s = yy + arrDatas[0] + " " + arrDatas[1]; break; case "yyyyMMddWWhhmmss": if (pmobj.DataType == "dateword") { string[] a1 = String16ToArry(s); switch (devobj.WeekRule) { case "1": if (a1.Length > 6) s = yy + a1[0] + "-" + a1[1] + "-" + a1[2] + " " + a1[4] + ":" + a1[5] + ":" + a1[6] + " " + GetWeekBy1(a1[3]); break; default: if (a.Length > 6) s = yy + a1[0] + "-" + a1[1] + "-" + a1[2] + " " + a1[4] + ":" + a1[5] + ":" + a1[6] + " " + this.GetWeekByHZ(a1[3]); break; } } else { switch (devobj.WeekRule) { case "1": if (a.Length > 6) s = yy + a[0] + "-" + a[1] + "-" + a[2] + " " + a[4] + ":" + a[5] + ":" + a[6] + " " + GetWeekBy1(a[3]); break; default: if (a.Length > 6) s = yy + a[0] + "-" + a[1] + "-" + a[2] + " " + a[4] + ":" + a[5] + ":" + a[6] + " " + this.GetWeekByHZ(a[3]); break; } } break; case "yyMMddWWhhmmss": switch (devobj.WeekRule) { case "1": if (a.Length > 6) s = a[0] + "-" + a[1] + "-" + a[2] + " " + a[4] + ":" + a[5] + ":" + a[6] + " " + GetWeekBy1(a[3]); break; case "2": if (a.Length > 6) s = a[0] + "-" + a[1] + "-" + a[2] + " " + a[4] + ":" + a[5] + ":" + a[6] + " " + this.GetWeekByHZ(a[3]); break; } break; } return s; }
public string getValueByUpdInfos(string[] udpinfos, int ipos, pmObj pmobj) { string s = ""; int ibyte = pmobj.Len / 8; ipos = ipos / 8; for (int i = ipos; i < ipos + ibyte; i++) { if (i >= udpinfos.Length) return ""; s = s + udpinfos[i]; } return s; }
/// <summary> /// �ɴ��ڷ��ص��ַ�����hmtag�ַ��������滮��ģʽ��ֵ /// </summary> /// <param name="format">��ʽ���ַ���</param> /// <param name="udpinfos">���ڷ��ص�����</param> /// <returns></returns> public string getValByHmFormat(string formats, string[] udpinfos, devObj devobj, ref string vtag) { if (udpinfos == null || formats == null) return null; string rtn = ""; string[] xformats = formats.Split(';'); int ipos = 0; for (int i = 0; i < xformats.Length; i++) { string[] arr = xformats[i].Split(','); string vname = getVarNameByHmStr(arr[0]); pmObj pmobj = new pmObj(); pmobj.Name = getVarNameByHmStr(arr[0]); pmobj.Len = toIntval(valtag(xformats[i], "{len}")); pmobj.DataType = valtag(xformats[i], "{datatype}"); pmobj.Format = valtag(xformats[i], "{format}"); pmobj.Formats = valtag(xformats[i], "{formats}"); pmobj.Scale = toFloatValue(valtag(xformats[i], "{scale}")) == 0 ? 1 : toFloatValue(valtag(xformats[i], "{scale}")); pmobj.Add = toIntval(valtag(xformats[i], "{add}")); /* int ilen = toIntval(valtag(xformats[i], "{len}")); string format = valtag(xformats[i], "{format}"); string aformats = valtag(xformats[i], "{formats}"); int ibytes = ilen / 8; string datatype = valtag(xformats[i], "{datatype}"); int icale = basefun.toIntval(valtag(xformats[i], "{scale}")); if (icale == 0) icale = 1; */ string s = getValueByUpdInfos(udpinfos, ipos, pmobj); ipos = ipos + pmobj.Len; switch (pmobj.DataType.ToLower()) { case "datetime": s = InfoTomyDate(s, pmobj, devobj); break; case "float": case "double": s = this.exchangeLH(s, devobj.LH); s = Convert.ToInt32(sVal16To10(s)).ToString(); if (pmobj.Format == "") pmobj.Format = "{0:.00}"; if (pmobj.Format.IndexOf("{") > -1) s = string.Format(pmobj.Format, Convert.ToDouble(s) * pmobj.Scale); else s = string.Format("{" + pmobj.Format + "}", Convert.ToDouble(s) * pmobj.Scale); break; case "bit": s = this.exchangeLH(s, devobj.LH); s = sVal16To10(s); s = ComplementingBits(Convert.ToString(Convert.ToInt64(s), 2), pmobj.Len, true); break; case "integer": case "int": s = this.exchangeLH(s, devobj.LH); long _iv = Convert.ToInt64(Convert.ToInt64(sVal16To10(s)) * pmobj.Scale); s = _iv.ToString(); break; case "string": s = this.exchangeLH(s, devobj.LH); break; default: s = this.exchangeLH(s, devobj.LH); s = Convert.ToInt64(sVal16To10(s)).ToString(); break; } xformats[i] = setvaltag(xformats[i], vname, s); vtag = setvaltag(vtag, vname, s); rtn = rtn + ";" + xformats[i]; } if (rtn.Length > 0) rtn = rtn.Substring(1); return rtn; }
/// <summary> /// �ɴ��ڷ��ص��ַ�����hmtag�ַ��������滮��ģʽ��ֵ.�ɲ���ֵnoHE�ֱ��Ƿ���֡ͷ��֡β /// </summary> /// <param name="format">��ʽ���ַ���</param> /// <param name="udpinfos">���ڷ��ص�����</param> /// <param name="devobj">�豸������</param> /// <param name="noHE">����ֵ��true- ������֡ͷ��֡β</param> /// <param name="vtag">���ص�״ֵ̬</param> /// <returns>���ص������ַ���</returns> public string getValByHmFormat(string formats, string[] udpinfos, devObj devobj, Boolean noHE, ref string vtag) { if (udpinfos == null || formats == null) return null; string rtn = ""; string[] xformats = formats.Split(';'); int ipos = 0; string rtns = ""; for (int i = 0; i < xformats.Length; i++) { if (noHE) if (i == 0 || i == xformats.Length - 1) continue; string[] arr = xformats[i].Split(','); string vname = getVarNameByHmStr(arr[0]); pmObj pmobj = new pmObj(); pmobj.Name = getVarNameByHmStr(arr[0]); pmobj.Len = toIntval(valtag(xformats[i], "{len}")); pmobj.DataType = valtag(xformats[i], "{datatype}"); pmobj.Format = valtag(xformats[i], "{format}"); pmobj.Formats = valtag(xformats[i], "{formats}"); pmobj.Scale = toFloatValue(valtag(xformats[i], "{scale}")) == 0.0 ? 1.0 : toFloatValue(valtag(xformats[i], "{scale}")); pmobj.Add = toIntval(valtag(xformats[i], "{add}")); pmobj.SubItems = valtag(xformats[i], "{subitems}"); string strlh = valtag(xformats[i], "{lh}"); if (strlh == "") pmobj.LH = devobj.LH; /* int ilen = toIntval(valtag(xformats[i], "{len}")); string format = valtag(xformats[i], "{format}"); string aformats = valtag(xformats[i], "{formats}"); int ibytes = ilen / 8; string datatype = valtag(xformats[i], "{datatype}"); int icale = basefun.toIntval(valtag(xformats[i], "{scale}")); if (icale == 0) icale = 1; */ string s = getValueByUpdInfos(udpinfos, ipos, pmobj); ipos = ipos + pmobj.Len; switch (pmobj.DataType.ToLower()) { case "datetime": case "date": case "dateword": if (pmobj.Format.EndsWith("~BCD")) s = basefun.toDatetimeBCD(s, pmobj.Format); else { s = this.exchangeLH(s, pmobj.LH); s = basefun.toDatetime(s, pmobj.Format); } rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; case "float": case "double": s = this.exchangeLH(s, pmobj.LH); if (pmobj.Format.StartsWith("��")) { pmobj.Format = pmobj.Format.Substring(1); int h = Convert.ToInt16(s.Substring(0, 1), 16); if (h > 7) s = s.PadLeft(16, 'F'); } s = Convert.ToInt64(sVal16To10(s)).ToString(); if (pmobj.Format == "") pmobj.Format = "{0:.00}"; if (pmobj.Format.IndexOf("{") > -1) s = string.Format(pmobj.Format, Convert.ToDouble(s) * pmobj.Scale); else s = string.Format("{" + pmobj.Format + "}", Convert.ToDouble(s) * pmobj.Scale); rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; case "float16": case "double16": s = this.exchangeLH(s, pmobj.LH); s = Convert.ToInt32(sVal16To10(s)).ToString(); if (pmobj.Format == "") pmobj.Format = "{0:.00}"; if (pmobj.Format.IndexOf("{") > -1) s = string.Format(pmobj.Format, Convert.ToDouble(s) * pmobj.Scale); else s = string.Format("{" + pmobj.Format + "}", Convert.ToDouble(s) * pmobj.Scale); rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; case "bit": s = this.exchangeLH(s, pmobj.LH); s = sVal16To10(s); s = ComplementingBits(Convert.ToString(Convert.ToInt64(s), 2), pmobj.Len, true, true); //Billy /* if (s == "10000001" || s == "10000000") { s = "00000000"; } */ //�ѻ�����=1#String#+�ѻ�ʱ��=15#Double#{0:.0} if (pmobj.SubItems != "") { string[] subs = pmobj.SubItems.Split('+'); int isubs = 0; for (int m = 0; m < subs.Length; m++) { string[] asubs = subs[m].Split('='); string[] asubpms = asubs[1].Split('#'); int iSublen = basefun.toIntval(asubpms[1]); string subDataType = asubpms[2]; string subFormat = asubpms[3]; string subValue = s.Substring(isubs, iSublen); switch (subDataType.ToLower()) { case "datetime": case "date": subValue = Convert.ToString(Convert.ToInt64(subValue, 2), 16); subValue = ComplementingBits(subValue, 16); if (subFormat == "") subFormat = "hhmm"; subValue = InfoTomyDate(subValue, subFormat, true); break; case "double": subValue = Convert.ToInt32(subValue, 2).ToString(); if (subFormat == "") subFormat = "{0:.00}"; //�˴�δ�ӱ������з��� if (subFormat.IndexOf("{") > -1) { subValue = string.Format(subFormat, Convert.ToDouble(subValue) / 10); } else subValue = string.Format("{" + subFormat + "}", Convert.ToDouble(subValue) * pmobj.Scale); break; case "integer": case "int": subValue = Convert.ToInt32(subValue, 2).ToString(); break; default: subValue = Convert.ToInt32(subValue, 2).ToString(); break; } rtns = basefun.setvaltag(rtns, asubs[0], subValue); isubs = isubs + iSublen; } } else { rtns = basefun.setvaltag(rtns, pmobj.Name, s); } break; case "integer": case "int": s = this.exchangeLH(s, pmobj.LH); long _iv = Convert.ToInt64(Convert.ToInt64(sVal16To10(s)) * pmobj.Scale); s = _iv.ToString(); rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; case "asc": s = this.exchangeLH(s, pmobj.LH); byte[] bs = new byte[s.Length / 2]; for (int p = 0; p < bs.Length; p++) bs[p] = Convert.ToByte(s.Substring(p * 2, 2), 16); s = Encoding.GetEncoding("GB2312").GetString(bs); rtns = basefun.setvaltag(rtns, pmobj.Name, s.Trim()); break; case "word": s = this.exchangeLH(s, pmobj.LH); if (vname == "{״̬}") { s = ResKeywords(devobj, s); vtag = s; if (s.Contains("�����ɹ�") || s.Contains("���¼�¼")) rtns = basefun.setvaltag(rtns, "Success", "true"); else rtns = basefun.setvaltag(rtns, "Success", "false"); } else { switch (pmobj.Format) { case "{0}-{1}-{2}-{3}-{4}": string[] arrip = this.String16ToArry(s, 16); string str = ""; for (int m = 0; m < arrip.Length; m++) { str = str + "-" + this.sVal10To16(basefun.toIntval(arrip[m]).ToString()); } s = str.Substring(1, str.Length - 1); break; case "db": s = s.Substring(1); break; } } rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; default: s = this.exchangeLH(s, pmobj.LH); if (pmobj.Format == "{0}.{1}.{2}.{3}") { string[] arrip = this.String16ToArry(s, 16); string str = ""; for (int m = 0; m < arrip.Length; m++) { str = str + "." + basefun.toIntval(arrip[m]).ToString(); } s = str.Substring(1, str.Length - 1); } else s = Convert.ToInt64(sVal16To10(s)).ToString(); rtns = basefun.setvaltag(rtns, pmobj.Name, s); break; } xformats[i] = setvaltag(xformats[i], vname, s); rtn = rtn + ";" + xformats[i]; } //�Ž�ʱ�з�����ɹ� if (!string.IsNullOrEmpty(rtns) && "�Ž�" == devobj.Buss) rtns = basefun.setvaltag(rtns, "Success", "true"); if (rtn.Length > 0) rtn = rtn.Substring(1); rtns = rtns.Trim(); return rtns; }