//数据解析 //用户卡标志区 存储区地址:20H(32)数据说明:若IC卡20H存储单元数值为DDH,则表明此卡为用户卡;否则为非用户卡。 public static string ReadUserType() { byte[] data = new byte[1]; byte[] databuff = new byte[2]; string lbResult; icdev = IC.ic_init(port, baud); st = IC4442.srd_4442(icdev, 32, 1, data); if (st == 0) { st = IC.hex_asc(data, databuff, 1); lbResult = System.Text.Encoding.ASCII.GetString(databuff); if (lbResult[0] == 'D' && lbResult[1] == 'D') { lbResult += "是用户卡"; } else { lbResult += "非用户卡"; } } else { lbResult = "读数据失败!"; } return(lbResult); }
/* 地区编号记录区 * 标识名:DQBH 存储区地址:47H(71)数据说明:此存储区数据为公司客户下的地区编号, * 如“武汉市天然气公司”在武汉市的用户可按地区分为三大片,其地区编号分别为: * “汉口地区”— 1、“武昌地区”— 2、“汉阳地区”-- 3。 测试:”武汉理工大学“-255*/ public static string ReadDQBH() { byte[] data = new byte[1]; byte[] databuff = new byte[2]; string lbResult; icdev = IC.ic_init(port, baud); st = IC4442.srd_4442(icdev, 71, 1, data); if (st == 0) { st = IC.hex_asc(data, databuff, 1); lbResult = System.Text.Encoding.ASCII.GetString(databuff); if (lbResult[0] == '0' && lbResult[1] == '1') { lbResult += "汉口地区"; } else if (lbResult[0] == '0' && lbResult[1] == '2') { lbResult += "武昌地区"; } else if (lbResult[0] == '0' && lbResult[1] == '3') { lbResult += "汉阳地区"; } else if (lbResult[0] == 'F' && lbResult[1] == 'F') { lbResult += "武汉理工大学"; } else { lbResult += "未知地区"; } } else { lbResult = "读数据失败!"; } return(lbResult); }
/* 表内剩余气量回写区 * 存储区地址:3DH—3FH(61 – 63)数据说明:此存储区数据为燃气表对用户卡回写的表内剩余气量值。 * 剩余气量 = (3DH单元数值) X 100 + (3EH单元数值) X 1+ (3FH单元数值) X 0.1。 * 表内剩余气量最大数值为999.9立方米,其中,3DH单元数值范围为:0—9,3EH单元数值范围为:0—99,3FH单元数值范围为0 -- 9。 * 例如:若用户表内剩余气量为123.4立方米,则IC卡3DH—3FH存储单元应为:01H,17H,04H。*/ public static string ReadRemainQL() { string s = ""; byte[] data = new byte[3]; byte[] databuff = new byte[6]; int[] sum = new int[8]; string lbResult; icdev = IC.ic_init(port, baud); st = IC4442.srd_4442(icdev, 61, 3, data); if (st == 0) { st = IC.hex_asc(data, databuff, 3); lbResult = System.Text.Encoding.ASCII.GetString(databuff); s = LConvert.hex_int(lbResult); int lll = s.Length; byte[] intbuff = new byte[lll]; byte[] key = new byte[2]; int k = 0; double d = 0; intbuff = System.Text.Encoding.ASCII.GetBytes(s); for (int j = 0; j < 6; j = j + 2) { key[0] = intbuff[j]; key[1] = intbuff[j + 1]; string x = System.Text.Encoding.ASCII.GetString(key); sum[k] = Convert.ToInt32(x); k++; } d = 100 * sum[0] + sum[1] + 0.1 * sum[2]; lbResult = "剩余气量" + d.ToString() + lbResult; } else { lbResult = "读数据失败!"; } return(lbResult); }
//用户编号区 21H—24H(33 – 36)当存储在IC卡上时,8位数从低位到高位,每两位为1组,每组存入1个字节中。 //例如:若从卡上用户编号区读出的数据为:0CH,22H,38H,4EH,则用户编号为12345678。 public static string ReadUserId() { string s = ""; byte[] data = new byte[4]; byte[] databuff = new byte[8]; string lbResult; icdev = IC.ic_init(port, baud); st = IC4442.srd_4442(icdev, 33, 4, data); if (st == 0) { st = IC.hex_asc(data, databuff, 4); lbResult = System.Text.Encoding.ASCII.GetString(databuff); s = LConvert.hex_int(lbResult); s += LConvert.int_hex(s); lbResult = s + lbResult; } else { lbResult = "读数据失败!"; } return(lbResult); }