コード例 #1
0
        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);
                    }
                }

            }
        }
コード例 #2
0
        /// <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;
                }
            }
        }
コード例 #3
0
 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);
     }
 }