private void NewVerDisp698(string[] frm)
        {
            //XDocument xd = XDocument.Load("xml698Data.xml");
            //XElement rt = xd.Element("Data");
            int frmLen = frm.Length;
            int posNum = 0;

            tb698Explain.AppendText(frm[posNum++] + "    ── 帧起始符\r\n");
            tb698Explain.AppendText(frm[posNum++] + " " + frm[posNum++] + " ── 长度域L=" + Convert.ToInt16(frm[posNum] + frm[posNum - 1], 16) + "字节\r\n");

            string ctrl = "";
            int    c    = Convert.ToInt16(frm[posNum], 16);

            switch (c & 0xc0)
            {
            case 0x00: ctrl += "[DIR=0,PRM=0,客户机对服务器上报的响应]"; break;

            case 0x40: ctrl += "[DIR=0,PRM=1,客户机发起的请求]"; break;

            case 0x80: ctrl += "[DIR=1,PRM=0,服务器发起的上报]"; break;

            case 0xc0: ctrl += "[DIR=1,PRM=1,服务器对客户机请求的响应]"; break;
            }
            switch (c & 0x20)
            {
            case 0x00: ctrl += "[不分帧]"; break;

            case 0x20: ctrl += "[分帧]"; break;
            }
            switch (c & 0x07)
            {
            case 0x01: ctrl += "[功能码(1):链路管理]"; break;

            case 0x03: ctrl += "[功能码(3):用户数据]"; break;

            default: ctrl += "[功能码(" + Convert.ToString(c & 0x07) + "):保留]"; break;
            }
            tb698Explain.AppendText(frm[posNum++] + "    ── 控制域C " + ctrl + "\r\n");
            int    af    = Convert.ToInt16(frm[posNum], 16);
            string strAf = "";

            switch (af & 0xc0)
            {
            case 0x00: strAf += "[单地址]"; break;

            case 0x01: strAf += "[通配地址]"; break;

            case 0x02: strAf += "[组地址]"; break;

            case 0x03: strAf += "[广播地址]"; break;
            }
            strAf += "[逻辑地址:" + (af & 0x30).ToString() + "]";
            strAf += "[地址长度:" + ((af & 0x0f) + 1).ToString() + "]";

            tb698Explain.AppendText(frm[posNum++]);
            for (int i = 0; i < (af & 0x0f) + 1; i++)
            {
                tb698Explain.AppendText(frm[posNum++]);
            }
            tb698Explain.AppendText(" ── SA " + strAf + "\r\n");
            tb698Explain.AppendText(frm[posNum++] + "    ── CA\r\n");
            tb698Explain.AppendText(frm[posNum++] + " " + frm[posNum++] + " ── HCS 帧头校验\r\n");
            tb698Explain.AppendText("──────────────────APDU──────────────────\r\n");
            switch (frm[posNum++])
            {
            case "01": tb698Explain.AppendText("01 ── APDU Tag [1] LINK-Response\r\n"); break;

            case "02": tb698Explain.AppendText("02 ── APDU Tag [2] CONNECT-Request\r\n"); break;

            case "03": tb698Explain.AppendText("03 ── APDU Tag [3] RELEASE-Request\r\n"); break;

            case "05": tb698Explain.AppendText("05 ── APDU Tag [5] GET-Request\r\n"); break;

            case "06": tb698Explain.AppendText("06 ── APDU Tag [6] SET-Request\r\n"); break;

            case "07": tb698Explain.AppendText("07 ── APDU Tag [7] ACTION-Request\r\n"); break;

            case "08": tb698Explain.AppendText("08 ── APDU Tag [8] REPORT-Response\r\n"); break;

            case "09": tb698Explain.AppendText("09 ── APDU Tag [9] PROXY-Request\r\n"); break;

            case "10": tb698Explain.AppendText("10 ── APDU Tag [16] SECURITY-Request\r\n"); break;

            case "81": tb698Explain.AppendText("81 ── APDU Tag [129] LINK-Request\r\n"); break;

            case "82": tb698Explain.AppendText("82 ── APDU Tag [130] CONNECT-Response\r\n"); break;

            case "83": tb698Explain.AppendText("83 ── APDU Tag [131] RELEASE-Response\r\n"); break;

            case "84": tb698Explain.AppendText("84 ── APDU Tag [132] RELEASE-Notification\r\n"); break;

            case "85":    //GET-Response
            {
                #region GET-Response
                tb698Explain.AppendText("85 ── APDU Tag [133] GET-Response\r\n");
                switch (frm[posNum++])
                {
                case "01":             //GetResponseNormal
                {
                    tb698Explain.AppendText("01 ── [1] GetResponseNormal\r\n");
                    tb698Explain.AppendText(frm[posNum++] + " ── PIID-ACD\r\n");
                    tb698Explain.AppendText(frm[posNum++] + frm[posNum++] + " " + frm[posNum++] + frm[posNum++] + " ── OAD\r\n");
                    switch (frm[posNum++])
                    {
                    case "00":
                    {
                        tb698Explain.AppendText("00 ── DAR\r\n");
                        int    tmp     = Convert.ToInt16(frm[posNum]);
                        string darType = Protocol698.GetDARType(tmp);
                        tb698Explain.AppendText(frm[posNum++] + " ── DAR [" + tmp + darType + "]\r\n");
                        break;
                    }

                    case "01":
                    {
                        tb698Explain.AppendText("01 ── Data\r\n");
                        int    tmp      = Convert.ToInt16(frm[posNum], 16);
                        string dataType = Protocol698.GetDataType(tmp);
                        tb698Explain.AppendText(frm[posNum++] + " ── 数据类型:[" + dataType + "]\r\n");
                        int size = Convert.ToInt16(frm[posNum], 16);
                        tb698Explain.AppendText(frm[posNum++] + " ── SIZE(" + size + ")\r\n");
                        string data = "";
                        for (int i = posNum; i < frmLen - 5; i++)
                        {
                            data += frm[posNum++];
                        }
                        tb698Explain.AppendText(data);
                        switch (dataType)
                        {
                        case "date_time":
                        {
                            int year         = Convert.ToInt16(data.Substring(0, 4), 16);
                            int month        = Convert.ToInt16(data.Substring(4, 2), 16);
                            int day_of_month = Convert.ToInt16(data.Substring(6, 2), 16);
                            int day_of_week  = Convert.ToInt16(data.Substring(8, 2), 16);
                            int hour         = Convert.ToInt16(data.Substring(10, 2), 16);
                            int minute       = Convert.ToInt16(data.Substring(12, 2), 16);
                            int second       = Convert.ToInt16(data.Substring(14, 2), 16);
                            int milliseconds = Convert.ToInt16(data.Substring(16), 16);
                            tb698Explain.AppendText(" ── " + year + "-" + month + "-" + day_of_month + "-"
                                                    + "周" + day_of_week + " " + hour + ":" + minute + ":" + second + ":" + milliseconds + "\r\n");
                            break;
                        }

                        case "date":
                        {
                            int year         = Convert.ToInt16(data.Substring(0, 4), 16);
                            int month        = Convert.ToInt16(data.Substring(4, 2), 16);
                            int day_of_month = Convert.ToInt16(data.Substring(6, 2), 16);
                            int day_of_week  = Convert.ToInt16(data.Substring(8, 2), 16);
                            tb698Explain.AppendText(" ── " + year + "-" + month + "-" + day_of_month + "-"
                                                    + "周" + day_of_week + "\r\n");
                            break;
                        }

                        case "time":
                        {
                            int hour   = Convert.ToInt16(data.Substring(0, 2), 16);
                            int minute = Convert.ToInt16(data.Substring(2, 2), 16);
                            int second = Convert.ToInt16(data.Substring(4, 2), 16);
                            tb698Explain.AppendText(" ── " + hour + ":" + minute + ":" + second + "\r\n");
                            break;
                        }

                        case "date_time_s":
                        {
                            int year   = Convert.ToInt16(data.Substring(0, 4), 16);
                            int month  = Convert.ToInt16(data.Substring(4, 2), 16);
                            int day    = Convert.ToInt16(data.Substring(6, 2), 16);
                            int hour   = Convert.ToInt16(data.Substring(8, 2), 16);
                            int minute = Convert.ToInt16(data.Substring(10, 2), 16);
                            int second = Convert.ToInt16(data.Substring(12), 16);
                            tb698Explain.AppendText(" ── " + year + "-" + month + "-" + day + " "
                                                    + hour + ":" + minute + ":" + second + "\r\n");
                            break;
                        }

                        default: tb698Explain.AppendText("\r\n"); break;
                        }
                        break;
                    }

                    default: tb698Explain.AppendText("返回错误\r\n"); break;
                    }
                    break;
                }

                case "02":            //GetResponseNormallist
                {
                    break;
                }

                case "03":            //GetResponseRecord
                {
                    break;
                }

                case "04":            //GetResponseRecordList
                {
                    break;
                }

                case "05":            //GetResponseNext
                {
                    break;
                }
                }
                break;
                #endregion
            }

            case "86":
            {
                #region SET-Response
                tb698Explain.AppendText("86 ── APDU Tag [134] SET-Response\r\n");
                switch (frm[posNum++])
                {
                case "01":             //SetResponseNormal
                {
                    tb698Explain.AppendText("01 ── [1] SetResponseNormal\r\n");
                    tb698Explain.AppendText(frm[posNum++] + " ── PIID-ACD\r\n");
                    tb698Explain.AppendText(frm[posNum++] + frm[posNum++] + " " + frm[posNum++] + frm[posNum++] + " ── OAD\r\n");
                    int    tmp     = Convert.ToInt16(frm[posNum]);
                    string darType = Protocol698.GetDARType(tmp);
                    tb698Explain.AppendText(frm[posNum++] + " ── DAR [" + tmp + darType + "]\r\n");
                    break;
                }

                case "02":             //SetResponseNormalList
                {
                    tb698Explain.AppendText("02 ── [2] SetResponseNormalList\r\n");
                    tb698Explain.AppendText(frm[posNum++] + " ── PIID-ACD\r\n");
                    int num = Convert.ToInt16(frm[posNum], 16);
                    tb698Explain.AppendText(frm[posNum++] + " ── SEQUENCE OF的个数=" + num + "\r\n");
                    for (int i = 0; i < num; i++)
                    {
                        tb698Explain.AppendText(frm[posNum++] + frm[posNum++] + " " + frm[posNum++] + frm[posNum++] + " ── OAD" + (i + 1) + "\r\n");
                        int    tmp     = Convert.ToInt16(frm[posNum]);
                        string darType = Protocol698.GetDARType(tmp);
                        tb698Explain.AppendText(frm[posNum++] + " ── DAR [" + tmp + darType + "]\r\n");
                    }
                    break;
                }

                case "03":             //SetThenGetResponseNormalList
                {
                    tb698Explain.AppendText("03 ── [3] SetResponseNormalList\r\n");
                    tb698Explain.AppendText(frm[posNum++] + " ── PIID-ACD\r\n");
                    int num = Convert.ToInt16(frm[posNum], 16);
                    tb698Explain.AppendText(frm[posNum++] + " ── SEQUENCE OF的个数=" + num + "\r\n");
                    for (int i = 0; i < num; i++)
                    {
                        tb698Explain.AppendText(frm[posNum++] + frm[posNum++] + " " + frm[posNum++] + frm[posNum++] + " ── set OAD" + (i + 1) + "\r\n");
                        int    tmp     = Convert.ToInt16(frm[posNum]);
                        string darType = Protocol698.GetDARType(tmp);
                        tb698Explain.AppendText(frm[posNum++] + " ── DAR [" + tmp + darType + "]\r\n");
                    }
                    tb698Explain.AppendText(frm[posNum++] + frm[posNum++] + " " + frm[posNum++] + frm[posNum++] + " ── read OAD" + "\r\n");
                    for (int i = posNum; i < frmLen - 5; i++)
                    {
                        tb698Explain.AppendText(frm[posNum++]);
                    }
                    tb698Explain.AppendText(" ── Data\r\n");
                    break;
                }

                default: tb698Explain.AppendText("返回错误\r\n"); break;
                }
                break;
                #endregion
            }

            case "87": tb698Explain.AppendText("87 ── APDU Tag [135] ACTION-Response\r\n"); break;

            case "88": tb698Explain.AppendText("88 ── APDU Tag [136] REPORT-Notification\r\n"); break;

            case "89": tb698Explain.AppendText("89 ── APDU Tag [137] PROXY-Response\r\n"); break;

            case "90": tb698Explain.AppendText("90 ── APDU Tag [144] SECURITY-Response\r\n"); break;

            default: tb698Explain.AppendText("返回错误\r\n"); break;
            }
            tb698Explain.AppendText(frm[frmLen - 5] + " ── FollowReport\r\n");
            tb698Explain.AppendText(frm[frmLen - 4] + " ── 时间标签\r\n");
            tb698Explain.AppendText("─────────────────End APDU─────────────────\r\n");
            tb698Explain.AppendText(frm[frmLen - 3] + " " + frm[frmLen - 2] + " ── FCS\r\n");
            tb698Explain.AppendText(frm[frmLen - 1] + "    ── 结束符\r\n");
            tb698Explain.AppendText("------------------------------------------------------------------------------------\r\n\r\n\r\n");
        }