public void AGVThreadFunc(object obj) { try { AGVStatus lastModel = null; int ID = Convert.ToInt16(obj); int[] XmlIndex = getXmlIndex(ID); PostiveLineArr = AGVStatusBLL.getPostiveLine(); platFormDic = AGVStatusBLL.getPlatFormLine(); PlatFormIndex = getPlatFormXmlIndex(PlatFormCount); bool isfirst = true; while (true) { if (IsStart) { AGVStatus thisModel = AGVStatusBLL.GetAgvModel(ID); if (thisModel != null) { setCarData(lastModel, thisModel, XmlIndex); lastModel = thisModel; } } Thread.Sleep(ThreadTime); } } catch (Exception ex) { throw ex; } }
//1 取货 2放货 0未完成 1完成 private void setPlatForm(AGVStatus thisData, AGVStatus lastData) { if ((lastData == null && thisData != null) || (thisData.target != lastData.target && thisData.taskstate != lastData.taskstate)) { if (thisData.taskstate == 1) { if (thisData.complatestate == 1) { ComTCPLib.SetOutputAsUINT(1, PlatFormIndex[int.Parse(thisData.target) - 1], 0); } else { ComTCPLib.SetOutputAsUINT(1, PlatFormIndex[int.Parse(thisData.target) - 1], 1); } } else if (thisData.taskstate == 2) { if (thisData.complatestate == 1) { ComTCPLib.SetOutputAsUINT(1, PlatFormIndex[int.Parse(thisData.target) - 1], 1); } else { ComTCPLib.SetOutputAsUINT(1, PlatFormIndex[int.Parse(thisData.target) - 1], 0); } } } }
private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; TcpConnectorCar1 = new TCPConnector("192.168.10.107", 7171); TcpConnectorCar2 = new TCPConnector("192.168.10.84", 7171); TcpConnectorEM = new TCPConnector("192.168.10.81", 7171); car1Status = new AGVStatus(true, "Car1"); car2Status = new AGVStatus(true, "Car2"); EMStatus = new AGVStatus(false, "EM"); TcpConnectorCar1.MessageReceived += car1Status.Analyze; TcpConnectorCar1.MessageReceived += SetControlObjectStatus; TcpConnectorCar1.MessageReceived += DisplayInformation; TcpConnectorCar2.MessageReceived += car2Status.Analyze; TcpConnectorCar2.MessageReceived += SetControlObjectStatus; TcpConnectorCar2.MessageReceived += DisplayInformation; TcpConnectorEM.MessageReceived += EMStatus.Analyze; TcpConnectorEM.MessageReceived += DisplayInformation; loginThread = new Thread(new ThreadStart(AGVLogin)); loginThread.Start(); }
public static List <AGVStatus> DataTableToAgvList(DataTable dt) { List <AGVStatus> modelList = new List <AGVStatus>(); int rowsCount = dt.Rows.Count; if (rowsCount > 0) { AGVStatus model; for (int n = 0; n < rowsCount; n++) { model = new AGVStatus(); if (dt.Rows[n]["id"].ToString() != "") { model.id = uint.Parse(dt.Rows[n]["id"].ToString()); } if (dt.Rows[n]["line"].ToString() != "") { model.line = dt.Rows[n]["line"].ToString(); } if (dt.Rows[n]["carstate"].ToString() != "") { model.carstate = uint.Parse(dt.Rows[n]["carstate"].ToString()); } if (dt.Rows[n]["palletstate"].ToString() != "") { model.palletstate = uint.Parse(dt.Rows[n]["palletstate"].ToString()); } if (dt.Rows[n]["source"].ToString() != "") { model.source = dt.Rows[n]["source"].ToString(); } if (dt.Rows[n]["target"].ToString() != "") { model.target = dt.Rows[n]["target"].ToString(); } if (dt.Rows[n]["taskstate"].ToString() != "") { model.taskstate = uint.Parse(dt.Rows[n]["taskstate"].ToString()); } if (dt.Rows[n]["complatestate"].ToString() != "") { model.complatestate = uint.Parse(dt.Rows[n]["complatestate"].ToString()); } modelList.Add(model); } } return(modelList); }
private void setCarData(AGVStatus lastData, AGVStatus thisData, int[] xmlIndex) { int CarXmlIndex_line = xmlIndex[3]; int CarXmlIndex_carstate = xmlIndex[1]; int CarXmlIndex_palletstate = xmlIndex[5]; int CarXmlIndex_taskstate = xmlIndex[4]; int CarXmlIndex_dir = xmlIndex[0]; int CarXmlIndex_islastline = xmlIndex[2]; if (lastData == null) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_line, UInt32.Parse(thisData.line)); ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_palletstate, thisData.palletstate); ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_taskstate, thisData.taskstate); if (PostiveLineArr.Contains(thisData.line.ToString())) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_dir, 1); } else { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_dir, 0); } string Platlines = platFormDic[thisData.target]; if (Platlines != null && Platlines.Split(',').Contains(thisData.line)) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_islastline, 1); } else { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_islastline, 0); } ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_carstate, thisData.carstate); setPlatForm(thisData, lastData); } else if (!thisData.Equals(lastData)) { if (thisData.line != lastData.line) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_line, UInt32.Parse(thisData.line)); if (PostiveLineArr.Contains(thisData.line.ToString())) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_dir, 1); } else { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_dir, 0); } } if (thisData.palletstate != lastData.palletstate) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_palletstate, thisData.palletstate); } if (thisData.taskstate != lastData.taskstate) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_taskstate, thisData.taskstate); } if (thisData.target != lastData.target) { string Platlines = platFormDic[thisData.target]; if (Platlines != null && Platlines.Split(',').Contains(thisData.line)) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_islastline, 1); } else { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_islastline, 0); } } if (thisData.carstate != lastData.carstate) { ComTCPLib.SetOutputAsUINT(1, CarXmlIndex_carstate, thisData.carstate); } setPlatForm(thisData, lastData); } }
private void AGVThreadFunc(object obj) { int index = Convert.ToInt32(obj); bool tmp = false; while (true) { #region 临时使用,正式使用时去掉 if (tmp == false) { if (index == 2) { if (agvTempLine[3] > 0) { tmp = true; } } else if (index == 1) { if (agvTempLine[2] > 0) { tmp = true; } } else { tmp = true; } } #endregion if (isStart && tmp) { //数据库最新数据 AGVStatus model = AGVStatusBLL.GetModel(index); if (model.position == -1) { //内存数据 //OCSStatus oldModel = ocsModelList.Find(s => s.carId == index); int i = agvModelList.FindIndex(s => s.carId == index); //初始 if (i == -1) { int count = AGVStatusBLL.getCountByLine(model.line); agvCarPos[index] = (count - model.sequence) * agvCarWidth + agvStartPos; agvModelList.Add(model); } else { //驱动段改变 if (agvModelList[i].line != model.line) { if (model.direction == 1) { agvCarPos[index] = agvStartPos; } else { agvCarPos[index] = agvLineLength[int.Parse(model.line)] - agvStartPos; } } else { if (model.direction == 1) { if (agvCarPos[index] < agvLineLength[int.Parse(model.line)]) { agvCarPos[index] += agvSpeed; } } else if (model.direction == 2) { if (agvCarPos[index] - agvSpeed < agvEndPos) { agvCarPos[index] = agvEndPos; } else { agvCarPos[index] -= agvSpeed; } } } agvModelList[i] = model; } } else { agvCarPos[index] = float.Parse(model.position.ToString()); } int index1 = GetIdex.getDicOutputIndex("agvCar" + index + "01_input_pos"); ComTCPLib.SetOutputAsREAL32(handle, index1, float.Parse(agvCarPos[index].ToString())); index1 = GetIdex.getDicOutputIndex("agvCar" + index + "01_input_Path"); ComTCPLib.SetOutputAsINT(handle, index1, int.Parse(model.line.ToString())); } Thread.Sleep(ocsThreadTime); } }