private void ThreadUIHandleMethod(msgReceiptEventArg eventData) { if (eventData.ErrorHappened) { this.labelUdpstatus.Text = "通讯服务发生错误,已断开"; } else { udpPackage package = new udpPackage(); if(package.Pack(eventData.data)) { if(package.addr == 1) { try { _transMachine1.RecvCmd(package, eventData.requestIP, eventData.requestPort); } catch (System.Exception e) { Console.WriteLine("_transMachine1.RecvCmd:" + e.Message); } } else if(package.addr == 2) { _transMachine2.RecvCmd(package, eventData.requestIP, eventData.requestPort); } } } }
/// <summary> /// 接收udp数据包,更新状态 /// </summary> /// <param name="package"></param> public void RecvCmd( udpPackage package,string requestIP,int requestPort) { lock(this) { _requestIP = requestIP; _requestPort = requestPort; if (package.frameType == 2) return; if (package.addr != _MachineIndex) return; switch (package.cmd) { case (byte)HouseCmdCode.CMD_QUERY: { udpPackage rePackage = new udpPackage(); rePackage.len = 0x09; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = (byte)HouseCmdCode.CMD_QUERY; rePackage.status = 0; rePackage.data = new byte[5]; rePackage.data[0] = (byte)_CurrentCoord.L; rePackage.data[1] = (byte)(_CurrentCoord.C & 0xff); rePackage.data[2] = (byte)((_CurrentCoord.C >> 8) & 0xff); rePackage.data[3] = (byte)_workStatus; rePackage.data[4] = 0x00; _svc.SendRemsg(rePackage, _requestIP, _requestPort); break; } case (byte)HouseCmdCode.CMD_PRODUCT_INHOUSE: { if (_workStatus == MachineWorkStatus.MACHINE_IDLE) { //如小车空闲则接收该指令 _workStatus = MachineWorkStatus.PRODUCT_IN_PREPARE; _CurrentCmd = (HouseCmdCode)package.cmd; _TargetCoord.L = package.data[0]; _TargetCoord.R = package.data[1]; _TargetCoord.C = package.data[2] + (package.data[3] << 8); //应答 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x00; _svc.SendRemsg(rePackage, _requestIP, _requestPort); _svc.RefreshTaskDisp(this.MachineIndex, _TargetCoord, "入库"); } else { //应答,由于小车正在作业,该指令拒绝接收 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x01; //拒绝执行 _svc.SendRemsg(rePackage, _requestIP, _requestPort); } break; } case (byte)HouseCmdCode.CMD_PRODUCT_OUTHOUSE: { if (_workStatus == MachineWorkStatus.MACHINE_IDLE) { //如小车空闲则接收该指令 _workStatus = MachineWorkStatus.PRODUCT_OUT_PREPARE; _CurrentCmd = (HouseCmdCode)package.cmd; _TargetCoord.L = package.data[0]; _TargetCoord.R = package.data[1]; _TargetCoord.C = package.data[2] + (package.data[3] << 8); //应答 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x00; _svc.SendRemsg(rePackage, _requestIP, _requestPort); _svc.RefreshTaskDisp(this.MachineIndex, _TargetCoord, "出库"); } else { //应答,由于小车正在作业,该指令拒绝接收 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x01; //拒绝执行 _svc.SendRemsg(rePackage, _requestIP, _requestPort); } break; } case (byte)HouseCmdCode.CMD_PALLETE_INHOUSE: { if (_workStatus == MachineWorkStatus.MACHINE_IDLE) { //如小车空闲则接收该指令 _workStatus = MachineWorkStatus.PALLETE_IN_PREPARE; _CurrentCmd = (HouseCmdCode)package.cmd; _TargetCoord.L = package.data[0]; _TargetCoord.R = package.data[1]; _TargetCoord.C = package.data[2] + (package.data[3] << 8); //应答 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x00; _svc.SendRemsg(rePackage, _requestIP, _requestPort); } else { //应答,由于小车正在作业,该指令拒绝接收 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x01; //拒绝执行 _svc.SendRemsg(rePackage, _requestIP, _requestPort); } break; } case (byte)HouseCmdCode.CMD_PALLETE_OUTHOUSE: { if (_workStatus == MachineWorkStatus.MACHINE_IDLE) { //如小车空闲则接收该指令 _workStatus = MachineWorkStatus.PALLETE_OUT_PREPARE; _CurrentCmd = (HouseCmdCode)package.cmd; _TargetCoord.L = package.data[0]; _TargetCoord.R = package.data[1]; _TargetCoord.C = package.data[2] + (package.data[3] << 8); //应答 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x00; _svc.SendRemsg(rePackage, _requestIP, _requestPort); } else { //应答,由于小车正在作业,该指令拒绝接收 udpPackage rePackage = new udpPackage(); rePackage.len = 0x06; rePackage.frameType = 0x02; rePackage.addr = (byte)_MachineIndex; rePackage.cmd = package.cmd; rePackage.status = 0x01; //拒绝执行 _svc.SendRemsg(rePackage, _requestIP, _requestPort); } break; } default: break; } } }
public bool SendRemsg(udpPackage package, string ip, int port) { byte[] byteStream = package.UnPack(); if (byteStream == null) { return false; } else { return _udpServer.SendData(byteStream, byteStream.Length, ip, port); } }