Beispiel #1
0
 private void pbStart_Click(object sender, EventArgs e)
 {
     if (pbStart.Cursor == Cursors.No)
     {
         return;
     }
     EnabletStartAndStop(1);
     FmInfo.Func(1);
     if (!CreateState)
     {
         FmInfo.GetTaskInfo("必须在所有服务创建成功后,才能开始任务!");
         return;
     }
     try
     {
         ConnectionAsync(); //异步开始创建事件
     }
     catch (NotSupportedException EX)
     {
         FmInfo.GetTaskInfo("NotSupportedException错误:" + EX.Message);
     }
     catch (Exception ex)
     {
         FmInfo.GetTaskInfo("Exception错误:" + ex.Message);
     }
 }
Beispiel #2
0
 /// <summary>
 /// OPC服务连接
 /// </summary>
 void CreateOpcClinet()
 {
     string[] strmessage = plc.CreateOPCServer();//创建plc连接
     if (string.IsNullOrWhiteSpace(strmessage[0]))
     {
         FmInfo.GetTaskInfo("opC服务器创成功!");
         FmInfo.GetTaskInfo("尝试连接异型烟链板机和常规烟翻版");
         if (plc.CheckYXYConnection())
         {
             FmInfo.GetTaskInfo("倍速链:PLC连接成功!");
             FmInfo.GetGroup(plc.UnNormalGroup, plc.ShapeGroup7);//传入OPC组到信息显示界面
             CreateState = true;
         }
         else
         {
             FmInfo.GetTaskInfo("倍速链:PLC连接失败!");
             CreateState = false;
         }
         if (plc.CheckFbConnction())
         {
             FmInfo.GetTaskInfo("翻板:PLC连接成功!");
             CreateState = true;
         }
         else
         {
             FmInfo.GetTaskInfo("翻板:PLC连接失败!");
             CreateState = false;
         }
     }
     else
     {
         FmInfo.GetTaskInfo("OPC服务创建失败,错误:" + strmessage[0]);
         CreateState = false;
     }
 }
Beispiel #3
0
 private void Timer1_Tick(object sender, EventArgs e)
 {
     FmInfo.GetTaskInfo("触发定时器," + plc.timerSendTask());
     timer2.Interval = 1000 * GlobalPara.TimerIntervalCycle;
     timer2.Start(); //启动定时器
     timer1.Stop();
 }
Beispiel #4
0
        private async Task   ConnectionAsync()
        {
            string ErrMsg = await Task.Run(() => CreateDataChange()); //创建

            FmInfo.GetTaskInfo(plc.ReadAndWriteCGYTaskConpelte());    //获取常规烟未取走完成信号
            FmInfo.GetTaskInfo(plc.ReadAndWriteYXYTaskConpelte());    //获取异形烟未取走完成信号
            if (string.IsNullOrWhiteSpace(ErrMsg))                    //事件创建成功
            {
                if (modbus.Connection())
                {
                    FmInfo.GetTaskInfo("机械手连接成功!");
                    Task.Run(() => modbus.ReadAsync());
                }
                else
                {
                    FmInfo.GetTaskInfo("机械手连接失败!");
                }
                FmInfo.GetTaskInfo("启动定时器,触发倍速链,翻版跳变!");
                FmInfo.Func(1);
                EnabletStartAndStop(1);
                timer1.Interval = 1000 * GlobalPara.TimerIntervalStart;
                timer1.Start(); //启动定时器
            }
            else
            {
                FmInfo.GetTaskInfo("客户端初始化失败!错误:" + ErrMsg);
            }

            FmInfo.Func(1);
            EnabletStartAndStop(1);
        }
Beispiel #5
0
        /// <summary>
        /// Socket服务器连接
        /// </summary>
        void CreateSocketClinet()
        {
            if (!IPAddress.TryParse(GlobalPara.RobitPlc_Ip, out IPAddress address))
            {
                FmInfo.GetTaskInfo("Robit_IP地址填写不正确");
                return;
            }
            if (!int.TryParse(GlobalPara.RobitPlc_Port, out int port))
            {
                FmInfo.GetTaskInfo("Robit_Port地址填写不正确");
                return;
            }
            try
            {
                socketCore?.Close();

                socketCore = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//使用TCPip协议
                socketCore.Connect(IPAddress.Parse(GlobalPara.RobitPlc_Ip), int.Parse(GlobalPara.RobitPlc_Port));
                connectSuccess = false;
                new Thread(() =>
                {
                    //
                    Thread.Sleep(2000);
                    if (!connectSuccess)
                    {
                        socketCore?.Close();                 //如果连接失败,这里将会跳入到心跳检测
                    }
                }).Start();
                connectSuccess = true;
                ////异步接受来自服务端的信息
                socketCore.BeginReceive(buffer, 0, 2048, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socketCore);
                if (socketCore.Connected)
                {
                    FmInfo.GetTaskInfo("机器人:服务器连接成功!");
                    lblServerInfo.Text = "机器人服务器连接成功!";
                    thread             = new Thread(new ThreadStart(SendRobotTask))//机器人任务发送
                    {
                        IsBackground = true
                    };
                    thread.Start();
                }
                else
                {
                    FmInfo.GetTaskInfo("机器人:服务器连接失败!");
                    lblServerInfo.Text = "机器人:服务器连接失败!";
                }
            }
            catch (Exception ex)
            {
                FmInfo.GetTaskInfo(ex.Message);
            }
        }
Beispiel #6
0
        private void pbstatus_Click(object sender, EventArgs e)
        {
            Fm_StatusSearch frm = new Fm_StatusSearch();

            if (CheckExist(frm) == true)
            {
                frm.Dispose();
                frm = null;
                return;
            }
            frm.MdiParent = this;
            frm.Dock      = DockStyle.Fill;
            frm.Show();
        }
Beispiel #7
0
        private void pbSize_Click(object sender, EventArgs e)
        {
            FmCommoditySize frm = new FmCommoditySize();

            if (CheckExist(frm) == true)
            {
                frm.Dispose();
                frm = null;
                return;
            }
            frm.MdiParent = this;
            frm.Dock      = DockStyle.Fill;
            frm.Show();
        }
Beispiel #8
0
        private void pbConnSet_Click(object sender, EventArgs e)
        {
            FmSystemSetup frm = new FmSystemSetup();

            if (CheckExist(frm) == true)
            {
                frm.Dispose();
                frm = null;
                return;
            }
            frm.MdiParent = this;
            frm.Dock      = DockStyle.Fill;
            frm.Show();
        }
Beispiel #9
0
        private void pbUnionS_Click(object sender, EventArgs e)
        {
            FmOrderInfo frm = new FmOrderInfo();

            if (CheckExist(frm) == true)
            {
                frm.Dispose();
                frm = null;
                return;
            }
            frm.MdiParent = this;
            frm.Dock      = DockStyle.Fill;
            frm.Show();
        }
Beispiel #10
0
        private void pbExit_Click(object sender, EventArgs e)
        {
            DialogResult MsgBoxResult = MessageBox.Show("确定要退出程序?",                       //对话框的显示内容
                                                        "确认完成后再关闭,否则可能会导致任务丢失!",          //对话框的标题
                                                        MessageBoxButtons.YesNo,          //定义对话框的按钮,这里定义了YSE和NO两个按钮
                                                        MessageBoxIcon.Question,          //定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号
                                                        MessageBoxDefaultButton.Button2); //定义对话框的按钮式样

            if (DialogResult.Yes == MsgBoxResult)
            {
                CloseDataChange();
                FmInfo.GetTaskInfo("程序关闭!");
                Close();
            }
        }
Beispiel #11
0
        /// <summary>
        /// 创建数据变化事件r
        /// </summary>
        /// <returns></returns>
        string CreateDataChange()
        {
            try
            {
                string ErrMsg = "";
                if (socketCore == null)//如果与服务器断开连接,则重新创建
                {
                    CreateSocketClinet();
                }
                try
                {
                    if (plc.CheckYXYConnection())
                    {
                        //异型烟倍速链
                        //  plc.ShapeGroup1.callback += OnDataChange;
                        plc.ShapeGroup2.callback += OnDataChange;//完成信号
                    }
                    else
                    {
                        ErrMsg += "异型烟倍速事件链绑定失败,未连接至PLC";
                    }
                    if (plc.CheckFbConnction())
                    {
                        //常规烟翻版
                        plc.ShapeGroup3.callback += OnDataChange; // 完成信号
                                                                  //  plc.ShapeGroup4.callback += OnDataChange;
                    }
                    else
                    {
                        ErrMsg += "常规烟翻版事件绑定失败,未连接至PLC";
                    }
                    plc.SpyGroup6.callback += OnDataChange;//添加监控的标志位的
                    FmInfo.GetTaskInfo("倍速链,翻版,通信事件绑定成功");
                    //异型烟倍速链
                }
                catch (Exception ex)
                {
                    FmInfo.GetTaskInfo("触发事件绑定失败");
                    return(ex.Message);
                }

                return(ErrMsg);
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
Beispiel #12
0
        /// <summary>
        /// 更新垛型显示层
        /// </summary>
        /// <param name="ListInfo">卷烟垛型信息</param>\
        /// <param name="type">显示类型(0为全部),1为常规烟,2为异形烟</param>
        public void UpdateValue(List <TobaccoInfo> ListInfo, int type = 0)
        {
            tbinfo = SecondaryCalculation(ListInfo);
            switch (type)
            {
            case 1:
                tbinfo = tbinfo.Where(a => a.CigType == "1").ToList();
                break;

            case 2:
                tbinfo = tbinfo.Where(a => a.CigType == "2").ToList();
                break;
            }
            if (tbinfo.Count > 64)
            {
                FmInfo.GetTaskInfo("包内条数大于64,实际数量:" + tbinfo.Count + ",包烟流水号:" + tbinfo[0].GlobalIndex);

                return;
            }
            this.UpdateTobaccoShow( );
        }
Beispiel #13
0
 bool CheckRobotRunState(string falg)
 {
     if (falg == "1")
     {
         updateLabel("机器人状态:开启", lblRobotState);
         FirstSend = false;
         return(RoBotState = true);
     }
     else if (falg == "2")//2标识 当前任务往前跳发送一个
     {
         flag = false;
         robotService.UpdateLastPacktaskNumCigstate();
         FmInfo.GetTaskInfo("机器人:收到标识2,重发前一个任务!");
         flag = true;
         updateLabel("机器人状态:开启", lblRobotState);
         return(RoBotState = true);
     }
     {
         updateLabel("机器人状态:关闭", lblRobotState);
         return(RoBotState = false);
     }
 }
Beispiel #14
0
 /// <summary>
 /// 断开通信连接
 /// </summary>
 void CloseDataChange()
 {
     if (socketCore != null)
     {
         connectSuccess = false;
         modbus.DisConnection();
         RoBotState = false;
         socketCore.Close();
         socketCore = null;
         FirstSend  = true;
         FmInfo.GetTaskInfo("断开与机器人的连接!");
     }
     else
     {
         FmInfo.GetTaskInfo("请先连接服务器!");
     }
     try
     {
         plc.ShapeGroup1.callback -= OnDataChange;
         plc.ShapeGroup2.callback -= OnDataChange;
         plc.ShapeGroup3.callback -= OnDataChange;
         plc.ShapeGroup4.callback -= OnDataChange;
         plc.SpyGroup6.callback   -= OnDataChange;
         FmInfo.GetTaskInfo("异型烟倍速链,常规烟翻版移除事件成功!");
         FmInfo.GetTaskInfo("任务停止发送与接收!");
     }
     catch (NullReferenceException nuller)
     {
         FmInfo.GetTaskInfo("OPC未能创建成功!" + nuller.Message);
     }
     catch (Exception ex)
     {
         FmInfo.GetTaskInfo("异型烟链板机任务停止失败!错误:" + ex.Message);
     }
     FmInfo.Func(2);
 }
Beispiel #15
0
 private void button1_Click(object sender, EventArgs e)
 {
     FmInfo.FuncAutoRefsh();
 }
Beispiel #16
0
        private void btnDw_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtRobot.Text + txtFb.Text + txtBsul.Text))
            {
                return;
            }
            string info = "";

            if (!string.IsNullOrWhiteSpace(txtFb.Text))
            {
                info += "翻版从" + txtFb.Text + " 包号开始";
                cgyFb = txtFb.Text.CastTo <decimal>();
            }
            if (!string.IsNullOrWhiteSpace(txtBsul.Text))
            {
                info   += "\r\n倍速链从" + txtBsul.Text + " 包号开始";
                yxyBsul = txtBsul.Text.CastTo <decimal>();
            }
            if (!string.IsNullOrWhiteSpace(txtRobot.Text))
            {
                info     += "\r\n异型烟机器人从" + txtRobot.Text + " 包号,第 " + txtCigseq.Text + " 条烟开始";
                yxyRobot  = txtRobot.Text.CastTo <decimal>();
                yxyCigSeq = txtCigseq.Text.CastTo <decimal>();
            }
            DialogResult MsgBoxResult2 = MessageBox.Show(info,
                                                         "确认定位",
                                                         MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);

            if (DialogResult.OK == MsgBoxResult2)
            {
                FmInfo.GetTaskInfo(info);
                updateLabel("校验输入的包号是否存在...", lblOper);
                if (rts.CheckPackageTaskNum(yxyRobot, yxyCigSeq, cgyFb, yxyBsul, out string errinfo))
                {
                    FmInfo.GetTaskInfo("准备数据库进行定位...");
                    updateLabel("准备数据库进行定位...", lblOper);
                    if (rts.TaskLocate(yxyRobot, yxyCigSeq, cgyFb, yxyBsul))
                    {
                        updateLabel("定位成功!", lblOper);
                        FmInfo.GetTaskInfo(info + "定位成功!");
                        MessageBox.Show("定位成功!");
                    }
                    else
                    {
                        updateLabel("定位失败!\r\n数据库改变行数为0!", lblOper);
                        FmInfo.GetTaskInfo(info + "定位失败!\r\n数据库改变行数为0!");
                        MessageBox.Show("定位失败!\r\n数据库改变行数为0!");
                    }
                }
                else
                {
                    FmInfo.GetTaskInfo("任务包号校验未通过:" + errinfo);
                    updateLabel("任务包号校验未通过:" + errinfo, lblOper);
                    MessageBox.Show(errinfo);
                }
                txtFb.Text     = "";
                txtBsul.Text   = "";
                txtRobot.Text  = "";
                txtCigseq.Text = "";
            }
            else
            {
                MessageBox.Show("取消成功!", "任务定位", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }
        }
Beispiel #17
0
        private async void btn_clear_Click(object sender, EventArgs e)
        {
            if (btn_clear.Cursor == Cursors.No)
            {
                return;
            }
            string   msg = "";
            Fm_Check fc  = new Fm_Check();

            fc.ShowDialog();
            if (fc.DialogResult == DialogResult.OK)
            {
                bool result1, result2;
                //确认调用
                DialogResult MsgBoxResult = MessageBox.Show("确认清空电控数据?", "提示:请谨慎操作!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (MsgBoxResult == DialogResult.OK)
                {
                    btn_clear.BackColor = Color.Green;
                    btn_clear.Text      = "清空任务中";
                    try
                    {
                        result1 = await clearfun.ClearFB(plc);

                        if (result1)
                        {
                            msg += "翻板任务清空成功!\r\n";
                        }
                        else
                        {
                            msg += "翻板任务清空失败!\r\n";
                        }
                    }
                    catch (Exception ex)
                    {
                        msg += ex.InnerException.Message.ToString();
                    }
                    try
                    {
                        result2 = await clearfun.ClearBSL(plc);

                        if (result2)
                        {
                            msg += "倍速链任务清空成功!\r\n";
                        }
                        else
                        {
                            msg += "倍速链任务清空失败!\r\n";
                        }
                    }
                    catch (Exception ex)
                    {
                        msg += ex.InnerException.Message.ToString();
                    }
                }
            }
            else
            {
                return;
            }
            FmInfo.GetTaskInfo(msg);
            MessageBox.Show(msg, "提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            btn_clear.BackColor = Color.Transparent;
            btn_clear.Text      = "电控任务清空";
        }
Beispiel #18
0
 private void timer2_Tick(object sender, EventArgs e)
 {
     FmInfo.GetTaskInfo("完成信号定时读取触发");
     FmInfo.GetTaskInfo(plc.ReadAndWriteCGYTaskConpelte()); //获取常规烟未取走完成信号
     FmInfo.GetTaskInfo(plc.ReadAndWriteYXYTaskConpelte()); //获取异形烟未取走完成信号
 }
Beispiel #19
0
        /// <summary>
        /// plc数据发生改变时触发事件
        /// </summary>
        /// <param name="group">plc的DB块组</param>
        /// <param name="clientId">DB块集合</param>
        /// <param name="values">返回的值</param>
        public async void OnDataChange(int group, int[] clientId, object[] values)
        {
            #region
            //if (group == 1)//倍速链 任务发送块组
            //{
            //    for (int i = 0; i < clientId.Length; i++)
            //    {
            //        if (clientId[i] == 8)//接收信号位
            //        {

            //            int packtasknum = int.Parse(plc.ShapeGroup1.Read(0).ToString());//任务号
            //            int tempvalue = int.Parse(plc.ShapeGroup1.Read(7).ToString());//接收信号
            //            if (tempvalue == 0)//如果有接收信号
            //            {
            //                try
            //                {
            //                    //FmInfo.AutoRefreshShow(packtasknum);//更新垛型展示
            //                    //读取接收信号的任务 数据库置接收
            //                    if (packtasknum > 0)
            //                    {
            //                        if (plc.UpDateToYxyState(packtasknum, 15))
            //                        {
            //                            FmInfo.GetTaskInfo("链板机收到任务号" + packtasknum + ",更新已接收!");
            //                        }
            //                        else
            //                        {
            //                            FmInfo.GetTaskInfo("链板机收到任务号" + packtasknum + ",更新失败!");
            //                        }
            //                    }
            //                    //更改标志位 写入新任务
            //                    var x = await Task.Run(() => plc.WriteTaskSend_YXY());
            //                }
            //                catch (Exception ex)
            //                {
            //                    FmInfo.GetTaskInfo("服务器连接失败!" + ex.Message);
            //                    return;
            //                }
            //            }
            //        }
            //    }
            //}
            //else
            #endregion
            if (group == 2)//异型烟倍速链 完成信号块组
            {
                for (int i = 0; i < clientId.Length; i++)
                {
                    //完成任务号
                    int tempvalue = int.Parse(values[i].ToString());
                    if (tempvalue > 0)
                    {
                        //try
                        //{
                        if (tempvalue != 0)
                        {
                            FmInfo.GetTaskInfo("异型烟倍速链:任务号" + tempvalue + "完成");
                            FmInfo.GetTaskInfo(plc.ReadAndWriteYXYTaskConpelte(tempvalue, i));    //更新数据库 更新DB块
                            // FmInfo.AutoRefreshShow(tempvalue);//更新跺形显示 暂时用常规烟任务号刷新(2019/04/26)
                        }
                        //}
                        //catch (Exception ex)
                        //{
                        //    FmInfo.GetTaskInfo("异型烟倍速链:服务器连接失败!" + ex.Message);
                        //    return;
                        //}
                    }
                }
            }

            if (group == 3)//常规烟 完成信号块组
            {
                for (int i = 0; i < clientId.Length; i++)
                {
                    //完成任务号
                    int tempvalue = int.Parse(values[i].ToString());
                    if (tempvalue > 0)
                    {
                        //try
                        //{
                        if (tempvalue != 0)
                        {
                            FmInfo.GetTaskInfo("常规烟翻版:任务包号" + tempvalue + "完成");
                            FmInfo.GetTaskInfo(plc.ReadAndWriteCGYTaskConpelte(tempvalue, i)); //更新数据库 更新DB块
                            FmInfo.AutoRefreshShow(tempvalue);                                 //更新跺形显示
                        }
                        //}
                        //catch (Exception ex)
                        //{
                        //    FmInfo.GetTaskInfo("常规烟翻版:服务器连接失败!" + ex.Message);
                        //    return;
                        //}
                    }
                }
            }
            else if (group == 6)//标志位监控组
            {
                for (int i = 0; i < clientId.Length; i++)
                {
                    if (clientId[i] == 1)                                              //倍速链任务
                    {
                        if (values[i] != null && int.Parse(values[i].ToString()) == 0) //接收
                        {
                            int tasknum = plc.ShapeGroup1.ReadD(0).CastTo(-1);         //读取到包号
                            if (tasknum > 0)
                            {
                                plc.UpDateToYxyState(tasknum, 15);//更新任务为接收
                                FmInfo.GetTaskInfo("异型烟倍速链:任务包号:" + tasknum + "已经接收!");
                            }
                            //if (plc.startatg)
                            //{
                            //    FmInfo.GetTaskInfo("倍速链,任务已经处于发送状态,接收到多的跳变信号!");
                            //    return;
                            //}
                            string x = await plc.WriteTaskSend_YXY();

                            FmInfo.GetTaskInfo(x);
                        }
                    }
                    else

                    if (clientId[i] == 2)                                              //常规烟 翻版任务
                    {
                        if (values[i] != null && int.Parse(values[i].ToString()) == 0) //接收
                        {
                            int tasknum = plc.ShapeGroup4.ReadD(0).CastTo(-1);         //读取到包号
                            if (tasknum > 0)
                            {
                                plc.UpDateToCgyState(tasknum, 15);//更新任务为接收
                                FmInfo.GetTaskInfo("常规烟翻版:任务包号:" + tasknum + "已经接收!");
                            }
                            //if (plc.startatg)
                            //{
                            //    FmInfo.GetTaskInfo("常规烟,任务已经处于发送状态,接收到多的跳变信号!");
                            //    return;
                            //}
                            string x = await plc.WriteTaskSend_CGY();

                            FmInfo.GetTaskInfo(x);
                        }
                    }
                }
            }
        }
Beispiel #20
0
        /// <summary>
        /// 响应来自服务端的信息
        /// </summary>
        /// <param name="ar"></param>
        private void ReceiveCallBack(IAsyncResult ar)
        {
            try
            {
                int length = socketCore.EndReceive(ar);//结束挂起的异步读取
                //开始异步接受来自服务端的信息
                socketCore.BeginReceive(buffer, 0, 2048, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socketCore);
                if (length == 0)
                {
                    return;
                }
                byte[] data = new byte[length];
                Array.Copy(buffer, 0, data, 0, length);
                Invoke(new Action(() =>
                {
                    string msg = string.Empty;
                    msg        = Encoding.ASCII.GetString(data); //对获取的数据进行编码转换  //传输的数据会有乱码
                    if (msg.Length <= 0)                         // \0\0\0\0\0\\0\0\0\0\0\0\0\0\0\0\0
                    {
                        return;
                    }
                    int start = msg.IndexOf("F");  //从F开始截取
                    int end   = msg.IndexOf("\0"); //从 \0后截取结束
                    if (start < 0)
                    {
                        return;
                    }
                    msg = msg.Substring(start, end);
                    string[] arrData = msg.Trim().Split(',');
                    string outStr    = "";                         //错误信息
                    if (arrData[0].ToLower() == "f")               //F头部 代表机器人完成
                    {
                        if (GlobalPara.JugValueEqualsLastOne(msg)) //如果数据与上一次的相等 则不做任何操作
                        {
                            return;
                        }

                        //S  所在的位置 单抓 3 双抓 5
                        if (msg.Contains("|"))               //如果包含双抓
                        {
                            if (arrData[4].ToLower() == "s") //s头部 代表机器人状态
                            {
                                if (!CheckRobotRunState(arrData[5].Replace('\0', ' ').Trim()))
                                {
                                    return;
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为4的索引不为S," + msg);
                            }

                            string[] newArr = msg.Substring(2).Trim().Split('|');
                            if (newArr.Length == 2)
                            {
                                flag                    = false;
                                string[] arr1           = newArr[0].Trim().Split(',');
                                string[] arr2           = newArr[1].Trim().Split(',');
                                List <string[]> arrlist = new List <string[]>();
                                arrlist.Add(arr1);
                                arrlist.Add(arr2);
                                robotService.UpDateFinishTasks(arrlist, out outStr);
                                //robotService.UpDateFinishTask(arr1, out outStr);//y 修改为一起修改 20190709
                                //robotService.UpDateFinishTask(arr2, out outStr);
                                FmInfo.AutoRefreshUnShow(Convert.ToDecimal(arr2[0]), Convert.ToInt32(arr2[1]));
                                FmInfo.FuncAutoRefsh();//更新显示界面
                                flag = true;
                                //FmInfo.AutoRefreshUnShow(int.Parse(arr2[0]));
                                if (!string.IsNullOrWhiteSpace(outStr))
                                {
                                    FmInfo.GetTaskInfo("机器人: " + outStr);
                                }
                                else
                                {
                                    FmInfo.GetTaskInfo("机器人:任务号" + arr1[0] + ",条烟流水号:" + arr1[1] + ",数据库更新完成!");
                                    FmInfo.GetTaskInfo("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!");
                                    updateLabel("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!", lblFinshiTask);
                                }

                                if (!string.IsNullOrWhiteSpace(outStr))//
                                {
                                    FmInfo.GetTaskInfo(outStr);
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:双抓任务完成信号有误,完成信号长度为" + newArr.Length);
                            }
                        }
                        else//单抓的情况下
                        {
                            if (arrData[3].ToLower() == "s")
                            {
                                if (!CheckRobotRunState(arrData[4].Replace('\0', ' ').Trim()))
                                {
                                    return;
                                }
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为3的索引不为S," + msg);
                            }
                            updateLabel("机器人:收到单抓完成信号", lblFinshiTask);
                            string[] Arr = msg.Substring(2).Trim().Split(',');
                            if (Arr[1] == "0")
                            {
                                return;
                            }
                            flag = false;
                            robotService.UpDateFinishTask(Arr, out outStr);
                            flag = true;
                            FmInfo.AutoRefreshUnShow(Convert.ToDecimal(Arr[0]), Convert.ToInt32(Arr[1]));
                            FmInfo.FuncAutoRefsh();//更新显示界面
                            // FmInfo.AutoRefreshUnShow(int.Parse(Arr[0]));
                            if (!string.IsNullOrWhiteSpace(outStr))
                            {
                                FmInfo.GetTaskInfo("机器人: " + outStr);
                            }
                            else
                            {
                                FmInfo.GetTaskInfo("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!");
                                updateLabel("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!", lblFinshiTask);
                            }
                        }
                    }
                }));
            }
            catch (ObjectDisposedException)
            {
            }
            catch (Exception ex)
            {
                Invoke(new Action(() =>
                {
                    FmInfo.GetTaskInfo("机器人:服务器断开连接。" + ex.Message);
                    //ThreadHeartCheck();
                }));
            }
        }
Beispiel #21
0
        /// <summary>
        /// 发送机器人任务
        /// </summary>
        /// <returns></returns>
        void SendRobotTask()
        {
            FmInfo.GetTaskInfo("机器人:一秒后发送机器人任务");
            Thread.Sleep(1000);
            sendTask : if (RoBotState)//读取机器人状态为自动运行
            {
                try
                {
                    //如果有新增的任务就一直循环取出来发送该条任务,直到该条任务做完,切换下一条任务
                    while (connectSuccess)  //发送机制:取出当前第一条未完成的任务,间隔一秒发送一次,直到这条任务完成,跳到下一条任务!
                    {
                        //获取机器人任务
                        while (!flag)
                        {
                            FmInfo.GetTaskInfo("机器人:处理完成信号中");
                        }
                        if (FirstSend)//如果是第一次发送
                        {
                            robotService.UpdateLastPacktaskNumCigstate();
                            FirstSend = false;
                        }
                        CreateTask : string taskInfo = robotService.GetRobotInfo(out string outStr);
                        bytes = Encoding.ASCII.GetBytes(taskInfo);
                        if (!RoBotState)//如果中途接收到机器人状态为 关闭状态 ,则停止发送任务
                        {
                            goto sendTask;
                        }
                        if (string.IsNullOrWhiteSpace(taskInfo))
                        {
                            // FmInfo.GetTaskInfo("机器人:任务发送完毕");
                            lblTask.Text = "机器人:任务发送完毕";
                            break;
                        }
                        try
                        {
                            if (isClientConnected(socketCore))
                            {
                                socketCore?.Send(bytes, 0, bytes.Length, SocketFlags.None);//发送数据
                                if (!GlobalPara.JugValueEqualsLastOne2(taskInfo))
                                {
                                    FmInfo.GetTaskInfo("机器人:发送数据,任务:" + taskInfo);
                                }                                               //
                                lblTask.Text = "机器人:发送任务:" + taskInfo;
                            }
                            else
                            {
                                connectSuccess = false;
                                FmInfo.GetTaskInfo("机器人:远程主机强制断开一个现有连接,发送任务失败!");
                                lblServerInfo.Text = "机器人:服务器连接失败!";
                                CheckAlive();//断开连接 间隔
                            }
                        }
                        catch (Exception ex)
                        {
                            FmInfo.GetTaskInfo("机器人:任务发送停止,未知错误:" + ex.Message + "\r\n" + outStr + "任务将在10秒后重新发送!");
                            Thread.Sleep(10000);//暂停10秒后 继续读取
                            goto CreateTask;
                        }
                        Thread.Sleep(120); // 0.12秒后再次发送
                    }
                }
                catch (Exception ex)
                {
                    FmInfo.GetTaskInfo("机器人:任务方法,未知错误:" + ex.Message);
                    goto sendTask;
                }
            }
            else
            {
                //FmInfo.GetTaskInfo("机器人自动运行状态为关闭,十秒之后再次检测机器人状态");
                lblTask.Text = "机器人:自动运行状态为关闭,一秒之后再次检测机器人状态";

                Thread.Sleep(1000);//十秒之后再次检测机器人状态
                goto sendTask;
            }
        }