Ejemplo n.º 1
0
        /// <summary>
        /// 格口状态查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SelectState()
        {
            string errText = string.Empty;

            try
            {
                for (short prot = 1; prot < 19; prot++)
                {
                    string val = PlcFactory.Instance().ReadPlcDbValue("满袋" + prot.ToString() + "%", ref errText);
                    //1 锁定  0 解锁
                    if (val == "-1")
                    {
                        createdata.UpdateErrProtSts(prot.ToString(), "", "1");
                        createdata.clearCount(prot.ToString());
                    }
                    else if (val == "0")
                    {
                        createdata.UpdateErrProtSts(prot.ToString(), "", "0");
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog2("袋子满了 ex" + ex.Message);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///格口状态改变发送  WCS->WMS
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void MouthState()
        {
            try
            {
                //查询格口号状态为 1或0的格口
                DataTable tbProt = createdata.GetProtSend();
                if (tbProt != null)
                {
                    if (tbProt.Rows.Count > 0)
                    {
                        string      seqId  = string.Empty;
                        List <byte> wmsSeq = new List <byte>();
                        foreach (DataRow row in tbProt.Rows)
                        {
                            wmsSeq.Clear();      //清空byte集合
                            byte stsPort = 0X01; //锁定
                            if (row["sts"].ToString() == "0")
                            {
                                stsPort = 0X02;///解锁
                            }
                            short  prot  = short.Parse(row["prot"].ToString());
                            byte[] array = BitConverter.GetBytes(prot);    //以字节数组的形式返回返回指定的 16 位有符号整数值
                            wmsSeq.Add(array[1]);
                            wmsSeq.Add(array[0]);
                            wmsSeq.Add(stsPort);

                            bool sendSts = WmsCommon.Instance().ErrWmsSendData(0X86, 0X08, wmsSeq, ref seqId); //bool 布尔类型
                            if (sendSts)
                            {
                                createdata.UpDataWcsWms(prot.ToString());
                                if (stsPort == 0x01)
                                {
                                    Log.WriteLog2(prot + "发送格口状态成功: 锁定");
                                }
                                else
                                {
                                    Log.WriteLog2(prot + "发送格口状态成功: 解锁");
                                }
                                tb_message.AppendText("格口 " + prot + " 发送状态成功\r\n");
                            }
                            //发送给WMS 要求WMS打印
                            if (stsPort == 0X01)
                            {
                                wmsSeq.Clear();
                                array = BitConverter.GetBytes(1);
                                wmsSeq.Add(array[1]);
                                wmsSeq.Add(array[0]);
                                WmsCommon.Instance().ErrWmsSendData(0X85, 0X07, wmsSeq, ref seqId);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog("发送WMS格口状态 ex" + ex.Message);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 监控WCS跟WMS连接状态
 /// </summary>
 public void ConnectState()
 {
     iptb.Rows.Clear();        //清空表数据
     try
     {
         for (int i = 0; i < WmsCommon.Instance().clients.Count; i++)
         {
             if (i < WmsCommon.Instance().clients.Count)
             {
                 SocketStatus wmssocket = WmsCommon.Instance().clients[i];
                 if (wmssocket != null)
                 {
                     if (wmssocket.scocKet.Connected)
                     {
                         i++;
                         DataRow r = iptb.NewRow();
                         r["ip"]   = wmssocket.Ip;
                         r["prot"] = wmssocket.Port;
                         iptb.Rows.Add(r);
                     }
                     else
                     {
                         wmssocket.scocKet.Close();
                         WmsCommon.Instance().clients.Remove(wmssocket);
                     }
                 }
             }
         }
         if (iptb != null)
         {
             gridControl1.DataSource = iptb;
         }
     }
     catch (Exception ex)
     {
         tb_message.AppendText("连接异常" + ex.Message + "\r\n");
         Log.WriteLog2("连接异常" + ex.Message);
         return;
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 实际落袋发送   WCS->WMS
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void PocketSend()
        {
            try
            {
                DataTable tb = createdata.GetPlcSednCode();
                if (tb != null)
                {
                    if (tb.Rows.Count > 0)
                    {
                        foreach (DataRow row in tb.Rows)
                        {
                            string      seqId  = string.Empty;
                            List <byte> wmsSeq = new List <byte>();
                            string      code   = row["ExpressNo"].ToString();
                            if (code.Trim().Length == 0)
                            {
                                continue;
                            }
                            // 如果code为noread,以12个0作为单号发送
                            if ("noread\r" == code)
                            {
                                code = "000000000000";
                            }
                            byte[] arrayL = System.Text.Encoding.ASCII.GetBytes(code);
                            if (row["endprot"].ToString().Trim().Length == 0)
                            {
                                return;
                            }
                            short  endprot = short.Parse(row["endprot"].ToString());
                            byte[] array;
                            //// 如果数据库查到的落袋格口为14,实际是因为格口锁定而落入13格口
                            //if (endprot == 14)
                            //{
                            //    short readport = 13;
                            //    array = BitConverter.GetBytes(readport);
                            //}
                            //else
                            //{
                            array = BitConverter.GetBytes(endprot); //数据域 格口 2字节
                            //}
                            wmsSeq.Add(array[1]);
                            wmsSeq.Add(array[0]);
                            wmsSeq.Add(byte.Parse(code.Length.ToString()));

                            foreach (char letter in arrayL)
                            {
                                byte value = Convert.ToByte(letter);
                                wmsSeq.Add(value);  //数据域 运单号 动态长度
                            }

                            short prot = short.Parse(row["prot"].ToString());

                            if (prot == 19)
                            {
                                wmsSeq.Add(0XF0);
                            }
                            else
                            {
                                if (endprot == 19)
                                {
                                    wmsSeq.Add(0XF0);
                                }
                                // 如果因为满袋而未分拣,plc会返回落袋格口99
                                else if (endprot == 99)
                                {
                                    wmsSeq.Add(0x02);
                                }
                                else
                                {
                                    wmsSeq.Add(0X00); //数据域 异常码 1字节
                                }
                            }
                            wmsSeq.Add(0X02);  //数据域 TAG 1字节
                            byte lenData = byte.Parse((5 + wmsSeq.Count).ToString());
                            bool sendSts = WmsCommon.Instance().ErrWmsSendData(0X84, lenData, wmsSeq, ref seqId);
                            if (sendSts)
                            {
                                string plcId = row["plcid"].ToString();
                                createdata.UpDataWmsPlcData(plcId);
                                createdata.UpDataWmsseqIdData(seqId, plcId);
                                Log.WriteLog2(DateTime.Now + " 发送落袋信息成功。 条码:" + code + "  实际格口:" + plcId);
                                tb_message.AppendText(DateTime.Now.ToString() + code + " 落袋发送消息成功\r\n");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLog2("发送WMS落袋信息 ex" + ex.Message);
            }
        }
Ejemplo n.º 5
0
        public void BagCount()
        {
            while (true)
            {
                Thread.Sleep(20);
                try
                {
                    string errText = string.Empty;
                    for (int i = 0; i <= 18; i++)
                    {
                        string plcid = PlcFactory.Instance().ReadPlcDbValue("EndBag" + i + "%1", ref errText);
                        //Log.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+" 读取到PLCID:" + plcid);
                        //string mouthid = PlcFactory.Instance().ReadPlcDbValue("满袋" + i + "%", ref errText);
                        //Console.WriteLine(mouthid);
                        HashForeach.HashAdd(plcid, i);
                        //HashForeach.HashStateAdd(i, mouthid);
                    }
                    Dictionary <string, int> openWith1 = HashForeach.openWith;
                    Dictionary <int, string> openWith2 = HashForeach.openstate;

                    DataTable tb = createdata.MatchingData();
                    if (tb != null)
                    {
                        if (tb.Rows.Count > 0)
                        {
                            foreach (DataRow row in tb.Rows)
                            {
                                string plcid = row["plcid"].ToString();
                                string seqId = string.Empty;
                                string code  = row["ExpressNo"].ToString();

                                if (code == "ERROR\r")
                                {
                                    // 更改实际落袋格口 endport
                                    //createdata.UpdateEndprot(19, code);
                                    //更改格口数量
                                    createdata.UpdateCount(19);
                                    createdata.UpdateMatching(plcid);
                                    createdata.UpdateEndprot(19, plcid);
                                    Log.WriteLog(DateTime.Now + " 条码为空。 条码:" + code);
                                    break;
                                }
                                //格口锁定情况下
                                bool st = createdata.SelectState(plcid, code);
                                if (st)
                                {
                                    createdata.UpdateCount(19);
                                    createdata.UpdateMatching(plcid);
                                    createdata.UpdateEndprot(19, plcid);
                                    Log.WriteLog(DateTime.Now + " 格口锁定。 条码:" + code);
                                    break;
                                }
                                else
                                {
                                    try
                                    {
                                        int i = openWith1[plcid];
                                        openWith1.Remove(plcid);
                                        createdata.UpdateCount(i);
                                        createdata.UpdateMatching(plcid);
                                        createdata.UpdateEndprot(i, plcid);
                                        break;
                                    }
                                    catch (Exception ex)
                                    {
                                        Log.WriteLog2(DateTime.Now + "更改正常条码落袋数据异常:" + ex.Message.ToString());
                                    }
                                }
                                DateTime time1       = Convert.ToDateTime(row["begindate"]);
                                DateTime d1          = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//当前日期
                                int      unusualtime = Convert.ToInt32(d1.Subtract(time1).TotalSeconds.ToString());
                                if (unusualtime > 20)
                                {
                                    createdata.UpdateCount(19);
                                    createdata.UpdateMatching(plcid);
                                    createdata.UpdateEndprot(19, plcid);
                                    Log.WriteLog(DateTime.Now + " 条码异常。 条码:" + code);
                                }
                            }
                            BindData();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(DateTime.Now + "读取或对比PLC DB异常:" + ex.Message.ToString());
                }
            }
        }