/// <summary> /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> /// <param name="cmd">执行指令</param> /// <param name="timeout">超时间隔</param> /// <returns>返回指令响应结果</returns> private static string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, TimeSpan timeout) { if (null == mgr || null == target || null == cmd) { return(""); } if (null == cmd.EventWh) { cmd.EventWh = new ManualResetEvent(false); } string msg = ""; for (int i = 0; i < 5; i++) { msg = ""; cmd.ResetState(); mgr.SendCommand(target, cmd); if (cmd.EventWh.WaitOne(timeout, false)) { msg = cmd.ResponseFormat; } string suc = basefun.valtag(msg, "Success"); if ("true" == suc) { break; } Thread.Sleep(200); } return(msg); }
/// <summary> /// 对目标通讯启动心跳,已经有则不会重复 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> public static void OpenHeaderBeat(CommiManager mgr, CommiTarget target) { if (null == mgr || null == target) { return; } target.setProtocol(CmdFileTrans.PTL); mgr.SendCommand(target, CmdHeaderBeat); }
/// <summary> /// 设置RF通讯端口,波特率,站址,被动只接收数据 /// </summary> /// <param name="port">RF射频串口</param> /// <param name="baudRate">波特率</param> /// <returns>能够打开端口则成功,端口占用或参数非法则失败</returns> public bool setRfTarget(string port, int baudRate) { CommiManager mgr = CommiManager.GlobalManager; if (null != this.rftar && this.rftar.PortName == port) { mgr.SendCommand(this.rftar, this.cmdRFID); return(true); } if (null != this.rftar) { mgr.RemoveCommand(this.rftar); } this.rftar = null; try { CommiTarget tar = new CommiTarget(port, baudRate); Protocol ptl = new Protocol(); ptl.FrameHeader = new byte[] { 0x02 }; ptl.FrameFoot = new byte[] { 0x03, 0x0A, 0x0D }; ptl.TotalBytes = 13; tar.setProtocol(ptl); if (!mgr.TestConnect(tar)) { return(false); } this.rftar = tar; } catch { return(false); } //命令只接收数据 this.cmdRFID.ResetState(); byte[] request = new byte[] { 0x02, 0x00, 0x00, 0x03, 0x0A, 0x0D }; this.cmdRFID.setCommand(request); mgr.SendCommand(this.rftar, this.cmdRFID); return(true); }
/// <summary> /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> /// <param name="cmd">执行指令</param> /// <param name="strcmd">指令名称</param> /// <param name="tag">指令内容</param> /// <param name="timeout">超时间隔</param> /// <returns>返回指令响应结果</returns> private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout) { if (null == mgr || null == target || null == cmd) { return(""); } if (null == cmd.EventWh) { cmd.EventWh = new ManualResetEvent(false); } string msg = ""; for (int i = 0; i < 3; i++) { msg = ""; cmd.setCommand("门禁", strcmd, tag); Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + " " + tag); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + " " + tag); mgr.SendCommand(target, cmd, true); this.isexecuting = true; if (cmd.EventWh.WaitOne(timeout, false)) { msg = cmd.ResponseFormat; } this.isexecuting = false; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); string suc = basefun.valtag(msg, "Success"); if (!string.IsNullOrEmpty(suc)) { break; } if (string.IsNullOrEmpty(msg) && CommiType.SerialPort != target.ProtocolType) { Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now)); myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now)); bool pingcn = Ping(target, CNtimeout); Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接 {1}", DateTime.Now, pingcn)); myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接 {1}", DateTime.Now, pingcn)); if (!pingcn) { break; } } } return(msg); }
/// <summary> /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> /// <param name="cmd">执行指令</param> /// <param name="strcmd">指令名称</param> /// <param name="timeout">超时间隔</param> /// <returns>返回指令响应结果</returns> private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout) { if (null == mgr || null == target || null == cmd || string.IsNullOrEmpty(strcmd) || string.IsNullOrEmpty(tag)) { return(""); } if (null == cmd.EventWh) { cmd.EventWh = new ManualResetEvent(false); } string msg = ""; for (int i = 0; i < 5; i++) { msg = ""; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag); cmd.setCommand("消费", strcmd, tag); mgr.SendCommand(target, cmd, true); this.isexecuting = true; if (cmd.EventWh.WaitOne(timeout, false)) { msg = cmd.ResponseFormat; } this.isexecuting = false; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); string suc = basefun.valtag(msg, "Success"); if ("true" == suc) { break; } //失败时重新采集当前记录 if ("取下一条消费记录" == strcmd) { strcmd = "取当前消费记录"; } if ("取下一条补助记录" == strcmd) { strcmd = "取当前补助记录"; } Thread.Sleep(200); } return(msg); }
/// <summary> /// ����ָ���ȡָ��������ͨѶʧ��ʱ�Զ�����ִ��5�� /// </summary> /// <param name="mgr">ͨѶ������</param> /// <param name="target">ͨѶĿ��</param> /// <param name="cmd">ִ��ָ��</param> /// <param name="timeout">��ʱ���</param> /// <returns>����ָ����Ӧ���</returns> private static string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, TimeSpan timeout) { if (null == mgr || null == target || null == cmd) return ""; if(null==cmd.EventWh) cmd.EventWh = new ManualResetEvent(false); string msg = ""; for (int i = 0; i < 5; i++) { msg = ""; cmd.ResetState(); mgr.SendCommand(target, cmd); if (cmd.EventWh.WaitOne(timeout, false)) msg = cmd.ResponseFormat; string suc = basefun.valtag(msg, "Success"); if ("true" == suc) break; Thread.Sleep(200); } return msg; }
/// <summary> /// 对目标通讯启动心跳,已经有则不会重复 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> public static CommandBase OpenHeaderBeat(CommiManager mgr, CommiTarget target) { if (null == mgr || null == target) return null; target.setProtocol(CmdFileTrans.PTL); mgr.SendCommand(target, CmdHeaderBeat); return CmdHeaderBeat; }
/// <summary> /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> /// <param name="cmd">执行指令</param> /// <param name="strcmd">指令名称</param> /// <param name="timeout">超时间隔</param> /// <returns>返回指令响应结果</returns> private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout) { if (null == mgr || null == target || null == cmd || string.IsNullOrEmpty(strcmd) || string.IsNullOrEmpty(tag)) return ""; if (null == cmd.EventWh) cmd.EventWh = new ManualResetEvent(false); string msg = ""; for (int i = 0; i < 5; i++) { msg = ""; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 请求:" + strcmd + " " + tag); cmd.setCommand("消费", strcmd, tag); mgr.SendCommand(target, cmd, true); this.isexecuting = true; if (cmd.EventWh.WaitOne(timeout, false)) msg = cmd.ResponseFormat; this.isexecuting = false; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); string suc = basefun.valtag(msg, "Success"); if ("true" == suc) break; //失败时重新采集当前记录 if ("取下一条消费记录" == strcmd) strcmd = "取当前消费记录"; if ("取下一条补助记录" == strcmd) strcmd = "取当前补助记录"; Thread.Sleep(200); } return msg; }
/// <summary> /// 发送指令,获取指令结果,在通讯失败时自动尝试执行5次 /// </summary> /// <param name="mgr">通讯管理器</param> /// <param name="target">通讯目标</param> /// <param name="cmd">执行指令</param> /// <param name="strcmd">指令名称</param> /// <param name="tag">指令内容</param> /// <param name="timeout">超时间隔</param> /// <returns>返回指令响应结果</returns> private string getResponse(CommiManager mgr, CommiTarget target, CmdProtocol cmd, string strcmd, string tag, TimeSpan timeout) { if (null == mgr || null == target || null == cmd) return ""; if (null == cmd.EventWh) cmd.EventWh = new ManualResetEvent(false); string msg = ""; for (int i = 0; i < 3; i++) { msg = ""; cmd.setCommand("门禁", strcmd, tag); Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + " " + tag); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 指令:" + strcmd + " " + tag); mgr.SendCommand(target, cmd, true); this.isexecuting = true; if (cmd.EventWh.WaitOne(timeout, false)) msg = cmd.ResponseFormat; this.isexecuting = false; Debug.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 响应:" + msg); string suc = basefun.valtag(msg, "Success"); if (!string.IsNullOrEmpty(suc)) break; if (string.IsNullOrEmpty(msg) && CommiType.SerialPort != target.ProtocolType) { Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now)); myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} 测试网络连接...", DateTime.Now)); bool pingcn = Ping(target, CNtimeout); Debug.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接 {1}", DateTime.Now, pingcn)); myLog.WriteLine(String.Format("{0:HH:mm:ss.fff} Ping 连接 {1}", DateTime.Now, pingcn)); if (!pingcn) break; } } return msg; }