Example #1
0
 /// <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;
 }
Example #2
0
        /// <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;
        }
Example #3
0
        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;
        }
Example #4
0
        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;
        }
Example #5
0
        /// <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;
        }
Example #6
0
        /// <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;
        }