Ejemplo n.º 1
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.º 2
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            lock (this)
            {
                try
                {
                    ConnectState();
                    PocketSend();
                    MouthState();
                    //暂时注释
                    //string plcBacode = PlcFactory.Instance().ReadPlcDbValue("PLCBarcode%", ref errText);
                    //string plcId = PlcFactory.Instance().ReadPlcDbValue("PLCNo%", ref errText);
                    //if (plcId == "01")
                    //{
                    //    sts_plc.StateIndex = 1;
                    //}
                    //else
                    //{
                    //    sts_plc.StateIndex = 3;
                    //}

                    //if (plcId != "0" && plcId != "01")
                    //{
                    //    string EndProt = PlcFactory.Instance().ReadPlcDbValue("WCSBag%", ref errText);
                    //    //int i = datalog.UpDataPlcData(plcId, plcBacode, EndProt);
                    //    int i = createdata.UpDataPlcData(plcId, plcBacode, EndProt);
                    //    if (i > 0 || wmsld > 2)
                    //    {
                    //        Log.WriteLog(DateTime.Now.ToString() + "落袋信息写入DB" + plcId + " -> " + EndProt + " ; i = " + i);
                    //        object[] values = new object[2];
                    //        values[0] = "0";
                    //        values[1] = "0";
                    //        PlcFactory.Instance().WritePlcDataDB("清除落袋%", values);
                    //        wmsld = 0;
                    //    }
                    //    else
                    //    {
                    //        wmsld++;
                    //    }
                    //}
                }
                catch (Exception ex)
                {
                    Log.WriteLog("定时器1异常" + ex.Message);
                }
            }
        }
Ejemplo n.º 3
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());
                }
            }
        }
Ejemplo n.º 4
0
        private void DataChange(string Data, int seq)
        {
            try
            {
                #region  快递路向分拣
                lock (DataReadLock)    //多线程避免同时运行造成数据混乱。lock的一般是对象,不是数值和字符串。
                {
                    string      code         = Data;
                    string      twoDimencode = string.Empty; //二维码
                    string      linercode    = string.Empty; //一维码
                    string      seqOlcId     = string.Empty;
                    List <byte> wmsSeq       = new List <byte>();
                    Log.WriteLog("扫描条码" + code);
                    var time0 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");

                    tb_message.AppendText(DateTime.Now.ToString() + "扫描条码" + code + "\r\n");
                    byte lendata = 0;
                    if (code == "noread")
                    {
                        tb_message.AppendText(DateTime.Now.ToString() + "扫码失败 包裹区异常口" + "\r\n");
                        code      = "noread";
                        lendata   = 0X0B;
                        linercode = "noread";
                    }
                    else
                    {
                        if (code.Contains("&"))
                        {
                            string[] codelist = code.Split('&');
                            twoDimencode = codelist[1];
                            linercode    = codelist[0];

                            if (twoDimencode.Contains("http"))
                            {
                                code = linercode;
                            }
                            else
                            {
                                // http://ucmp.sf-express.com/service/weixin/activity/wx_b2sf_order?p1=439038437579
                                // 处理异常条码,如: 43100002%MMMMMMMMMMMMMMMMMMMMMMMM={'k1':'574W','k2':'574TF','k3':'017','k4':'T4','k5':'049842774482','k6':''}
                                if (linercode.Length < 12)
                                {
                                    // 一维码长度小于12时,从二维码中取K5值
                                    try
                                    {
                                        string  jsonStr = code.Substring(twoDimencode.IndexOf("M=") + 2);
                                        JObject jo      = (JObject)JsonConvert.DeserializeObject(jsonStr);
                                        linercode = jo["k5"].ToString();
                                        code      = twoDimencode + "&" + linercode + "&*&*&*&*&*&*&";
                                    }
                                    catch (Exception e)
                                    {
                                        // 如果转二维码转json失败,说明二维码也不正确,此时code判定为noread
                                        linercode = "noread";
                                        code      = "noread";
                                    }
                                }
                                else
                                {
                                    // 正常情况下直接拼接一维码和二维码
                                    code = twoDimencode + "&" + linercode + "&*&*&*&*&*&*&";
                                }
                            }
                        }
                        else if (code.Length < 15)
                        {
                            linercode = code;
                            // code = "&" + code;
                            code = code;
                            //PlcFactory.Instance().WritePlcDataDB("ToPlc_seq%", new object[] { seq });
                            //PlcFactory.Instance().WritePlcDataDB("ToPlc_barcode%", new object[] { Data });
                            //if (i == 18)
                            //{
                            //    i = 0;
                            //    PlcFactory.Instance().WritePlcDataDB("ToPlc_bag%", new object[] { 19 });
                            //}
                            //else
                            //{
                            //    i++;
                            //    PlcFactory.Instance().WritePlcDataDB("ToPlc_bag%", new object[] { i });
                            //}
                            //datalog.UpdateDjmx(Data, seq.ToString(), i.ToString());
                            //Log.WriteLog2(DateTime.Now.ToString() + "----------¥¥¥¥¥¥¥¥¥-------" + (i.ToString()));

                            //int sum = 0;
                            //DataTable tb = datalog.SelectSum(i.ToString());
                            //if (tb.Rows.Count > 0)
                            //{
                            //    int test = Convert.ToInt32(tb.Rows[0]["sts"]);
                            //    if (DBNull.Value != tb.Rows[0]["count"])
                            //    {
                            //        int a = Convert.ToInt32(tb.Rows[0]["count"]);
                            //        sum = a + 1;
                            //    }
                            //    else
                            //    {
                            //        sum = 0;
                            //    }
                            //    datalog.UpdateProtStsSum(i.ToString(), sum);
                            //}
                            //BindData();
                        }
                        else
                        {
                            //只有二维码
                            //{'k1':'574W''k2':'574JF''k3':'008''k4':'T4''k5':'049842738896''k6':''}
                            try
                            {
                                string  linecode = code.Substring(code.IndexOf("M=") + 2);
                                JObject jo       = (JObject)JsonConvert.DeserializeObject(linecode);
                                code      = code + "&" + jo["k5"].ToString() + "&";
                                linercode = jo["k5"].ToString();
                            }
                            catch (Exception ex)
                            {
                                code      = "noread";
                                lendata   = 0X0B;
                                linercode = "noread";
                            }
                        }
                        lendata = byte.Parse((code.Length + 5).ToString());
                    }
                    if (code.Trim().Length == 0)
                    {
                        Log.WriteLog("scan error" + linercode);
                        return;
                    }
                    byte[] array = System.Text.Encoding.ASCII.GetBytes(code);
                    foreach (byte letter in array)
                    {
                        wmsSeq.Add(letter);
                    }
                    seqOlcId = seq.ToString();
                    WmsCommon.Instance().ErrWmsSendData(0X83, lendata, wmsSeq, ref seqOlcId);
                    WmsCommon.Instance().setCode(linercode, seqOlcId);
                    WmsCommon.Instance().map[seqOlcId] = linercode;

                    //datalog.InsertTask(linercode);

                    Log.WriteLog("发送给WMS:  " + linercode);
                    createdata.InsertTask(linercode, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                }

                #endregion
            }
            catch (Exception ex)
            {
                Log.WriteLog("DataChange事件异常:" + ex.Message.ToString() + ":" + Data + ":");
                return;
            }
        }
Ejemplo n.º 5
0
        //  public string SeqId = string.Empty;
        private void HandleMessageReceived(ClientManager cm, TimedEventArgs ea) //处理接收信息
        {
            ChatSocket chatSocket = cm.ChatSocket;


            if (chatSocket.Command == ChatCommand.PublicMessage)
            {
                // SendResponsePacketTo(aClient, chatSocket.Command, pck); if (chatSocket.Command == ChatCommand.PrivateMessage)
            }
            else
            {
                string     returnStr   = "";
                ChatSocket chatSockets = cm.ChatSocket;

                byte[] recby = chatSocket.ReceiveByte;
                string pck   = chatSockets.Metatype;
                //数据判断及解析
                if (recby != null)
                {
                    if (recby.Length < 3)
                    {
                        return;
                    }

                    for (int i = 0; i < recby.Length; i++)
                    {
                        returnStr += recby[i].ToString("X2"); //ToString("X2") 为C#中的字符串格式控制符
                    }
                }

                if (returnStr.Trim().Length < 5)
                {
                    return;
                }

                // 开始逻辑判断
                returnStr = returnStr.Substring(2);
                if (returnStr.Trim().Length == 0)
                {
                    return;
                }
                if (returnStr.Length < 12)
                {
                    return;
                }

                string seqWms = returnStr.Substring(4, 8);
                string flag   = returnStr.Substring(12, 2);

                if (flag == "84")
                {
                    Log.WriteLog(DateTime.Now + "接受顺丰落袋反馈消息:" + returnStr);
                    return;
                }

                if (flag == "85")
                {
                    Log.WriteLog(DateTime.Now + "接受顺丰打印反馈消息:" + returnStr);
                    return;
                }

                if (flag == "86")
                {
                    Log.WriteLog(DateTime.Now + "接受顺丰满袋反馈消息:" + returnStr);
                    return;
                }

                if (flag == "83")
                {
                    lock (lckdata)
                    {
                        try
                        {
                            string    postStr   = "AA" + returnStr;
                            Post      post      = new Post(postStr);
                            Data83Rec data83Rec = new Data83Rec(post.Data);
                            string    codeProt  = data83Rec.Code;
                            string    sendIdt   = "" + data83Rec.Seq;
                            // noread的情况下,code长度为0
                            if (0 == data83Rec.CodeLen)
                            {
                                codeProt = map[sendIdt].ToString();
                            }

                            map.Remove(sendIdt);
                            setCode("", "");
                            object[] values = new object[3];
                            values[0] = GetPlcId();

                            Log.WriteLog("接受顺丰格口返回消息:" + returnStr);
                            string port1 = data83Rec.Port;
                            Log.WriteLog(port1 + "   wms return ");
                            int truePort = 0;
                            //if (port1.Contains("F") || port1.Contains("E") || port1.Contains("D"))
                            //{
                            //    values[1] = 13;
                            //}
                            //else
                            //{
                            truePort  = Convert.ToInt32(port1, 16);
                            values[1] = truePort;
                            //}
                            values[2] = sendIdt;

                            PlcFactory.Instance().WritePlcDataDB("ToPlc_seq%", new[] { values[2] });
                            PlcFactory.Instance().WritePlcDataDB("ToPlc_barcode%", new object[] { codeProt });

                            //格口状态检测,异常则去19
                            string errText = String.Empty;
                            //string SL_State = PlcFactory.Instance().ReadPlcDbValue("满袋" + values[1].ToString() + "%", ref errText);
                            //if (SL_State.Equals("-1"))
                            //{
                            //    values[1] = 19;
                            //}
                            PlcFactory.Instance().WritePlcDataDB("ToPlc_bag%", new object[] { values[1] });
                            Log.WriteLog(values[0].ToString() + "写入PLC成功" + port1 + " plc" + sendIdt + "WMS反馈落袋格口:");
                            if (codeProt.Trim() != "")
                            {
                                //原先是从记录表开始存储  然后现在添加到正式表并更改记录表里条码状态字段
                                //datalog.AddDjmx(codeProt, values[0].ToString(), values[1].ToString());
                                //现在的思路 在开始存储的时候就存在正式表里 然后在这里更改条码的一些字段
                                createdata.UpdateDjmx(codeProt, values[0].ToString(), values[1].ToString());
                            }

                            //孙 添加数量
                            //int sum = 0;
                            //DataTable tb = createdata.SelectSum(values[1].ToString());
                            //if (tb.Rows.Count > 0)
                            //{
                            //    int test = Convert.ToInt32(tb.Rows[0]["sts"]);
                            //    if (DBNull.Value != tb.Rows[0]["count"])
                            //    {
                            //        int i = Convert.ToInt32(tb.Rows[0]["count"]);
                            //        sum = i + 1;
                            //    }
                            //    else
                            //    {
                            //        sum = 1;
                            //    }
                            //    createdata.UpdateProtStsSum(values[1].ToString(), sum);
                            //}
                        }
                        catch (Exception ex)
                        {
                            Log.WriteLog(DateTime.Now + "接受顺丰格口返回消息异常 :" + returnStr);
                            setCode("", "");
                        }
                    }
                    return;
                }

                if (flag == "88")
                {
                    string port  = returnStr.Substring(26, 4); //格口
                    string error = returnStr.Substring(30, 1); //格口
                    string ss    = returnStr.Substring(30, 1);
                    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                    byte[] byteArray    = new byte[] { byte.Parse(ss) };
                    string strCharacter = asciiEncoding.GetString(byteArray);
                    //datalog.UpdateErrProtSts(port, strCharacter, "2");
                    createdata.UpdateErrProtSts(port, strCharacter, "2");
                    List <byte> wmsSeq = new List <byte>();
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(0, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(2, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(4, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(6, 2), 16));
                    string seqId = string.Empty;
                    ErrWmsSendData(0x88, 0x0A, wmsSeq, ref seqId);
                    return;
                }

                if (flag == "89")
                {
                    string seqId = string.Empty;
                    string port  = returnStr.Substring(26, 4); //格口
                    //datalog.UpdateErrProtSts(port, "", "0");
                    createdata.UpdateErrProtSts(port, "", "0");
                    List <byte> wmsSeq = new List <byte>();
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(0, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(2, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(4, 2), 16));
                    wmsSeq.Add(Convert.ToByte(seqWms.Substring(6, 2), 16));

                    ErrWmsSendData(0x89, 0x0A, wmsSeq, ref seqId);
                    return;
                }

                #region 心跳回复

                if (flag == "80") //心跳回复
                {
                    new Thread((ThreadStart) delegate
                    {
                        try
                        {
                            List <byte> wmsSeq = new List <byte>();
                            wmsSeq.Add(0x00);
                            wmsSeq.Add(Convert.ToByte(seqWms.Substring(0, 2), 16));
                            wmsSeq.Add(Convert.ToByte(seqWms.Substring(2, 2), 16));
                            wmsSeq.Add(Convert.ToByte(seqWms.Substring(4, 2), 16));
                            wmsSeq.Add(Convert.ToByte(seqWms.Substring(6, 2), 16));
                            string data  = string.Empty;
                            byte[] array = System.Text.Encoding.ASCII.GetBytes("LS01");
                            for (int j = 0; j < array.Length; j++)
                            {
                                wmsSeq.Add(array[j]);
                            }

                            string seqId = string.Empty;
                            ErrWmsSendData(0x80, 0x0E, wmsSeq, ref seqId);
                        }
                        catch (Exception ex)
                        {
                            Log.WriteLog(seqWms);
                        }
                    }).Start();
                    return;

                    ;
                }

                #endregion

                #region 自检消息回复

                if (flag == "81") //自检消息回复
                {
                    new Thread((ThreadStart) delegate
                    {
                        string errtext = string.Empty;

                        List <byte> wmsSeq = new List <byte>();
                        wmsSeq.Add(0x00);
                        wmsSeq.Add(Convert.ToByte(seqWms.Substring(0, 2), 16));
                        wmsSeq.Add(Convert.ToByte(seqWms.Substring(2, 2), 16));
                        wmsSeq.Add(Convert.ToByte(seqWms.Substring(4, 2), 16));
                        wmsSeq.Add(Convert.ToByte(seqWms.Substring(6, 2), 16));
                        string seqId = string.Empty;
                        ErrWmsSendData(0x81, 0x0A, wmsSeq, ref seqId);

                        #region 检测设备

                        string sts          = PlcFactory.Instance().ReadPlcDbValue("读取序号%", ref errtext).ToString();
                        List <byte> wcsData = new List <byte>();
                        wmsSeq.Clear();
                        if (sts != "01") //Plc故障
                        {
                            // List<byte> wmsSeq = new List<byte>();
                            wmsSeq.Add(0x00);

                            ErrWmsSendData(0x82, 0x06, wmsSeq, ref seqId);
                        }
                        else
                        {
                            wmsSeq.Add(0x01);

                            ErrWmsSendData(0x82, 0x06, wmsSeq, ref seqId);
                        }
                    }).Start();

                    #endregion
                }

                #endregion
            }
        }