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"); }