//读卡 public CardInfo ReadCard() { Log.Debug("ReadCard start"); CardInfo ret = new CardInfo(); try { //检查卡的初始状态 int result = MingHua.CheckCard(Port, Baud); //有错误,显示错误内容,不是新卡不当做错误 if (result != 0 && result != -15) { //获取错误代码 ret.Err = Errors[-result - 1]; return(ret); } if (Cards == null) { throw new Exception("Cards is null"); } //循环调用所有厂家的 foreach (CardConfig info in Cards) { ICard card = info.Card; //如果不是本厂家的,看下一个 int r = card.CheckGasCard(Port, Baud); Log.Debug("check " + info.Name + " is " + r); if (r != 0) { continue; } //读卡 string kh = ""; Int32 ql = 0; decimal money = 0; Int16 cs = 0; Int16 bkcs = 0; r = card.ReadGasCard(Port, Baud, ref kh, ref ql, ref money, ref cs, ref bkcs); if (r < 0) { //获取错误代码 ret.Err = Errors[-r - 1]; } else { //返回读取结果 ret.Factory = info.Name; ret.CardID = kh; ret.Gas = ql; ret.Money = money; ret.Times = cs; ret.RenewTimes = bkcs; } return(ret); } //一个都没有找到 ret.Err = "未知厂家"; return(ret); } catch (Exception e) { Log.Debug("ReadCard exception"); ret.Exception = e.Message; return(ret); } }
private int TestCard() { MessageBox.Show("请先把卡片拔出,再插入。"); //获取本地端口号,波特率 short Port = short.Parse(Config.GetConfig("Port")); int Baud = int.Parse(Config.GetConfig("Baud")); int handle = MingHua.ic_init(Port, Baud); if (handle < 0) { HintList.Items.Add("错误:打开串口错误!"); return(-1); } else { HintList.Items.Add("打开串口正常!"); } try { if (MingHua.chk_102(handle) != 0) { HintList.Items.Add("错误:不是102卡!"); return(-1); } //读代码保护区(从0E开始) byte[] buf = new byte[4]; if (MingHua.srd_102(handle, 0, 0x0E, 4, buf) != 0) { HintList.Items.Add("错误:读卡错误。"); return(-1); } else { HintList.Items.Add("读卡正常。"); } //擦卡 if (MingHua.ser_102(handle, 0, 0x0E, 4) == 0) { if (MingHua.swr_102(handle, 0, 0x0E, 4, buf) == 0) { HintList.Items.Add("写卡正常。"); return(0); } else { HintList.Items.Add("错误:写卡错误。"); return(-1); } } else { HintList.Items.Add("错误:写卡错误。"); return(-1); } } finally { MingHua.ic_exit(handle); } }