/// <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); } }
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); } } }
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()); } } }
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; } }
// 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 } }