using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.NetworkInformation; using System.Threading; using System.Collections; using System.Runtime.InteropServices; using System.Globalization; using AGVSystem.Cls; using Automation.BDaq; using AGVSystem.A17168; using HxBusiness; namespace AGVSystem { public partial class Frm_A17168 : Form { public static int iJsState = 0; public static ClsDBConn_sql newdb = new ClsDBConn_sql(); public static Cls_A17168 Agvcontrol = new Cls_A17168(); public static Frm_A17168 frm; public static DataSet ds_Station_Info = new DataSet(); public static DataSet ds_Agv_Info_Interface = new DataSet(); public static ClsDBConn_sql db_station = new ClsDBConn_sql(); public static ClsDBConn_sql db_Agv_Info = new ClsDBConn_sql(); public static BusinessManage businessCtrl; /// /// 第三方交管自动归还秒数 /// public static int TraffAutoTimet = 0; /// /// 第三方交管路口占用列表 /// public static List autoLeavedDic = new List(); public static Dictionary leavedDic = new Dictionary(); /// /// Array_Station_Info [17,12] /// 17行 12列 数据库中去除前两列的数据 /// public static int[,] Array_Station_Info = new int[17, 17]; /// /// Btn_Filter [17,2] /// 17条线 集配与线边的按钮 /// public static int[,] Btn_Filter = new int[17, 3]; /// /// 存储线边按钮放行信号 /// 为实现线边按钮放行后,集配区放行 /// public static int[,] btn_line = new int[17, 2]; //保存机械手读取信息 public static int[,] Array_Robot_Status = new int[4, 8]; //保存机械手将要写入的信息 public static byte[,] Array_Robot_Set = new byte[4, 8]; public static byte[,] Array_Robot_Set_temp = new byte[4, 8]; /// /// 线边AGV数量 /// public static int[] nLine_Point_AGV_Num = new int[17]; //private LineShape lp = new LineShape(); /// /// PB[17, 6] /// public static PictureBox[,] PB = new PictureBox[17, 9]; [DllImport("kernel32")] public static extern uint GetTickCount(); public static Panel P1; public static Panel P2; public static Panel P3; public static Panel P4; public static Panel P5; public static Panel P6; public static Panel P7; public static Panel P8; public static Panel P9; public static Panel P10; public static Panel P11; private PictureBox[] led = new PictureBox[16]; private Panel[] pnl = { P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11 }; /// /// AGV智能管理启动状态 /// public static bool AGV_Running = true; /// /// 保存所有AGV Socket客户端 /// public static ArrayList al_AGVClientCls = new ArrayList(); private DataSet agv_list = new DataSet(); public Frm_A17168() { //byte[] a = new byte[8]; //a[6] = 99; //int[,] n = new int[4, 8]; //n=Cls_Method.Array_Robot_Info(a); //Cls_Method.HEX_To_BIN(34); InitializeComponent(); frm = this; mainfrm.Map1 = panel3; mainfrm.Map2 = panel2; mainfrm.Map3 = panel1; businessCtrl = new BusinessManage(); //初始化第三方交管路口占用列表 if (businessCtrl != null && businessCtrl.apiModel != null) { TraffAutoTimet = businessCtrl.apiModel.AutoTime; if (!string.IsNullOrEmpty(businessCtrl.apiModel.waitRfidList)) { autoLeavedDic = new List(); foreach (string areaCode in businessCtrl.apiModel.waitRfidList.Split(',')) { autoLeavedDic.Add(new TrafficModel { areaCode = areaCode }); } } } this.ControlBox = false; this.Width = mainfrm.newmainfrm.ClientSize.Width - 5; this.Height = mainfrm.newmainfrm.ClientSize.Height - 29 - 74 - 22 - 5; Func.db_conn = new ClsDBConn_sql(); if (Cls.Param.Card1_Interval > 0) { try { instantDiCtrl1.SelectedDevice = mainfrm.myDevice_DI0; instantDoCtrl1.SelectedDevice = mainfrm.myDevice_DO0; tm_card.Interval = Cls.Param.Card1_Interval; tm_card.Enabled = true; instantDiCtrl1.SnapStart(); } catch { } } if (Cls.Param.Card2_Interval > 0) { try { instantDiCtrl2.SelectedDevice = mainfrm.myDevice_DI1; instantDoCtrl2.SelectedDevice = mainfrm.myDevice_DO1; tm_card.Interval = Cls.Param.Card2_Interval; tm_card.Enabled = true; instantDiCtrl2.SnapStart(); } catch { } } if (Cls.Param.Card3_Interval > 0) { try { instantDiCtrl3.SelectedDevice = mainfrm.myDevice_DI2; instantDoCtrl3.SelectedDevice = mainfrm.myDevice_DO2; tm_card.Interval = Cls.Param.Card3_Interval; tm_card.Enabled = true; instantDiCtrl3.SnapStart(); } catch { } } pnl1.Height = Cls.Param.Icon_Size; pnl2.Height = Cls.Param.Icon_Size; pnl3.Height = Cls.Param.Icon_Size; pnl4.Height = Cls.Param.Icon_Size; pnl5.Height = Cls.Param.Icon_Size; pnl6.Height = Cls.Param.Icon_Size; pnl7.Height = Cls.Param.Icon_Size; pnl8.Height = Cls.Param.Icon_Size; pnl9.Height = Cls.Param.Icon_Size; pnl10.Height = Cls.Param.Icon_Size; pnl11.Height = Cls.Param.Icon_Size; P1 = pnl1; P2 = pnl2; P3 = pnl3; P4 = pnl4; P5 = pnl5; P6 = pnl6; P7 = pnl7; P8 = pnl8; P9 = pnl9; P10 = pnl10; P11 = pnl11; pnl[0] = P1; pnl[1] = P2; pnl[2] = P3; pnl[3] = P4; pnl[4] = P5; pnl[5] = P6; pnl[6] = P7; pnl[7] = P8; pnl[8] = P9; pnl[9] = P10; pnl[10] = P11; //led[0] = pictureBox1; //led[1] = pictureBox2; //led[2] = pictureBox3; //led[3] = pictureBox4; //led[4] = pictureBox5; //led[8] = pictureBox6; //led[9] = pictureBox7; //led[10] = pictureBox8; //led[11] = pictureBox9; //led[12] = pictureBox10; agvLocation = new agvlocation(AgvLocation); //dataset_Set = new dataset_set(Dataset_Set); pictureboxSet = new pictureboxset(PictureboxSet); string strsql = ""; Form.CheckForIllegalCrossThreadCalls = false; ClsDBConn_sql db = new ClsDBConn_sql(); strsql = "SELECT [ID] as '设备编号' ,[Loc_ID] as '设备位置' ,'' as '状态' , '0' as '复位','' as '在线状态' FROM [AgvInfo] order by id"; agv_list = db.connDt(strsql).Copy(); dataGridView1.DataSource = agv_list.Tables[0]; //设置AGV列表信息 strsql = "SELECT Line_name FROM [Assembly_Line] order by ID"; mainfrm.ds_ProductLine.Tables.Clear(); mainfrm.ds_ProductLine = db.connDt(strsql); vScrollBar1.Maximum = mainfrm.ds_ProductLine.Tables[0].Rows.Count; for (int i = 0; i < mainfrm.ds_ProductLine.Tables[0].Rows.Count; i++) { if (i == 0) { lab1.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl1.Visible = true; } else if (i == 1) { lab2.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl2.Visible = true; } else if (i == 2) { lab3.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl3.Visible = true; } else if (i == 3) { lab4.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl4.Visible = true; } else if (i == 4) { lab5.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl5.Visible = true; } else if (i == 5) { lab6.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl6.Visible = true; } else if (i == 6) { lab7.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl7.Visible = true; } else if (i == 7) { lab8.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl8.Visible = true; } else if (i == 8) { lab9.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl9.Visible = true; } else if (i == 9) { //lab10.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl10.Visible = true; } else if (i == 10) { lab11.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl11.Visible = true; } else if (i == 12) { lab13.Text = mainfrm.ds_ProductLine.Tables[0].Rows[i][0].ToString(); pnl10.Visible = true; } } if (mainfrm.ds_ProductLine.Tables[0].Rows.Count <= 3) { panel8.Height = Cls.Param.Icon_Size * mainfrm.ds_ProductLine.Tables[0].Rows.Count; if (mainfrm.ds_ProductLine.Tables[0].Rows.Count == 1) { lab1.Text = "设备列表:"; } } else panel8.Height = Cls.Param.Icon_Size * 3; //AGV列表设置结束 //初始化小车btn 数量 Func.agvcar = new AgvCar.Agv[Cls.Param.AGV_Qty]; Thread dbThread = new Thread(UPDateDBList.UpDateDb); dbThread.IsBackground = true; dbThread.Start(); //第三方交管自动归还监听线程 Thread trafficThread = new Thread(TrafficCtrl.Listen); trafficThread.IsBackground = true; trafficThread.Start(); //初始化小车控制线程 Cls.Param.th_GetData = new Thread[Cls.Param.AGV_Qty]; strsql = "SELECT [ID] ,[LOC_ID] ,[Warn_ID] FROM [Agv_Info_Interface]"; //db_Agv_Info = new ClsDBConn_sql(); ds_Agv_Info_Interface = db_Agv_Info.connDt(strsql); int COUNT = ds_Agv_Info_Interface.Tables[0].Rows.Count; strsql = "select id , line_name from Assembly_Line"; mainfrm.ds_ProductLine.Clear(); mainfrm.ds_ProductLine = db.connDt(strsql).Copy(); strsql = "SELECT [Warn_ID] ,[Warn_Info] ,[Warn_Level] FROM [Warn_Info] order by Warn_ID"; ds_warn = db.connDt(strsql).Copy(); for (int row = 0; row < mainfrm.ds_Agvlist.Tables[0].Rows.Count; row++) { CreateBtnAgv(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Internal_ID"].ToString(), mainfrm.ds_Agvlist.Tables[0].Rows[row]["Assembly_Line"].ToString(), mainfrm.ds_Agvlist.Tables[0].Rows[row]["ID"].ToString(), mainfrm.ds_Agvlist.Tables[0].Rows[row]["IPAddress"].ToString(), mainfrm.ds_Agvlist.Tables[0].Rows[row]["line_Name"].ToString()); //string STR = mainfrm.ds_Agvlist.Tables[0].Rows[row]["ID"].ToString(); //Func.AgvInfo[row] = new Agv_Info.AgvInfo(); ; //Func.AgvInfo[row].Agv_ID = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["ID"].ToString()); //Func.AgvInfo[row].AssemblyLine = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Assembly_Line"].ToString()); //Func.AgvInfo[row].AssemblyName = mainfrm.ds_Agvlist.Tables[0].Rows[row]["line_Name"].ToString(); //Func.AgvInfo[row].Enable = Convert.ToBoolean(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Status"].ToString()); //Func.AgvInfo[row].Internal_ID = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Internal_ID"].ToString()); //Func.AgvInfo[row].IP = mainfrm.ds_Agvlist.Tables[0].Rows[row]["IPAddress"].ToString(); //Func.AgvInfo[row].Area = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["area"].ToString()); //Func.AgvInfo[row].Cross_Location_Go = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["LOC_ID"].ToString()); //Func.AgvInfo[row].Cross_Path_Id = Convert.ToInt16(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Warn_ID"].ToString()); //Func.AgvInfo[row].Mileage = Convert.ToDouble(mainfrm.ds_Agvlist.Tables[0].Rows[row]["Mileage"].ToString()); } strsql = "SELECT distinct Loc_ID, Flag_Value, Loc_X, Loc_Y, Binding, Area, Assembly_ID ,Assembly_Line FROM LandMarkInfo order by Loc_ID"; DataSet ds_Location = db.connDt(strsql); string loc_id = ""; int nWidth = Screen.PrimaryScreen.Bounds.Width; int nHeight = Screen.PrimaryScreen.Bounds.Height; foreach (DataRow dr in ds_Location.Tables[0].Rows) { if (loc_id == "") { Func.CreatePanelLocation(dr["Loc_ID"].ToString(), Convert.ToInt16(dr["Binding"]), Convert.ToInt16(dr["Loc_x"]), Convert.ToInt16(dr["loc_y"]), Convert.ToInt16(dr["Area"]), dr["Assembly_ID"].ToString()); loc_id = dr["Loc_ID"].ToString(); } else if (dr["Loc_ID"].ToString() != loc_id) { Func.CreatePanelLocation(dr["Loc_ID"].ToString(), Convert.ToInt16(dr["Binding"]), Convert.ToInt16(dr["Loc_x"]), Convert.ToInt16(dr["loc_y"]), Convert.ToInt16(dr["Area"]), dr["Assembly_ID"].ToString()); } } strsql = "SELECT [Current_Line_ID] ,[Current_Landmark] ,[Reset_Line_ID] ,[Reset_Landmark] FROM [Reset_Relation]"; mainfrm.ds_Reset_Relation = newdb.connDt(strsql).Copy(); strsql = "SELECT [Start_Point] ,[End_Point] ,[Distance] FROM [Mileage]"; mainfrm.ds_Mileage = newdb.connDt(strsql).Copy(); agvcontrol_init(); for (int i = 0; i < Cls.Param.AGV_Qty; i++) //for (int i = 0; i < 1; i++) { //if (Func.AgvInfo[i].Agv_ID == 45) Agvcontrol.AGV_start(Func.AgvInfo[i]); } //Agvcontrol.Function(); //mainfrm.warnlist1.Show(); } public delegate void pictureboxset(PictureBox pb, string str); public pictureboxset pictureboxSet; public static void PictureboxSet(PictureBox pb, string str) { if (str == "hui") pb.BackgroundImage = Properties.Resources.hui; else if (str == "ledlow") pb.BackgroundImage = Properties.Resources.ledLow; else if (str == "_0") pb.BackgroundImage = Properties.Resources._0; else if (str == "_1") pb.BackgroundImage = Properties.Resources._1; } private void agvcontrol_init() { //Agvcontrol.AgvRecConnCount = new int[Cls.Param.AGV_Qty]; //Agvcontrol.ds_AGVGo = mainfrm.ds_AGVGo; //Agvcontrol.ds_AGVWarn = mainfrm.ds_AgvWarn; //Agvcontrol.ds_CrossInfo = mainfrm.ds_CrossInfo; //Agvcontrol.ds_Warn = mainfrm.ds_WarnList; Agvcontrol.StartFlag = Cls.Param.StartFlag; Agvcontrol.th_GetData = Cls.Param.th_GetData; Agvcontrol.ConnectStr = Cls.Param.connectStr; //Agvcontrol.Agv_Qty = Cls.Param.AGV_Qty; //Agvcontrol.ds_Reset_Relation = mainfrm.ds_Reset_Relation; Agvcontrol.ds_Mileage = mainfrm.ds_Mileage; //Agvcontrol.Plc_Type = Cls.Param.PLC_Type; for (byte i = 0; i < 17; i++) { Btn_Filter[i, 0] = 0; Btn_Filter[i, 1] = 0; } for (byte row = 0; row < Array_Robot_Status.Length / 8; row++) { for (byte col = 0; col < 8; col++) { Array_Robot_Status[row, col] = 0; Array_Robot_Set[row, col] = 0; } } } private void Form1_Load(object sender, EventArgs e) { if (Cls.Param.map1_status) { panel3.Dock = DockStyle.Fill; panel3.BackgroundImage = Image.FromFile(Application.StartupPath + "\\map\\" + Cls.Param.Pro_id + "_1"); } if (Cls.Param.map2_status) { panel2.Dock = DockStyle.Fill; panel2.BackgroundImage = Image.FromFile(Application.StartupPath + "\\map\\" + Cls.Param.Pro_id + "_2"); } if (Cls.Param.map3_status) { panel1.Dock = DockStyle.Fill; panel1.BackgroundImage = Image.FromFile(Application.StartupPath + "\\map\\" + Cls.Param.Pro_id + "_3"); } panel3.Visible = true; panel2.Visible = false; panel1.Visible = false; tm_AgvInfo.Enabled = true; } public static void label12_DoubleClick(object sender, EventArgs e) { if (((System.Windows.Forms.Label)sender).Tag.ToString() == "") return; if (MessageBox.Show("是否复位该路口?", "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) return; int[] num = new int[2]; num[0] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[0]); num[1] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[1]); for (int i = 0; i < mainfrm.ds_CrossInfo.Tables[0].Rows.Count; i++) { string s = mainfrm.ds_CrossInfo.Tables[0].Rows[i]["当前地标编号"].ToString(); string a = mainfrm.ds_CrossInfo.Tables[0].Rows[i]["AGV编号"].ToString(); if (mainfrm.ds_CrossInfo.Tables[0].Rows[i]["当前产线编号"].ToString() == num[0].ToString() && mainfrm.ds_CrossInfo.Tables[0].Rows[i]["当前地标编号"].ToString() == num[1].ToString() && mainfrm.ds_CrossInfo.Tables[0].Rows[i]["AGV编号"].ToString() != "0") { MessageBox.Show("AGV-" + mainfrm.ds_CrossInfo.Tables[0].Rows[i]["AGV编号"].ToString() + "占用路口信息被清除!"); mainfrm.ds_CrossInfo.Tables[0].Rows[i]["AGV编号"] = 0; } } } /// /// 设置Agv的实时位置 /// /// 地标编号:地标(2位) /// agv编号 public delegate void agvlocation(string LandMarkID, int agvnum, int map_id); public agvlocation agvLocation; public static void AgvLocation(string LandMarkID, int agvnum, int map_id) { if (LandMarkID == "0") return; Panel pl = new Panel();//xin panel Panel pl_parent = new Panel();//jiu panel bool flag = false; Panel parent_pnl = new Panel(); if (map_id == 1) { parent_pnl = mainfrm.Map1; } else if (map_id == 2) { parent_pnl = mainfrm.Map2; } else { parent_pnl = mainfrm.Map3; } foreach (System.Windows.Forms.Control ctl in parent_pnl.Controls) { if (ctl.GetType().Name == "Panel") { if (ctl.Tag.ToString().Split('-')[0] == LandMarkID) { pl = (Panel)ctl; if (pl == (Panel)Func.agvcar[agvnum - 1].Parent) flag = false; else flag = true; break; } } } if (!flag) return; //以下设置agvbtn pl_parent = (Panel)Func.agvcar[agvnum - 1].Parent; Func.agvcar[agvnum - 1].Parent = pl; if (pl.Tag.ToString().Trim() != "") { //1.左端(后退) 2.右端(前进) 3.顶部(向上) 4.底部(向下) if (pl.Tag.ToString().Split('-')[1] == "1") { //Func.agvcar[agvnum - 1].Direction("backward"); Func.agvcar[agvnum - 1].Dock = DockStyle.Left; Func.agvcar[agvnum - 1].Width = Func.agvcar[agvnum - 1].Height = 32; Func.agvcar[agvnum - 1].BringToFront(); //Func.AgvBtn[agvnum - 1].SendToBack(); } else if (pl.Tag.ToString().Split('-')[1] == "2") { //Func.agvcar[agvnum - 1].Direction("forward"); Func.agvcar[agvnum - 1].Dock = DockStyle.Left; Func.agvcar[agvnum - 1].Width = Func.agvcar[agvnum - 1].Height = 32; Func.agvcar[agvnum - 1].BringToFront(); } else if (pl.Tag.ToString().Split('-')[1] == "3") { //Func.agvcar[agvnum - 1].Direction("upward"); Func.agvcar[agvnum - 1].Dock = DockStyle.Top; Func.agvcar[agvnum - 1].Width = Func.agvcar[agvnum - 1].Height = 32; Func.agvcar[agvnum - 1].BringToFront(); } else if (pl.Tag.ToString().Split('-')[1] == "4") { //Func.agvcar[agvnum - 1].Direction("down"); Func.agvcar[agvnum - 1].Dock = DockStyle.Top; Func.agvcar[agvnum - 1].Width = Func.agvcar[agvnum - 1].Height = 32; Func.agvcar[agvnum - 1].BringToFront(); //Func.AgvBtn[agvnum - 1].SendToBack(); } } //以下设置新容器大小 int i = 0; foreach (System.Windows.Forms.Control ctl in pl.Controls) { //1.左端(后退) 2.右端(前进) 3.顶部(向上) 4.底部(向下) if (pl.Tag.ToString().Split('-')[1] == "3" || pl.Tag.ToString().Split('-')[1] == "4") { i = i + ctl.Height; } else { i = i + ctl.Width; } } if (pl.Tag.ToString().Split('-')[1] == "3" || pl.Tag.ToString().Split('-')[1] == "4") { pl.Height = i; } else { pl.Width = i; } } /// /// 创建代表每个AGV的button /// /// agv内部编号 /// 所属流水线编号 /// agv总编号 public void CreateBtnAgv(string agvID, string assembly, string agvID_tot, string ip, string linename) { AgvCar.Agv btn = new AgvCar.Agv(); //btn.Text = agvID; btn.Tag = agvID_tot + "-" + assembly; btn.Label = agvID; btn.Width = Cls.Param.Icon_Size; btn.Height = Cls.Param.Icon_Size; //btn.Agv_seq = agvID; //btn.Agv_IP = ip; //btn.Agv_No = agvID+" / "+ agvID_tot; //btn.LineName= linename; //btn.SetToolTip(); btn.Font = new System.Drawing.Font("宋体", 9, FontStyle.Regular); btn.ForeColor = Color.Blue; if (assembly == "1") btn.Parent = pnl1; else if (assembly == "2") btn.Parent = pnl2; else if (assembly == "3") btn.Parent = pnl3; else if (assembly == "4") btn.Parent = pnl4; else if (assembly == "5") btn.Parent = pnl5; else if (assembly == "6") btn.Parent = pnl6; else if (assembly == "7") btn.Parent = pnl7; else if (assembly == "8") btn.Parent = pnl8; btn.Font = new System.Drawing.Font("宋体", 9); //btn.MouseEnter += new System.EventHandler(this.button6_MouseEnter); //btn.MouseLeave += new System.EventHandler(this.button6_MouseLeave); //btn.FlatStyle = FlatStyle.Flat; btn.Dock = DockStyle.Left; btn.BringToFront(); Func.agvcar[Convert.ToInt16(agvID_tot) - 1] = btn; } public static void Map_Display(byte i) { if (i == 1) { mainfrm.Map1.Visible = true; mainfrm.Map2.Visible = false; mainfrm.Map3.Visible = false; } else if (i == 2) { mainfrm.Map1.Visible = false; mainfrm.Map2.Visible = true; mainfrm.Map3.Visible = false; } else if (i == 3) { mainfrm.Map1.Visible = false; mainfrm.Map2.Visible = false; mainfrm.Map3.Visible = true; } } private void button6_MouseEnter(object sender, EventArgs e) { Label btn; btn = (Label)sender; btn.Font = new System.Drawing.Font("宋体", 16, FontStyle.Regular); btn.TextAlign = ContentAlignment.MiddleCenter; } private void button6_MouseLeave(object sender, EventArgs e) { Label btn; btn = (Label)sender; btn.Font = new System.Drawing.Font("宋体", 9, FontStyle.Regular); btn.TextAlign = ContentAlignment.BottomLeft; } //private void button6_Click(object sender, EventArgs e) //{ // Form1.frm.Invoke(Form1.frm.btnset, Func.AgvBtn[1], (byte)2); // Form1.frm.Invoke(Form1.frm.btnset, Func.AgvBtn[2], (byte)3); // Form1.frm.Invoke(Form1.frm.btnset, Func.AgvBtn[3], (byte)1); // Form1.frm.Invoke(Form1.frm.agvLocation, "5", 1, 1); // Form1.frm.Invoke(Form1.frm.agvLocation, "6", 2, 1); // Form1.frm.Invoke(Form1.frm.agvLocation, "7", 3, 1); // Form1.frm.Invoke(Form1.frm.agvLocation, "8", 4, 1); //} private void panel1_MouseMove(object sender, MouseEventArgs e) { mainfrm.Lab_location.Text = "X: " + e.X.ToString() + " ,Y: " + e.Y.ToString(); if (e.Y > panel1.Height - 10) { if (!panel8.Visible) { panel8.Visible = true; this.Location = new Point(0, 103); } } else { if (panel8.Visible) { panel8.Visible = false; this.Location = new Point(0, 29); } } if (e.Y < 10) { if (!mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = true; this.Height = mainfrm.newmainfrm.ClientSize.Height - 130; } else { if (mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = false; this.Height = mainfrm.newmainfrm.ClientSize.Height - 56; } //if (e.X > ((Panel)sender).Width - 10) //{ // if (!panel4.Visible) // panel4.Visible = true; //} //else //{ // if (panel4.Visible) // panel4.Visible = false; //} } private void panel2_MouseMove(object sender, MouseEventArgs e) { mainfrm.Lab_location.Text = "X: " + e.X.ToString() + " ,Y: " + e.Y.ToString(); if (e.Y > panel2.Height - 10) { if (!panel8.Visible) panel8.Visible = true; } else { if (panel8.Visible) panel8.Visible = false; } if (e.Y < 10) { if (!mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = true; this.Height = mainfrm.newmainfrm.ClientSize.Height - 130; } else { if (mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = false; this.Height = mainfrm.newmainfrm.ClientSize.Height - 56; } if (e.Y > ((Panel)sender).Width - 10) { if (!panel4.Visible) panel4.Visible = true; } else { if (panel4.Visible) panel4.Visible = false; } //if (e.X > ((Panel)sender).Width - 10) //{ // if (!panel4.Visible) // panel4.Visible = true; //} //else //{ // if (panel4.Visible) // panel4.Visible = false; //} } private void panel3_MouseMove(object sender, MouseEventArgs e) { mainfrm.Lab_location.Text = "X: " + e.X.ToString() + " ,Y: " + e.Y.ToString(); if (e.Y > panel3.Height - 10) { if (!panel8.Visible) panel8.Visible = true; } else { if (panel8.Visible) panel8.Visible = false; } if (e.Y < 10) { if (!mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = true; this.Height = mainfrm.newmainfrm.ClientSize.Height - 130; } else { if (mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = false; this.Height = mainfrm.newmainfrm.ClientSize.Height - 56; } if (e.X > ((Panel)sender).Width - 10) { if (!panel4.Visible) panel4.Visible = true; } else { if (panel4.Visible) panel4.Visible = false; } } private bool b = false; private void panel3_DoubleClick(object sender, EventArgs e) { b = !b; if (b) { this.panel3.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.panel3_MouseMove); this.panel1.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove); this.panel2.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove); if (!mainfrm.toolStrip.Visible) mainfrm.toolStrip.Visible = true; this.Height = mainfrm.newmainfrm.ClientSize.Height - 130; //if (!panel4.Visible) // panel4.Visible = true; mainfrm.toolStrip_info.Text = "Locked."; } else { this.panel3.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel3_MouseMove); this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove); this.panel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove); mainfrm.toolStrip_info.Text = ""; } mainfrm.Lab_location.Text = "W:" + panel3.Width.ToString() + " , H:" + panel3.Height.ToString(); } private void timer1_Tick(object sender, EventArgs e) { for (int i = 0; i < Cls.Param.AGV_Qty; i++) { Func.Agv_Car_Status(Func.AgvInfo[i].Agv_ID, Func.AgvInfo[i].Run_Status == 1 ? true : false, Func.AgvInfo[i].Warn_Level, Func.AgvInfo[i].Location_Display, Func.AgvInfo[i].Area, Func.AgvInfo[i].Run_Direction); } } System.Data.DataSet ds_warn = new System.Data.DataSet(); //报警信息 byte map_id = 1; private void tm_Tick(object sender, EventArgs e) { if (Cls.Param.Map_ID != map_id) { map_id = Cls.Param.Map_ID; if (map_id == 0) { panel3.Visible = true; panel2.Visible = false; panel1.Visible = false; } else if (map_id == 1) { panel2.Visible = true; panel3.Visible = false; panel1.Visible = false; } else if (map_id == 2) { panel1.Visible = true; panel2.Visible = false; panel3.Visible = false; } //panel4.BringToFront(); ////panel4.SendToBack(); //panel4.Visible = true; //panel4.Parent = this; } if (Agvcontrol.StartFlag != Cls.Param.StartFlag) { if (Cls.Param.Thread_Count == Cls.Param.AGV_Qty) { Agvcontrol.ClosedFlag = Cls.Param.AGV_Qty; } Agvcontrol.StartFlag = Cls.Param.StartFlag; } if (Cls.Param.StartFlag == true && Cls.Param.Thread_Count == 0) { for (int i = 0; i < Cls.Param.AGV_Qty; i++) { Agvcontrol.AGV_start(Func.AgvInfo[i]); } Cls.Param.Thread_Count = -1; } if (Cls.Param.Thread_Count != -1 && Agvcontrol.ClosedFlag != -1 && Cls.Param.Thread_Count != Agvcontrol.ClosedFlag) { Cls.Param.Thread_Count = Agvcontrol.ClosedFlag; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Agvcontrol.ClosedFlag = Cls.Param.AGV_Qty; int count = 15; while (Agvcontrol.ClosedFlag > 0 && count > 0) { Thread.Sleep(80); count--; } if (!Cls.Param.Load_Path_His) { //for (byte i = 0; i < mainfrm.ds_CrossInfo.Tables[0].Rows.Count; i++) //{ //mainfrm.ds_CrossInfo.Tables[0].Rows[i][4] = 0; //} } //newdb.dtCommit(mainfrm.ds_CrossInfo); for (int i = 0; i < Cls.Param.AGV_Qty; i++) { newdb.Command("UPDATE [AgvInfo] SET [Loc_ID] = " + (Cls.Param.Load_Path_His == true ? Func.AgvInfo[i].Cross_Location_Go : 0) + " ,[Path_ID] = " + (Cls.Param.Load_Path_His == true ? Func.AgvInfo[i].Cross_Path_Id : 0) + ", [Mileage]=" + Func.AgvInfo[i].Mileage + " WHERE id=" + Func.AgvInfo[i].Agv_ID); try { Func.AgvInfo[i].Soc.Close(); Func.AgvInfo[i].Soc = null; } catch { } } } private void button3_Click(object sender, EventArgs e) { agv_alarm_insert(0, "NEISHIXIAN", "1", 1, "FZ", 4); } private static void agv_alarm_insert(int del_agv_no, string Assembly_Name, string Assembly_Id, int AGV_Internal_No, string AlarmInfo, int agv_no) { if (del_agv_no == 0) { bool update_flag = false; if (mainfrm.ds_AgvWarn.Tables[0].Rows.Count > 0) { for (int i = 0; i < mainfrm.ds_AgvWarn.Tables[0].Rows.Count; i++) { string ss = mainfrm.ds_AgvWarn.Tables[0].Rows[i][3].ToString(); if (Convert.ToInt16(mainfrm.ds_AgvWarn.Tables[0].Rows[i][3].ToString()) == agv_no) { mainfrm.ds_AgvWarn.Tables[0].Rows[i][0] = DateTime.Now.ToString(); mainfrm.ds_AgvWarn.Tables[0].Rows[i][1] = Assembly_Id; mainfrm.ds_AgvWarn.Tables[0].Rows[i][2] = Assembly_Name; mainfrm.ds_AgvWarn.Tables[0].Rows[i][3] = agv_no; mainfrm.ds_AgvWarn.Tables[0].Rows[i][4] = AGV_Internal_No; mainfrm.ds_AgvWarn.Tables[0].Rows[i][5] = AlarmInfo; update_flag = true; break; } } } if (!update_flag) { DataRow dr = mainfrm.ds_AgvWarn.Tables[0].NewRow(); dr[0] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");// 时间 dr[1] = Assembly_Id; // 线体编号 dr[2] = Assembly_Name; // 线体名称 dr[3] = agv_no; // 设备编号 dr[4] = AGV_Internal_No; // 内部编号 dr[5] = AlarmInfo; // 报警信息 mainfrm.ds_AgvWarn.Tables[0].Rows.Add(dr); } } else { for (int i = 0; i < mainfrm.ds_AgvWarn.Tables[0].Rows.Count; i++) { if (Convert.ToInt16(mainfrm.ds_AgvWarn.Tables[0].Rows[i][3]) == del_agv_no) { newdb.Command("INSERT INTO [Warn_Log] ([Dt] ,[Agv_id] ,[Type] ,[Reset]) VALUES ('" + mainfrm.ds_AgvWarn.Tables[0].Rows[i][0] + "'," + mainfrm.ds_AgvWarn.Tables[0].Rows[i][3] + ",'" + mainfrm.ds_AgvWarn.Tables[0].Rows[i][5] + "','" + DateTime.Now.ToString() + "')"); mainfrm.ds_AgvWarn.Tables[0].Rows.RemoveAt(i); i--; } } } } private void button4_Click(object sender, EventArgs e) { agv_alarm_insert(4, "NEISHIXIAN", "1", 1, "FZ", 4); } private void checkBox1_MouseEnter(object sender, EventArgs e) { ((CheckBox)sender).ForeColor = Color.Red; } private void checkBox1_MouseLeave(object sender, EventArgs e) { ((CheckBox)sender).ForeColor = Color.Black; } private void vScrollBar1_ValueChanged(object sender, EventArgs e) { for (byte i = 0; i < vScrollBar1.Maximum; i++) { if (i < vScrollBar1.Value) pnl[i].Visible = false; else pnl[i].Visible = true; } } private void panel3_MouseClick(object sender, MouseEventArgs e) { if (Cls.Param.UserName_temp == "") { return; } if (e.Button == System.Windows.Forms.MouseButtons.Right) { //Location_Set ls = new Location_Set(Func.loc_flag, e.X, e.Y, Convert.ToInt16(((Panel)sender).Tag)); //Func.loc_flag = 0; //ls.ShowDialog(); Point_loc_Set loc_set = new Point_loc_Set(e.X, e.Y); loc_set.Show(); } } private void button5_Click(object sender, EventArgs e) { Func.AgvInfo[1].Run_Status = 1; Func.AgvInfo[1].Warn_Level = 1; Func.AgvInfo[1].Location_Display = 1; Func.AgvInfo[1].Area = 1; Func.AgvInfo[1].Run_Direction = 1; } private void button6_Click(object sender, EventArgs e) { Func.AgvInfo[1].Run_Status = 1; Func.AgvInfo[1].Warn_Level = 3; Func.AgvInfo[1].Location_Display = 1; Func.AgvInfo[1].Area = 1; Func.AgvInfo[1].Run_Direction = 1; } private void button7_Click(object sender, EventArgs e) { Func.AgvInfo[1].Run_Status = 1; Func.AgvInfo[1].Warn_Level = 1; Func.AgvInfo[1].Location_Display = 2; Func.AgvInfo[1].Area = 1; Func.AgvInfo[1].Run_Direction = 1; } private void card1_Tick() { ErrorCode err = ErrorCode.Success; byte out_value = 0; for (byte i = 0; i < instantDiCtrl1.Features.PortCount; i++) { for (byte j = 0; j < 8; j++) { err = instantDiCtrl1.ReadBit(i, j, out out_value); if (mainfrm.Card_DI1[i, j] == 0 && out_value == 1) mainfrm.Card_DI1[i, j] = count; if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 1); return; } } } for (byte i = 0; i < instantDoCtrl1.Features.PortCount; i++) { for (byte j = 0; j < 8; j++) { err = instantDoCtrl1.WriteBit(i, j, mainfrm.Card_DO1[i, j]); if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 1); return; } } } } private void HandleError(ErrorCode err, byte card_id) { if (err != ErrorCode.Success) { MessageBox.Show("Sorry ! Some errors happened, the error code is: " + err.ToString() + " , this card id = " + card_id.ToString(), "Static DI OR DO"); } } private void card2_Tick() { byte out_value = 0; ErrorCode err = ErrorCode.Success; for (byte i = 0; i < instantDiCtrl2.Features.PortCount; i++) { for (byte j = 0; j < 8; j++) { err = instantDiCtrl2.ReadBit(i, j, out out_value); if (mainfrm.Card_DI2[i, j] == 0 && out_value == 1) mainfrm.Card_DI2[i, j] = count; if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 2); return; } } } for (byte i = 0; i < instantDoCtrl2.Features.PortCount; i++) { for (byte j = 0; j < 8; j++) { err = instantDoCtrl2.WriteBit(i, j, mainfrm.Card_DO2[i, j]); if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 2); return; } } } } private void card3_Tick() { byte out_value = 0; ErrorCode err = ErrorCode.Success; for (byte i = 0; i < instantDiCtrl3.Features.PortCount; i++) { for (byte j = 0; j < 8; ++j) { err = instantDiCtrl3.ReadBit(i, j, out out_value); if (mainfrm.Card_DI3[i, j] == 0 && out_value == 1) mainfrm.Card_DI3[i, j] = count; if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 3); return; } } } for (byte i = 0; i < instantDoCtrl3.Features.PortCount; i++) { for (byte j = 0; j < 8; j++) { err = instantDoCtrl3.WriteBit(i, j, mainfrm.Card_DO3[i, j]); if (err != ErrorCode.Success) { tm_card.Enabled = false; HandleError(err, 3); return; } } } } private byte count = 10; private void tm_card_Tick(object sender, EventArgs e) { for (byte i = 0; i < 4; ++i) { for (byte j = 0; j < 8; ++j) { mainfrm.Card_DO1[i, j] = 0; mainfrm.Card_DO2[i, j] = 0; mainfrm.Card_DO3[i, j] = 0; if (mainfrm.Card_DI1[i, j] > 1) { mainfrm.Card_DI1[i, j]--; } else { if (mainfrm.ds_Card_DI_Call.Tables[0].Rows.Count > 0) { DataView rowfilter = new DataView(mainfrm.ds_Card_DI_Call.Tables[0]); rowfilter.RowFilter = "Card_ID=1 and Port=" + i + " and bit= " + j + " and value=1 and class =0"; rowfilter.RowStateFilter = DataViewRowState.OriginalRows; DataTable dt = rowfilter.ToTable(); if (dt.Rows.Count == 1) { } else { mainfrm.Card_DI1[i, j] = 0; } } } if (mainfrm.Card_DI2[i, j] > 1) { mainfrm.Card_DI2[i, j]--; } else { DataView rowfilter = new DataView(mainfrm.ds_Card_DI_Call.Tables[0]); if (mainfrm.ds_Card_DI_Call.Tables[0].Rows.Count > 0) { rowfilter.RowFilter = "Card_ID=2 and Port=" + i + " and bit= " + j + " and value=1 and class =0"; rowfilter.RowStateFilter = DataViewRowState.OriginalRows; DataTable dt = rowfilter.ToTable(); if (dt.Rows.Count == 1) { } else { mainfrm.Card_DI2[i, j] = 0; } } } if (mainfrm.Card_DI3[i, j] > 1) { mainfrm.Card_DI3[i, j]--; } else { DataView rowfilter = new DataView(mainfrm.ds_Card_DI_Call.Tables[0]); rowfilter.RowFilter = "Card_ID=3 and Port=" + i + " and bit= " + j + " and value=1 and class =0"; rowfilter.RowStateFilter = DataViewRowState.OriginalRows; DataTable dt = rowfilter.ToTable(); if (dt.Rows.Count == 1) { } else { mainfrm.Card_DI3[i, j] = 0; } } } } if (mainfrm.ds_Card_DO.Tables[0].Rows.Count > 0) { int[,] nCount = new int[3, 16];//计算数量--AGV 在红绿灯地标上的数量 for (int i = 0; i < mainfrm.ds_Card_DO.Tables[0].Rows.Count; i++) { for (int j = 0; j < Cls.Param.AGV_Qty; j++) { if (Func.AgvInfo[j].Cross_Location_Go == Func.AgvInfo[j].Location_Display && Func.AgvInfo[j].Cross_Location_Go == Convert.ToInt16(mainfrm.ds_Card_DO.Tables[0].Rows[i]["Loc_ID"].ToString())) { if (mainfrm.ds_Card_DO.Tables[0].Rows[i]["Value"].ToString() == "1") { int nCardNum = Convert.ToInt16(mainfrm.ds_Card_DO.Tables[0].Rows[i]["Card_ID"].ToString()); int nBit = Convert.ToInt16(mainfrm.ds_Card_DO.Tables[0].Rows[i]["Bit"].ToString()); nCount[nCardNum - 1, nBit - 1]++; } } } } for (int i = 0; i < 3; i++) { int nBit = 0, nPort = 0; for (int j = 0; j < 16; j++) { if (j >= 0 && j < 8) { nPort = 0; nBit = j; } else if (j >= 8 && j < 16) { nPort = 1; nBit = j - 8; } if (nCount[i, j] != 0) { if (i == 0) { mainfrm.Card_DO1[nPort, nBit] = 1; } else if (i == 1) { mainfrm.Card_DO2[nPort, nBit] = 1; } else if (i == 2) { mainfrm.Card_DO3[nPort, nBit] = 1; } } else { if (i == 0) { mainfrm.Card_DO1[nPort, nBit] = 0; } else if (i == 1) { mainfrm.Card_DO2[nPort, nBit] = 0; } else if (i == 2) { mainfrm.Card_DO3[nPort, nBit] = 0; } } } } } if (Cls.Param.Card1_Interval > 0) { card1_Tick(); } if (Cls.Param.Card2_Interval > 0) { card2_Tick(); } if (Cls.Param.Card3_Interval > 0) { card3_Tick(); } } private void pictureBox106_Click(object sender, EventArgs e) { int row = 0, col = 0; PictureBox pb = (PictureBox)sender; row = Convert.ToInt16(pb.Tag.ToString().Split(',')[0]) - 1; col = Convert.ToInt16(pb.Tag.ToString().Split(',')[1]) - 1; if ((col >= 0 && col < 4) || col == 6 || col == 7) { if (col >= 0 && col < 4) { if (MessageBox.Show("是否要重置 " + ds_Station_Info.Tables[0].Rows[row][1].ToString().Trim() + " 工位 " + (col + 1).ToString() + " 位置编号: " + ds_Station_Info.Tables[0].Rows[row][2 + col].ToString() + " 的状态?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { if (ds_Station_Info.Tables[0].Rows[row][8 + col].ToString() == "0") { Array_Station_Info[row, 6 + col] = 1; ds_Station_Info.Tables[0].Rows[row][8 + col] = 1; PB[row, col].BackgroundImage = Properties.Resources._1; } else { Array_Station_Info[row, 6 + col] = 0; ds_Station_Info.Tables[0].Rows[row][8 + col] = 0; PB[row, col].BackgroundImage = Properties.Resources._0; } } } else if (col == 6 || col == 7) { if (MessageBox.Show("是否要重置 " + ds_Station_Info.Tables[0].Rows[row][1].ToString().Trim() + " 工位 " + (col - 3).ToString() + " 位置编号: " + ds_Station_Info.Tables[0].Rows[row][(col == 6) ? "Station5_LandMark" : "Station6_LandMark"].ToString() + " 的状态?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { if (ds_Station_Info.Tables[0].Rows[row][col == 6 ? "station5" : "station6"].ToString() == "0") { Array_Station_Info[row, col + 8] = 1; ds_Station_Info.Tables[0].Rows[row][col == 6 ? "station5" : "station6"] = 1; PB[row, col].BackgroundImage = Properties.Resources._1; } else { Array_Station_Info[row, 8 + col] = 0; ds_Station_Info.Tables[0].Rows[row][col == 6 ? "station5" : "station6"] = 0; PB[row, col].BackgroundImage = Properties.Resources._0; } } } db_station.dtCommit(ds_Station_Info); } } public const byte Number = 10; public static bool maplandmarkisEdit = false; private static int Agv_Count_Area(int worktype, int[] landmark) { int count = 0; for (int i = 0; i < Func.AgvInfo.Length; i++) { if (Func.AgvInfo[i].WorkType == worktype) { for (int j = 0; j < landmark.Length; j++) { if (Func.AgvInfo[i].Location_Display == landmark[j]) count++; } } } return count; } private void toolStripMenuItem_Save_Location_X_Y_Click(object sender, EventArgs e) { if (MessageBox.Show("是否保存坐标数据?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { ClsDBConn_sql sqlconn = new ClsDBConn_sql(); string sql = ""; foreach (System.Windows.Forms.Control ctl in panel3.Controls) { if (ctl.GetType().Name == "Panel") { if (ctl.Tag != null) { int locx = ctl.Location.X; int locy = ctl.Location.Y; int flag_value = Convert.ToInt16(ctl.Tag.ToString().Split('-')[0]); sql = "update LandMarkInfo set Loc_X=" + locx + ",Loc_Y=" + locy + " where Loc_ID=" + flag_value; if (sqlconn.Command(sql).Length > 6) { WriteTxt.SaveLog1("保存坐标数据失败,地标:" + flag_value.ToString(), "坐标数据保存日志", "Syslog"); } } } } } maplandmarkisEdit = false; } private void toolStripMenuItem_Update_location_X_Y_Click(object sender, EventArgs e) { if (MessageBox.Show("是否更改坐标数据?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { maplandmarkisEdit = true; } else { maplandmarkisEdit = false; } } private void timer3_Tick(object sender, EventArgs e) { if (dataGridView1.Rows.Count == 0) return; for (int i = 0; i < Func.AgvInfo.Length; i++) { if (dataGridView1.Rows[i].Cells["设备位置"].Value.ToString() != Func.AgvInfo[i].Location_Display.ToString()) { dataGridView1.Rows[i].Cells["设备位置"].Value = Func.AgvInfo[i].Location_Display; } if (dataGridView1.Rows[i].Cells["状态"].Value.ToString() != Func.AgvInfo[i].Warn_info) { dataGridView1.Rows[i].Cells["状态"].Value = Func.AgvInfo[i].Warn_info; } if (Func.AgvInfo[i].bPlcLinked) { if (dataGridView1.Rows[i].Cells["在线状态"].Value.ToString() != "Onine") { dataGridView1.Rows[i].Cells["在线状态"].Value = "Online"; } } else if (!Func.AgvInfo[i].bPlcLinked) { if (dataGridView1.Rows[i].Cells["在线状态"].Value.ToString() != "网络中断") { dataGridView1.Rows[i].Cells["在线状态"].Value = "网络中断"; } } } } private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { } } }