コード例 #1
0
ファイル: Cosmo.cs プロジェクト: devide023/ZSTLPCS
            public static GJResult Create(string str, out string err)
            {
                GJResult re = new GJResult();
                //if (str.Length < 50 || str.Length > 75)//数据接收没有完成
                //{
                //    err = "设备数据长度不正确:" + str.Length;
                //    return null;
                //}
                int int_temp = 0;

                //int int_temp = str.IndexOf("#");
                //if (int_temp == -1)
                //{
                //    err = "设备数据不以#开始无法解析";
                //    return null;
                //}
                switch (str.Substring(int_temp + 7, 1))
                {
                case "1":
                    re.OKRe = "Lo NG";
                    re.OK   = false;
                    break;

                case "2":
                    re.OKRe = "GOOD";
                    re.OK   = true;
                    break;

                case "4":
                    re.OKRe = "Hi NG";
                    re.OK   = false;
                    break;

                case "9":
                    re.OKRe = "LL NG";
                    re.OK   = false;
                    break;

                case "C":
                    re.OKRe = "HH NG";
                    re.OK   = false;
                    break;

                case "D":
                    re.OKRe = "Hi NG";
                    re.OK   = false;
                    break;

                default:
                    err = "设备数据异常无法正常解析";
                    break;
                }
                re.XLZ = str.Substring(int_temp + 9, 8).ToDouble();
                re.Hi  = str.Substring(int_temp + 18, 8).ToDouble();
                re.Lo  = str.Substring(int_temp + 27, 8).ToDouble();
                re.DP  = str.Substring(int_temp + 36, 8).ToDouble();
                err    = "";
                return(re);
            }
コード例 #2
0
ファイル: Cosmo.cs プロジェクト: devide023/ZSTLPCS
        private void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //if (e.EventType == System.IO.Ports.SerialData.Eof)
            //{
            LastCommcationTime = DateTime.Now;
            byte[] b = new byte[sp.BytesToRead];
            sp.Read(b, 0, b.Length);
            AppMessage.Add("接收干检数据", AppMessage.MsgType.干检, false, AppMessage.ImportantEnum.Normal, b.ToStandardString(false, b.Length));
            ReceDataCache += System.Text.Encoding.ASCII.GetString(b);
            if (ReceDataCache.Length > 10000)//防止异常情况下的内存爆炸
            {
                ReceDataCache = ReceDataCache.Substring(0, ReceDataCache.Length);
            }
            var ms = System.Text.RegularExpressions.Regex.Matches(ReceDataCache, "[#].+?[\r]");

            if (ms.Count == 0)
            {
                return;
            }
            ReceDataCache = "";
            var str = ms[ms.Count - 1].Value;

            if (str.Length < 50 || str.Length > 75)
            {
                return;//向干检仪发送启动或停止指令的时候对方可能会做简短的应答
            }
            GJResult re = GJResult.Create(str, out string err);

            if (err == "")
            {
                OnGetData_Event(re);
                //AddReceData(re);
            }
            else
            {
                OnMsg_Event(err + " | " + b.ToStandardString(false, b.Length));
            }
            //}
        }