using nettyCommunication; using parkMonitor.LOG; using PLCS7; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Terminal { public class TerminalSimul { public static bool stopSimul = false; /// /// 停车终端模拟操作 /// /// 0成功 1寻找车辆停放位置失败 2生成凭证号失败 3凭证转换异常 4停车码解析异常 5地感异常 6终端状态异常 7指令占用异常 8其他异常 public static int ParkTermOper(int id, string carInfo) { int countdown = 10; int index = -1; for (int i = 0; i < Terminal.terminalInfo.Count; i++) { if (Terminal.terminalInfo[i].terminalID == id) { index = i; break; } } if (index == -1) return 1; while (!stopSimul && countdown-- > 0) { //判断终端块是否有地感、为停车终端、空闲中,之后发送停车指令 if (Terminal.terminalInfo[index].groundStatus == 1 && Terminal.terminalInfo[index].terminalStatus == 1 && Terminal.terminalInfo[index].cmd == 0) { string receiptNum = Credence.GetOneCredence(); if (receiptNum == "") { Log.WriteLog(LogType.process, LogFile.ERROR, "未能获取凭证号"); return 2; } TerminalStru ts = new TerminalStru(); ts.terminalID = (short)id; ts.paymentStatus = (short)-1; ts.btnStatus = Terminal.terminalInfo[index].btnStatus == 3 ? (short)3 : (short)2; ts.cmd = 1; if (!int.TryParse(receiptNum, out ts.receiptNum)) { Log.WriteLog(LogType.process, LogFile.ERROR, "凭证转换错误"); return 3; } if (!licenseCodeEncoding(carInfo, ref ts)) return 4; if(Monitor.Monitor.ins.GetFreeSpaceCount(1) == 0) { return 9; } Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.terminal); return 0; } Thread.Sleep(300); } if (Terminal.terminalInfo[1].groundStatus != 1) { return 5; } else if (Terminal.terminalInfo[1].terminalStatus != 1) { return 6; } else if (Terminal.terminalInfo[1].cmd != 0) { return 7; } return 8; } /// /// 用户与车辆信息编码写入PLC /// /// private static bool licenseCodeEncoding(string msg, ref TerminalStru ts) { int a = 0, b = 0, c = 0, d = 0; //字符串分割 try { string[] array = msg.Split('.'); string str1 = array[0]; string str2 = array[1]; string s1 = str2.Substring(0, 4); string s2 = str2.Substring(4, 4); string s3 = str2.Substring(8, str2.Length - 8); a = BitConverter.ToInt32(Encoding.ASCII.GetBytes(s1), 0); b = BitConverter.ToInt32(Encoding.ASCII.GetBytes(s2), 0); if (s3 != null && s3 != "" && s3 != string.Empty) { c = BitConverter.ToInt32(Encoding.ASCII.GetBytes(s3), 0); } else { c = 0; } d = Convert.ToInt32(str1); ts.licenseCodeA = d; ts.licenseCodeB = a; ts.licenseCodeC = b; ts.licenseCodeD = c; return true; } catch (Exception ex) { Log.WriteLog(LogType.process, LogFile.ERROR, "错误码7:停车码异常,解析失败。" + ex.StackTrace); return false; } } /// /// 取车终端模拟操作 /// /// /// 0成功 1地感异常 2终端状态异常 3指令占用异常 4凭证解析异常 5其他异常 public static int FetchTermOper(string receiptNum) { ////定位2号终端 //int index = 0; //for (int i = 0; i < Terminal.terminalInfo.Count; i++) //{ // if (Terminal.terminalInfo[i].terminalID == 2) // { // index = i; // break; // } //} int countdown = 10; while (!stopSimul && countdown-- > 0) { //判断终端块是否有地感、为取车终端、空闲中,之后发送取车指令 if (Terminal.terminalInfo[1].groundStatus == 0 && Terminal.terminalInfo[1].terminalStatus == 2 && Terminal.terminalInfo[1].cmd == 0) { TerminalStru ts = new TerminalStru(); ts.terminalID = 2; try { ts.receiptNum = int.Parse(receiptNum); } catch { return 4; } ts.paymentStatus = 2;//强制支付完成 ts.btnStatus = (short)-1; ts.cmd = 2; ts.licenseCodeA = -1; ts.licenseCodeB = -1; ts.licenseCodeC = -1; ts.licenseCodeD = -1; Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.terminal); return 0; } Thread.Sleep(300); } if (Terminal.terminalInfo[1].groundStatus != 0) { return 1; }else if(Terminal.terminalInfo[1].terminalStatus != 2) { return 2; }else if(Terminal.terminalInfo[1].cmd != 0) { return 3; } return 5; } } }