简单介绍一下项目背景:
大家喜爱的葡萄酒需要经过原料选择→分选→去梗→破碎→消毒→前发酵→压榨→调整酒度→后发酵→贮藏→沉清过滤→装瓶、杀菌这几个过程,
保温发酵控制系统是其中重要一环,葡萄酒经过前期工艺后,在发酵罐常期进行发酵,温度必须保证在一定范围,温度高时需要制冷。温度高了需要
进行搅拌,不至于结冰。往复的过程。
在项目中运用到数据库、多线程、现场采集、液位显示等。
动态显示每个发酵罐或者保温罐相关信息与参数,可以设定制定控制还是手动控制。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ZedGraph; namespace work { public partial class FormDisplay : Form { // Starting time in milliseconds int tickStart = 0; string obj_gh; string device; public DataSet ds; private System.Windows.Forms.DataGridTableStyle ts; public FormDisplay(string gh) { obj_gh = gh; InitializeComponent(); } private void FillData(string gh) { DataSet dsmatno; string selectmatno = " select mname from matno "; selectmatno = selectmatno + " order by matnoid desc"; dsmatno = Narnu.GetDataSetByOleDbString(selectmatno); cb_pm.DataSource = dsmatno.Tables[0]; cb_pm.DisplayMember = "mname"; datagrid.TableStyles.Clear(); ts = new DataGridTableStyle(); ts.RowHeadersVisible = false; DataSet ds; string selectgh = " select * from wd "; selectgh =selectgh + " where gh = '" + gh.ToString()+ "'" + " order by tkdat1 desc"; ds = Narnu.GetDataSetByOleDbString(selectgh); ts.MappingName = ds.Tables[0].TableName; //ts.AlternatingBackColor = Color.LightSkyBlue; ts.AllowSorting = false; //id, palno, addre, addre_desc, trans, trans_ssj, trans_ddj, deviceno, //xd, statu, deviceno_desc, port, port_desc, ssj, ddj, pri, error, fflag, tkdat setcolumn("gh", "罐号", 120); setcolumn("op", "操作", 120); setcolumn("sdwd", "设定温度", 120); setcolumn("sjwd1", "高位温度", 120); setcolumn("sjwd2", "低位温度", 120); setcolumn("tkdat1", "时间", 120); setcolumn("deviceno", "设备号", 40); setcolumn("trans", "电报", 150); setcolumn("statu", "状态", 50); setcolumn("error", "故障信息", 150); setcolumn("tkdat", "产生时间", 120); setcolumn("xd", "巷道", 50); setcolumn("port", "口地址", 50); setcolumn("if_do", "状态", 40); setcolumn("alock", "锁定状态", 40); setcolumn("sectn", "库区", 40); datagrid.TableStyles.Add(ts); this.datagrid.DataSource = ds.Tables[0]; this.dataGridView1.DataSource = ds.Tables[0]; } private void FillDataTk(string gh,DateTime tk) { datagrid.TableStyles.Clear(); ts = new DataGridTableStyle(); ts.RowHeadersVisible = false; DataSet ds; string selectgh = " select * from wd "; selectgh = selectgh + " where gh = '" + gh.ToString() + "'" + " and tkdat1>=Cdate('" + tk + "')" + " order by tkdat1 desc"; ds = Narnu.GetDataSetByOleDbString(selectgh); ts.MappingName = ds.Tables[0].TableName; //ts.AlternatingBackColor = Color.LightSkyBlue; ts.AllowSorting = false; //id, palno, addre, addre_desc, trans, trans_ssj, trans_ddj, deviceno, //xd, statu, deviceno_desc, port, port_desc, ssj, ddj, pri, error, fflag, tkdat setcolumn("sdwd", "设定温度", 120); setcolumn("sjwd1", "高位温度", 120); setcolumn("sjwd2", "低位温度", 120); setcolumn("gh", "罐号", 120); setcolumn("op", "操作", 120); setcolumn("tkdat1", "时间", 120); setcolumn("deviceno", "设备号", 40); setcolumn("trans", "电报", 150); setcolumn("statu", "状态", 50); setcolumn("error", "故障信息", 150); setcolumn("tkdat", "产生时间", 120); setcolumn("xd", "巷道", 50); setcolumn("port", "口地址", 50); setcolumn("if_do", "状态", 40); setcolumn("alock", "锁定状态", 40); setcolumn("sectn", "库区", 40); datagrid.TableStyles.Add(ts); this.datagrid.DataSource = ds.Tables[0]; this.dataGridView1.DataSource = ds.Tables[0]; } private void setcolumn(string name, string text, int width) { DataGridTextBoxColumn C = new DataGridTextBoxColumn(); // DataGridColumnStyle CStyle = new DataGridColumnStyle(); //youFirstFieldName是你的Table里的某个字段名 C.MappingName = name; //youHeaderName是你希望将上面这个字段显示在DataGrid里时的标题 C.HeaderText = text; C.Width = width; C.Alignment = HorizontalAlignment.Center; //响应鼠标单击与双击事件 // C.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler); ts.GridColumnStyles.Add(C); C.Dispose(); } private void Form1_Load( object sender, EventArgs e ) { // TODO: 这行代码将数据加载到表“bookShopDataSet.wd”中。您可以根据需要移动或移除它。 //this.wdTableAdapter.Fill(this.bookShopDataSet.wd); //foreach (Form froms in this)//检查窗体是否存在 //{ // if (froms is work.FormDisplay) // { // froms.Focus();//获得焦点 // return;//退出过程 // } //} // MessageBox.Show(obj_gh); dateTimePicker1.Value = DateTime.Now.AddDays(-1); string gh = ""; lb_gh.Text = obj_gh.Substring(0, 4).ToUpper() ; gh = obj_gh.Substring(0, 4).ToUpper(); device = obj_gh.Substring(5, 2); // MessageBox.Show(device); GraphPane myPane = zedGraphControl1.GraphPane; myPane.Title.Text = "温度实时曲线\n"; myPane.XAxis.Title.Text = "时间, 秒"; myPane.YAxis.Title.Text = "温度"; old_wd.Text = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; sd_wd.Text = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; // Save 1200 points. At 50 ms sample rate, this is one minute // The RollingPointPairList is an efficient storage class that always // keeps a rolling set of point data without needing to shift any data values //设置1200个点,假设每50毫秒更新一次,刚好检测1分钟 //一旦构造后将不能更改这个值 RollingPointPairList list = new RollingPointPairList( 1200 ); // Initially, a curve is added with no data points (list is empty) // Color is blue, and there will be no symbols //开始,增加的线是没有数据点的(也就是list为空) //增加一条名称:Voltage,颜色Color.Bule,无符号,无数据的空线条 LineItem curve = myPane.AddCurve( "温度", list, Color.Blue, SymbolType.None ); // Sample at 50ms intervals //设置timer控件的间隔为50毫秒 timer1.Interval = 50; timer1.Enabled = true; timer1.Start(); // Just manually control the X axis range so it scrolls continuously // instead of discrete step-sized jumps myPane.XAxis.Scale.Min = 0; //X轴最小值0 myPane.XAxis.Scale.Max = 30; //X轴最大30 myPane.XAxis.Scale.MinorStep = 1; //X轴小步长1,也就是小间隔 myPane.XAxis.Scale.MajorStep = 5; //X轴大步长为5,也就是显示文字的大间隔 // Scale the axes //改变轴的刻度 zedGraphControl1.AxisChange(); // Save the beginning time for reference //保存开始时间 tickStart = Environment.TickCount; // DataSet ds; string selectgh = " select * from gh where gh = '" + gh + "'" + " and finish='" + "1" + "' order by tkdat1 desc"; ds = Narnu.GetDataSetByOleDbString(selectgh); if (ds.Tables["gh"].Rows.Count == 0) { cb_pm.Text = ""; tb_batch.Text = ""; bt_st.Enabled = true; bt_com.Enabled = false; //cb_pm } else { cb_pm.Text = ds.Tables["gh"].Rows[0][6].ToString(); tb_batch.Text = ds.Tables["gh"].Rows[0][5].ToString(); bt_st.Enabled = false; bt_com.Enabled = true; } FillData(gh.ToString()); //string gh = ""; lb_gh.Text = obj_gh.Substring(0, 4).ToUpper(); gh = obj_gh.Substring(0, 4).ToUpper(); device = obj_gh.Substring(5, 2); DateTime tk; //DataSet ds; tk = Convert.ToDateTime(dateTimePicker1.Value); // selectgh = " select * from gh where gh = '" + gh + "'" + " and tkdat1>=Cdate('" + tk + "')" + " and finish='" + "1" + "' order by tkdat1 desc"; //ds = Narnu.GetDataSetByOleDbString(selectgh); //if (ds.Tables["gh"].Rows.Count == 0) //{ // cb_pm.Text = ""; // tb_batch.Text = ""; // bt_st.Enabled = true; // bt_com.Enabled = false; // //cb_pm //} //else //{ // cb_pm.Text = ds.Tables["gh"].Rows[0][6].ToString(); // tb_batch.Text = ds.Tables["gh"].Rows[0][5].ToString(); // bt_st.Enabled = false; // bt_com.Enabled = true; //} FillDataTk(gh.ToString(), tk); } private void timer1_Tick( object sender, EventArgs e ) { if (MainForm.pMainWin.zhileng[Convert.ToInt32(device)-1] == 1) { if (sg22_17_01.State != LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Blink) { sg22_17_01.State = LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Blink; } } if (MainForm.pMainWin.zhileng[Convert.ToInt32(device)-1] == 0) { sg22_17_01.State = LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Off; //LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Off; ; } if (MainForm.pMainWin.jiaoban[Convert.ToInt32(device)-1] == 1) { if (sf09_12_dj.State != LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Blink) { sf09_12_dj.State = LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Blink; } } if (MainForm.pMainWin.jiaoban[Convert.ToInt32(device)-1] == 0) { sf09_12_dj.State = LBSoft.IndustrialCtrls.Leds.LBLed.LedState.Off; } // Make sure that the curvelist has at least one curve //确保CurveList不为空 double var=3; var = Convert.ToDouble(MainForm.pMainWin.sjwd1[Convert.ToInt32(device)-1]); if ( zedGraphControl1.GraphPane.CurveList.Count <= 0 ) return; // Get the first CurveItem in the graph //取Graph第一个曲线,也就是第一步:在GraphPane.CurveList集合中查找CurveItem LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem; if ( curve == null ) return; // Get the PointPairList //第二步:在CurveItem中访问PointPairList(或者其它的IPointList),根据自己的需要增加新数据或修改已存在的数据 IPointListEdit list = curve.Points as IPointListEdit; // If this is null, it means the reference at curve.Points does not // support IPointListEdit, so we won't be able to modify it if ( list == null ) return; // Time is measured in seconds double time = ( Environment.TickCount - tickStart ) / 10000.0; // 3 seconds per cycle //list.Add( time, Math.Sin( 2.0 * Math.PI * time / 3.0 ) ); list.Add(time,var); //var = MainForm.pMainWin. // Keep the X scale at a rolling 30 second interval, with one // major step between the max X value and the end of the axis Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale; if ( time > xScale.Max - xScale.MajorStep ) { xScale.Max = time + xScale.MajorStep; xScale.Min = xScale.Max - 30.0; } // Make sure the Y axis is rescaled to accommodate actual data //第三步:调用ZedGraphControl.AxisChange()方法更新X和Y轴的范围 zedGraphControl1.AxisChange(); // Force a redraw //第四步:调用Form.Invalidate()方法更新图表 zedGraphControl1.Invalidate(); } private void Form1_Resize( object sender, EventArgs e ) { //SetSize(); } // Set the size and location of the ZedGraphControl private void SetSize() { } private void button1_Click(object sender, EventArgs e) { string device_write=""; int deviceno; deviceno = Convert.ToInt32(device); if (deviceno == 1) { device_write = "64"; } if (deviceno == 2) { device_write = "65"; } if (deviceno == 3) { device_write = "66"; } if (deviceno == 4) { device_write = "67"; } if (deviceno == 5) { device_write = "44"; } if (deviceno == 6) { device_write = "45"; } if (deviceno == 7) { device_write = "46"; } if (deviceno == 8) { device_write = "47"; } if (deviceno == 9) { device_write = "52"; } if (deviceno == 10) { device_write = "53"; } if (deviceno == 11) { device_write = "54"; } if (deviceno == 12) { device_write = "55"; } if (deviceno == 13) { device_write = "60"; } if (deviceno == 14) { device_write = "61"; } if (deviceno == 15) { device_write = "62"; } if (deviceno == 16) { device_write = "63"; } if (deviceno == 17) { device_write = "68"; } if (deviceno == 18) { device_write = "69"; } if (deviceno == 19) { device_write = "70"; } if (deviceno == 20) { device_write = "71"; } DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否关闭电磁阀" + "\r"); if (result == DialogResult.No) { return; } MainForm.pMainWin.objPlc1.Writeplc(device_write, "0"); string tkdat1 = ""; string tkdat2 = ""; string userid = "admin"; string pm = ""; string batch = ""; string gh = ""; string SetValue; string insertgh; string sdwd_t = ""; string sjwd1_t = ""; string sjwd2_t = ""; string yali_t = ""; string op_t = ""; op_t ="关闭电磁阀"; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; tkdat1 = DateTime.Now.ToString(); tkdat2 = DateTime.Now.ToString(); gh = obj_gh.Substring(0, 4).ToUpper(); yali_t = MainForm.pMainWin.yl[Convert.ToInt32(device) - 1]; ; sdwd_t = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; ; sjwd1_t = MainForm.pMainWin.sjwd1[Convert.ToInt32(device) - 1]; ; sjwd2_t = MainForm.pMainWin.sjwd2[Convert.ToInt32(device) - 1]; ; SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "','" + yali_t + "','" + sdwd_t + "','" + sjwd1_t + "','"+ op_t + "','" + sjwd2_t + "')"; insertgh = "insert into wd (pm,gh,batch,tkdat1,tkdat2,userid,finish,yl,sdwd,sjwd1,op,sjwd2) values " + SetValue; try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MainForm.pMainWin.ls_IniFile.WriteLog("write1", ex.Message.ToString()); return; } } private void button5_Click(object sender, EventArgs e) { string device_write = ""; int deviceno; deviceno = Convert.ToInt32(device); if (deviceno == 1) { device_write = "64"; } if (deviceno == 2) { device_write = "65"; } if (deviceno == 3) { device_write = "66"; } if (deviceno == 4) { device_write = "67"; } if (deviceno == 5) { device_write = "44"; } if (deviceno == 6) { device_write = "45"; } if (deviceno == 7) { device_write = "46"; } if (deviceno == 8) { device_write = "47"; } if (deviceno == 9) { device_write = "52"; } if (deviceno == 10) { device_write = "53"; } if (deviceno == 11) { device_write = "54"; } if (deviceno == 12) { device_write = "55"; } if (deviceno == 13) { device_write = "60"; } if (deviceno == 14) { device_write = "61"; } if (deviceno == 15) { device_write = "62"; } if (deviceno == 16) { device_write = "63"; } if (deviceno == 17) { device_write = "68"; } if (deviceno == 18) { device_write = "69"; } if (deviceno == 19) { device_write = "70"; } if (deviceno == 20) { device_write = "71"; } //device //zhileng[0] = Convert.ToInt32(objPlc1.ReadPlc("64")); //MessageBox.Show(zhileng[0].ToString()); //zhileng[1] = Convert.ToInt32(objPlc1.ReadPlc("65")); //zhileng[2] = Convert.ToInt32(objPlc1.ReadPlc("66")); //zhileng[3] = Convert.ToInt32(objPlc1.ReadPlc("67")); //zhileng[4] = Convert.ToInt32(objPlc1.ReadPlc("44")); //zhileng[5] = Convert.ToInt32(objPlc1.ReadPlc("45")); //zhileng[6] = Convert.ToInt32(objPlc1.ReadPlc("46")); //zhileng[7] = Convert.ToInt32(objPlc1.ReadPlc("47")); //zhileng[8] = Convert.ToInt32(objPlc1.ReadPlc("52")); //zhileng[9] = Convert.ToInt32(objPlc1.ReadPlc("53")); //zhileng[10] = Convert.ToInt32(objPlc1.ReadPlc("54")); //zhileng[11] = Convert.ToInt32(objPlc1.ReadPlc("55")); //zhileng[12] = Convert.ToInt32(objPlc1.ReadPlc("60")); //zhileng[13] = Convert.ToInt32(objPlc1.ReadPlc("61")); //zhileng[14] = Convert.ToInt32(objPlc1.ReadPlc("62")); //zhileng[15] = Convert.ToInt32(objPlc1.ReadPlc("63")); //zhileng[16] = Convert.ToInt32(objPlc1.ReadPlc("68")); //zhileng[17] = Convert.ToInt32(objPlc1.ReadPlc("69")); //zhileng[18] = Convert.ToInt32(objPlc1.ReadPlc("70")); //zhileng[19] = Convert.ToInt32(objPlc1.ReadPlc("71")); DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否开启电磁阀" + "\r"); if (result == DialogResult.No) { return; } MainForm.pMainWin.objPlc1.Writeplc(device_write, "1"); string tkdat1 = ""; string tkdat2 = ""; string userid = "admin"; string pm = ""; string batch = ""; string gh = ""; string SetValue; string insertgh; string sdwd_t = ""; string sjwd1_t = ""; string sjwd2_t = ""; string yali_t = ""; string op_t = ""; op_t = "开启电磁阀"; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; tkdat1 = DateTime.Now.ToString(); tkdat2 = DateTime.Now.ToString(); gh = obj_gh.Substring(0, 4).ToUpper(); yali_t = MainForm.pMainWin.yl[Convert.ToInt32(device) - 1]; ; sdwd_t = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; ; sjwd1_t = MainForm.pMainWin.sjwd1[Convert.ToInt32(device) - 1]; ; sjwd2_t = MainForm.pMainWin.sjwd2[Convert.ToInt32(device) - 1]; ; SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "','" + yali_t + "','" + sdwd_t + "','" + sjwd1_t + "','" + op_t + "','" + sjwd2_t + "')"; insertgh = "insert into wd (pm,gh,batch,tkdat1,tkdat2,userid,finish,yl,sdwd,sjwd1,op,sjwd2) values " + SetValue; try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MainForm.pMainWin.ls_IniFile.WriteLog("write1", ex.Message.ToString()); return; } } private void button4_Click(object sender, EventArgs e) { string device_write=""; int deviceno; deviceno = Convert.ToInt32(device); if (deviceno == 1) { device_write="30"; } if (deviceno == 2) { device_write="31"; } if (deviceno == 3) { device_write="32"; } if (deviceno == 4) { device_write="33"; } if (deviceno == 5) { device_write="34"; } if (deviceno == 6) { device_write="35"; } if (deviceno == 7) { device_write = "36"; } if (deviceno == 8) { device_write="37"; } if (deviceno ==9) { device_write="40"; } if (deviceno == 10) { device_write="41"; } if (deviceno == 11) { device_write = "42"; } if (deviceno == 12) { device_write = "43"; } if (deviceno == 13) { device_write = "48"; } if (deviceno == 14) { device_write = "49"; } if (deviceno == 15) { device_write = "50"; } if (deviceno == 16) { device_write = "51"; } if (deviceno == 17) { device_write = "56"; } if (deviceno == 18) { device_write = "57"; } if (deviceno == 19) { device_write = "58"; } if (deviceno == 20) { device_write = "59"; } //device //jiaoban[0] = Convert.ToInt32(objPlc1.ReadPlc("30")); //jiaoban[1] = Convert.ToInt32(objPlc1.ReadPlc("31")); //jiaoban[2] = Convert.ToInt32(objPlc1.ReadPlc("32")); //jiaoban[3] = Convert.ToInt32(objPlc1.ReadPlc("33")); //jiaoban[4] = Convert.ToInt32(objPlc1.ReadPlc("34")); //jiaoban[5] = Convert.ToInt32(objPlc1.ReadPlc("35")); //jiaoban[6] = Convert.ToInt32(objPlc1.ReadPlc("36")); //jiaoban[7] = Convert.ToInt32(objPlc1.ReadPlc("37")); //jiaoban[8] = Convert.ToInt32(objPlc1.ReadPlc("40")); //jiaoban[9] = Convert.ToInt32(objPlc1.ReadPlc("41")); //jiaoban[10] = Convert.ToInt32(objPlc1.ReadPlc("42")); //jiaoban[11] = Convert.ToInt32(objPlc1.ReadPlc("43")); //jiaoban[12] = Convert.ToInt32(objPlc1.ReadPlc("48")); //jiaoban[14] = Convert.ToInt32(objPlc1.ReadPlc("50")); //jiaoban[15] = Convert.ToInt32(objPlc1.ReadPlc("51")); //jiaoban[16] = Convert.ToInt32(objPlc1.ReadPlc("56")); //jiaoban[17] = Convert.ToInt32(objPlc1.ReadPlc("57")); //jiaoban[18] = Convert.ToInt32(objPlc1.ReadPlc("58")); //jiaoban[19] = Convert.ToInt32(objPlc1.ReadPlc("59")); DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否关闭搅拌" + "\r"); if (result == DialogResult.No) { return; } MainForm.pMainWin.objPlc1.Writeplc(device_write, "0"); string tkdat1 = ""; string tkdat2 = ""; string userid = "admin"; string pm = ""; string batch = ""; string gh = ""; string SetValue; string insertgh; string sdwd_t = ""; string sjwd1_t = ""; string sjwd2_t = ""; string yali_t = ""; string op_t = ""; op_t = "关闭搅拌"; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; tkdat1 = DateTime.Now.ToString(); tkdat2 = DateTime.Now.ToString(); gh = obj_gh.Substring(0, 4).ToUpper(); yali_t = MainForm.pMainWin.yl[Convert.ToInt32(device) - 1]; ; sdwd_t = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; ; sjwd1_t = MainForm.pMainWin.sjwd1[Convert.ToInt32(device) - 1]; ; sjwd2_t = MainForm.pMainWin.sjwd2[Convert.ToInt32(device) - 1]; ; SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "','" + yali_t + "','" + sdwd_t + "','" + sjwd1_t + "','" + op_t + "','" + sjwd2_t + "')"; insertgh = "insert into wd (pm,gh,batch,tkdat1,tkdat2,userid,finish,yl,sdwd,sjwd1,op,sjwd2) values " + SetValue; try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MainForm.pMainWin.ls_IniFile.WriteLog("write1", ex.Message.ToString()); return; } } private void button2_Click(object sender, EventArgs e) { string device_write=""; int deviceno; deviceno = Convert.ToInt32(device); if (deviceno == 1) { device_write = "30"; } if (deviceno == 2) { device_write = "31"; } if (deviceno == 3) { device_write = "32"; } if (deviceno == 4) { device_write = "33"; } if (deviceno == 5) { device_write = "34"; } if (deviceno == 6) { device_write = "35"; } if (deviceno == 7) { device_write = "36"; } if (deviceno == 8) { device_write = "37"; } if (deviceno == 9) { device_write = "40"; } if (deviceno == 10) { device_write = "41"; } if (deviceno == 11) { device_write = "42"; } if (deviceno == 12) { device_write = "43"; } if (deviceno == 13) { device_write = "48"; } if (deviceno == 14) { device_write = "49"; } if (deviceno == 15) { device_write = "50"; } if (deviceno == 16) { device_write = "51"; } if (deviceno == 17) { device_write = "56"; } if (deviceno == 18) { device_write = "57"; } if (deviceno == 19) { device_write = "58"; } if (deviceno == 20) { device_write = "59"; } //device //jiaoban[0] = Convert.ToInt32(objPlc1.ReadPlc("30")); //jiaoban[1] = Convert.ToInt32(objPlc1.ReadPlc("31")); //jiaoban[2] = Convert.ToInt32(objPlc1.ReadPlc("32")); //jiaoban[3] = Convert.ToInt32(objPlc1.ReadPlc("33")); //jiaoban[4] = Convert.ToInt32(objPlc1.ReadPlc("34")); //jiaoban[5] = Convert.ToInt32(objPlc1.ReadPlc("35")); //jiaoban[6] = Convert.ToInt32(objPlc1.ReadPlc("36")); //jiaoban[7] = Convert.ToInt32(objPlc1.ReadPlc("37")); //jiaoban[8] = Convert.ToInt32(objPlc1.ReadPlc("40")); //jiaoban[9] = Convert.ToInt32(objPlc1.ReadPlc("41")); //jiaoban[10] = Convert.ToInt32(objPlc1.ReadPlc("42")); //jiaoban[11] = Convert.ToInt32(objPlc1.ReadPlc("43")); //jiaoban[12] = Convert.ToInt32(objPlc1.ReadPlc("48")); //jiaoban[14] = Convert.ToInt32(objPlc1.ReadPlc("50")); //jiaoban[15] = Convert.ToInt32(objPlc1.ReadPlc("51")); //jiaoban[16] = Convert.ToInt32(objPlc1.ReadPlc("56")); //jiaoban[17] = Convert.ToInt32(objPlc1.ReadPlc("57")); //jiaoban[18] = Convert.ToInt32(objPlc1.ReadPlc("58")); //jiaoban[19] = Convert.ToInt32(objPlc1.ReadPlc("59")); DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否开启搅拌" + "\r"); if (result == DialogResult.No) { return; } MainForm.pMainWin.objPlc1.Writeplc(device_write, "1"); string tkdat1 = ""; string tkdat2 = ""; string userid = "admin"; string pm = ""; string batch = ""; string gh = ""; string SetValue; string insertgh; string sdwd_t = ""; string sjwd1_t = ""; string sjwd2_t = ""; string yali_t = ""; string op_t = ""; op_t = "开启搅拌"; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; tkdat1 = DateTime.Now.ToString(); tkdat2 = DateTime.Now.ToString(); gh = obj_gh.Substring(0, 4).ToUpper(); yali_t = MainForm.pMainWin.yl[Convert.ToInt32(device) - 1]; ; sdwd_t = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; ; sjwd1_t = MainForm.pMainWin.sjwd1[Convert.ToInt32(device) - 1]; ; sjwd2_t = MainForm.pMainWin.sjwd2[Convert.ToInt32(device) - 1]; ; SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "','" + yali_t + "','" + sdwd_t + "','" + sjwd1_t + "','" + op_t + "','" + sjwd2_t + "')"; insertgh = "insert into wd (pm,gh,batch,tkdat1,tkdat2,userid,finish,yl,sdwd,sjwd1,op,sjwd2) values " + SetValue; try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MainForm.pMainWin.ls_IniFile.WriteLog("write1", ex.Message.ToString()); return; } } private void button3_Click(object sender, EventArgs e) { string op_t = ""; DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否执行操作" + "\r"); if (result == DialogResult.No) { return; } if (rb_auto.Checked) { MainForm.pMainWin.op[Convert.ToInt32(device) - 1] = 1; MainForm.pMainWin.start[Convert.ToInt32(device) - 1] = 1; op_t = "开启自动"; } if (rb_man.Checked) { MainForm.pMainWin.op[Convert.ToInt32(device) - 1] = 0; MainForm.pMainWin.start[Convert.ToInt32(device) - 1] = 0; op_t = "开启手动"; } string tkdat1 = ""; string tkdat2 = ""; string userid = "admin"; string pm = ""; string batch = ""; string gh = ""; string SetValue; string insertgh; string sdwd_t = ""; string sjwd1_t = ""; string sjwd2_t = ""; string yali_t = ""; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; tkdat1 = DateTime.Now.ToString(); tkdat2 = DateTime.Now.ToString(); gh = obj_gh.Substring(0, 4).ToUpper(); yali_t = MainForm.pMainWin.yl[Convert.ToInt32(device) - 1]; sdwd_t = MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1]; sjwd1_t = MainForm.pMainWin.sjwd1[Convert.ToInt32(device) - 1]; sjwd2_t = MainForm.pMainWin.sjwd2[Convert.ToInt32(device) - 1]; SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "','" + yali_t + "','" + sdwd_t + "','" + sjwd1_t + "','" + op_t + "','" + sjwd2_t + "')"; insertgh = "insert into wd (pm,gh,batch,tkdat1,tkdat2,userid,finish,yl,sdwd,sjwd1,op,sjwd2) values " + SetValue; try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MainForm.pMainWin.ls_IniFile.WriteLog("write1", ex.Message.ToString()); return; } } private void button6_Click(object sender, EventArgs e) { DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否执行操作" + "\r"); if (result == DialogResult.No) { return; } MainForm.pMainWin.sdwd[Convert.ToInt32(device) - 1] = sd_wd.Text; } private void pictureBox1_Click(object sender, EventArgs e) { } private void button7_Click(object sender, EventArgs e) { string tkdat1 = DateTime.Now.ToString(); string tkdat2 = DateTime.Now.ToString(); string userid = "admin"; string pm = cb_pm.Text; string batch = tb_batch.Text; string gh = obj_gh.Substring(0, 4).ToUpper(); string SetValue = "('" +pm+"','"+gh+"','"+batch+"','"+tkdat1+"','"+tkdat2+"','"+userid+"','"+"1"+ "')"; ; string insertgh = "insert into gh (pm,gh,batch,tkdat1,tkdat2,userid,finish) values " + SetValue; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; string updategh = "update gh set tkdat2='" + tkdat2 + "'," + " finish ='0',"+ "userid='" + userid + "' where gh ='" + gh + "'"; string selectgh = " select count(gh) from gh where gh = '" + gh + "'" + " and finish='" +"1"+ "'"; string count=""; DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否执行操作" + "\r"); if (result == DialogResult.No) { return; } try { count = Narnu.GetObjectByOleDbString(selectgh).ToString(); } catch(Exception ex) { MessageBox.Show("出错!" +ex.ToString()); return; } // MessageBox.Show(count.ToString()); if (count == "0") { try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MessageBox.Show("保存数据出现错误0!" + ex.ToString()); return; } } else { try { Narnu.DoOleDbString(updategh); } catch (Exception ex) { MessageBox.Show("保存数据出现错误1!" + ex.ToString()); return; } try { Narnu.DoOleDbString(insertgh); } catch (Exception ex) { MessageBox.Show("保存数据出现错误2!" + ex.ToString()); return; } } MessageBox.Show("操作成功!"); } private void bt_com_Click(object sender, EventArgs e) { string tkdat1 = DateTime.Now.ToString(); string tkdat2 = DateTime.Now.ToString(); string userid = "admin"; string pm = cb_pm.Text; string batch = tb_batch.Text; string gh = obj_gh.Substring(0, 4).ToUpper(); string SetValue = "('" + pm + "','" + gh + "','" + batch + "','" + tkdat1 + "','" + tkdat2 + "','" + userid + "','" + "1" + "')"; ; string insertgh = "insert into gh (pm,gh,batch,tkdat1,tkdat2,userid,finish) values " + SetValue; //string updategh = "update gh set " + "pm ='" + pm + "'," + "gh='" + gh + "'," + "batch='" + batch + "'," + "tkdat1='" + tkdat1 + "'," + "tkdat2='" + tkdat2 + "'," + "userid='" + userid + "' where gh ='" +gh + "'"; string updategh = "update gh set tkdat2='" + tkdat2 + "'," + " finish ='0'," + "userid='" + userid + "' where gh ='" + gh + "'"; string selectgh = " select count(gh) from gh where gh = '" + gh + "'" + " and finish='" + "1" + "'"; DialogResult result = MainForm.pMainWin.ls_IniFile.ShowDeleteAlert("是否执行操作" + "\r"); if (result == DialogResult.No) { return; } try { Narnu.DoOleDbString(updategh); } catch (Exception ex) { MessageBox.Show("保存数据出现错误1!" + ex.ToString()); return; } MessageBox.Show("操作成功!"); } private void button7_Click_1(object sender, EventArgs e) { string gh = ""; lb_gh.Text = obj_gh.Substring(0, 4).ToUpper(); gh = obj_gh.Substring(0, 4).ToUpper(); device = obj_gh.Substring(5, 2); DateTime tk; DataSet ds; tk = Convert.ToDateTime(dateTimePicker1.Value); string selectgh = " select * from gh where gh = '" + gh + "'" + " and tkdat1>=Cdate('" +tk +"')"+ " and finish='" + "1" + "' order by tkdat1 desc"; ds = Narnu.GetDataSetByOleDbString(selectgh); if (ds.Tables["gh"].Rows.Count == 0) { cb_pm.Text = ""; tb_batch.Text = ""; bt_st.Enabled = true; bt_com.Enabled = false; //cb_pm } else { cb_pm.Text = ds.Tables["gh"].Rows[0][6].ToString(); tb_batch.Text = ds.Tables["gh"].Rows[0][5].ToString(); bt_st.Enabled = false; bt_com.Enabled = true; } FillDataTk(gh.ToString(),tk); } private void button8_Click(object sender, EventArgs e) { PrintDGV.Print_DataGridView(this.dataGridView1); } } }
主要控制程序部分
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Net; 10 using System.Net.Sockets; 11 using System.Data.SqlClient; 12 using System.Data.Sql; 13 using System.Data.OleDb; 14 using System.Reflection; 15 using System.Threading; 16 using System.Runtime.InteropServices; 17 using LBSoft.IndustrialCtrls; 18 using LBSoft.IndustrialCtrls.Meters; 19 using LBSoft.IndustrialCtrls.Utils; 20 21 22 namespace work 23 { 24 public partial class FormNew : Form 25 { 26 public static FormNew pMainWin = null; 27 28 public Plc objPlc = new Plc(); 29 public PlcSyn objPlc1 = new PlcSyn(); 30 public IniFile ls_IniFile = new IniFile(Environment.CurrentDirectory + "\\log.ini"); 31 public Data objData = new Data(); 32 public Mutex mutex; 33 public string ddj1read = ""; 34 public Thread objThread; 35 36 public string[] sdwd = new string[12];//设定 37 public string[] sjwd1 = new string[12];//高位 38 public string[] sjwd2 = new string[12];//低位 39 public string[] yl = new string[12];//压力 40 public int[] k_dj = new int[3]; 41 public int[] guzhangshuru = new int[12]; 42 public int[] jiaoban = new int[19];//拌 43 public int[] zhileng = new int[12];//制冷 44 public int[] zhuangtai = new int[12]; 45 public int[] chishu = new int[12]; 46 public int[] op = new int[12]; 47 public string[] opdesc = new string[12]; 48 public Thread objReadwdThread; 49 public Thread objReadkzThread; 50 public Thread objFlashztThread; 51 public int[] jb_time = new int[12]; 52 public int[] sdjb_time = new int[12]; 53 54 public int[] zl_time = new int[12]; 55 public int[] flag_30 = new int[12]; 56 public int[] flag_60 = new int[12]; 57 public int[] flag_180 = new int[12]; 58 public int[] flag_10 = new int[12]; 59 public int[] time = new int[12]; 60 public int[] time_flag = new int[12]; 61 public int[] time_zl = new int[12]; 62 public int[] time_zl_flag = new int[12]; 63 public int[] start = new int[12]; 64 public int[] opplc = new int[12]; 65 public int flag42; 66 public int flag43; 67 public int flag44; 68 public string[] pm = new string[12];//压力 69 public string[] batch = new string[12];//压力 70 public string[] tkdat = new string[12];//压力 71 public string gs_userid = ""; 72 public int[] zhileng_temp = new int[12];//制冷 73 74 public int[] op_jb_flag = new int[12]; 75 public int[] op_jb_time = new int[12]; 76 public FormNew(string userid) 77 { 78 79 InitializeComponent(); 80 pMainWin = this; 81 mutex = new Mutex(false, "SINGLE_INSTANCE_MUTEX"); 82 if (!mutex.WaitOne(0, false)) 83 { 84 mutex.Close(); 85 mutex = null; 86 } 87 this.gs_userid = userid; 88 } 89 //判断一个子窗体是否存在 90 private bool checkChildFrmExist(string childFrmName) 91 { 92 foreach (Form childFrm in this.MdiChildren) 93 { 94 //用子窗体的Name进行判断,如果已经存在则将他激活 95 if (childFrm.Name == childFrmName) 96 { 97 if (childFrm.WindowState == FormWindowState.Minimized) 98 childFrm.WindowState = FormWindowState.Normal; 99 childFrm.Activate(); 100 return true; 101 } 102 } 103 return false; 104 } 105 public void readwd() 106 { 107 int device = 0; 108 string dev_desc = ""; 109 while (true) 110 { 111 112 try 113 { 114 for (int i = 0; i < 11; i++) 115 { 116 device = 57 + i * 2; 117 118 if (i == 11) 119 { 120 sjwd1[i] = (Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) / 65535 * 50 - 20 + 0.5).ToString("F2"); 121 } 122 if (i == 13) 123 { 124 sjwd1[i] = (Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) / 65535 * 50 - 20 + 0.5).ToString("F2"); 125 } 126 if (i == 14) 127 { 128 sjwd1[i] = (Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) / 65535 * 50 - 20 + 0.5).ToString("F2"); 129 } 130 else 131 { 132 sjwd1[i] = (Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) / 65535 * 50 - 20 + 0.2).ToString("F2"); 133 } 134 if (i < 9) 135 { 136 dev_desc = "0" + (i + 1).ToString(); 137 // ii01_011.Text = sjwd1[0]; 138 } 139 else 140 { 141 dev_desc = (i + 1).ToString(); 142 } 143 if (op[i] == 0) 144 { 145 opdesc[i] = "手动"; 146 } 147 if (op[i] == 1) 148 { 149 opdesc[i] = "自动"; 150 } 151 if (op[i] == 2) 152 { 153 opdesc[i] = "澄清"; 154 } 155 if (op[i] == 3) 156 { 157 opdesc[i] = "发酵"; 158 } 159 ii01_014.Text = opdesc[0]; 160 ii02_024.Text = opdesc[1]; 161 ii03_034.Text = opdesc[2]; 162 ii04_044.Text = opdesc[3]; 163 ii05_054.Text = opdesc[4]; 164 ii06_064.Text = opdesc[5]; 165 ii07_074.Text = opdesc[6]; 166 ii08_084.Text = opdesc[7]; 167 ii09_094.Text = opdesc[8]; 168 ii10_104.Text = opdesc[9]; 169 ii11_114.Text = opdesc[10]; 170 171 172 ii01_012.Text = sjwd1[0]; 173 ii02_022.Text = sjwd1[1]; 174 ii03_032.Text = sjwd1[2]; 175 ii04_042.Text = sjwd1[3]; 176 ii05_052.Text = sjwd1[4]; 177 ii06_062.Text = sjwd1[5]; 178 ii07_072.Text = sjwd1[6]; 179 ii08_082.Text = sjwd1[7]; 180 ii09_092.Text = sjwd1[8]; 181 ii10_102.Text = sjwd1[9]; 182 ii11_112.Text = sjwd1[10]; 183 184 // 185 ii01_011.Text = sdwd[0]; 186 ii02_021.Text = sdwd[1]; 187 ii03_031.Text = sdwd[2]; 188 ii04_041.Text = sdwd[3]; 189 ii05_051.Text = sdwd[4]; 190 ii06_061.Text = sdwd[5]; 191 ii07_071.Text = sdwd[6]; 192 ii08_081.Text = sdwd[7]; 193 ii09_091.Text = sdwd[8]; 194 ii10_101.Text = sdwd[9]; 195 ii11_111.Text = sdwd[10]; 196 197 //System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox); 198 //FormDisplay FormDisplay = new FormDisplay(pb.Name); 199 //FormDisplay.Show(); 200 // sf01_011.Text = sdwd[0].ToString(); 201 // sf01_012.Text = sjwd1[0].ToString(); 202 //sf01_013.Text = sjwd2[0].ToString(); 203 // sf01_014.Text = yl[0].ToString(); 204 } 205 206 for (int j = 0; j < 11; j++) 207 { 208 device = 58 + j * 2; 209 yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 3.8/ 65535) * 5).ToString("F2"); 210 if ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 3.9 / 65535) > 4.1) 211 { 212 yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 3.8/ 65535 - 3.9) * 5 / 4 + 3.8 * 5).ToString("F2"); 213 } 214 else 215 { 216 yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 3.8 / 65535) * 5).ToString("F2"); 217 } 218 219 // 220 //if ((Convert.ToDouble(objPlc1.ReadPlc("77")) * 13 / 65535) > 11) 221 //{ 222 // yl[1] = (((Convert.ToDouble(objPlc1.ReadPlc("77")) * 13 / 65535) - 11) * 20 / 3 + 11 * 23.2 + 0.4).ToString("F2"); 223 //} 224 //else 225 //{ 226 // yl[1] = ((Convert.ToDouble(objPlc1.ReadPlc("77")) * 13 / 65535) * 23.2 + 0.4).ToString("F2"); 227 //} 228 //if (j == 0) 229 //{ 230 // yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 4.1 / 65535) * 5.51).ToString("F2"); 231 //} 232 233 //if (j == 25) 234 //{ 235 // if ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 4.5 / 65535) > 11) 236 // { 237 // yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 4.5 / 65535) * 5.61).ToString("F2"); 238 // } 239 //} 240 241 //if (j == 26) 242 //{ 243 // yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 4.5 / 65535) * 5.5).ToString("F2"); 244 //} 245 //if (j == 35) 246 //{ // yl[j] = ((Convert.ToDouble(objPlc1.ReadPlc(device.ToString())) * 4.5 / 65535) * 5.5).ToString("F2"); 247 //} 248 ii01_013.Text = yl[0]; 249 ii02_023.Text = yl[1]; 250 ii03_033.Text = yl[2]; 251 ii04_043.Text = yl[3]; 252 ii05_053.Text = yl[4]; 253 ii06_063.Text = yl[5]; 254 ii07_073.Text = yl[6]; 255 ii08_083.Text = yl[7]; 256 ii09_093.Text = yl[8]; 257 ii10_103.Text = yl[9]; 258 ii11_113.Text = yl[10]; 259 260 } 261 262 for (int k = 0; k < 11; k++) 263 { 264 device = 19 + k; 265 zhileng[k] = Convert.ToInt32(objPlc1.ReadPlc(device.ToString())); 266 } 267 268 for (int m = 0; m < 18; m++) 269 { 270 device = 1 + m; 271 jiaoban[m] = Convert.ToInt32(objPlc1.ReadPlc(device.ToString())); 272 } 273 274 //for (int n = 0; n < 41; n++) 275 //{ 276 // device = 89 + n; 277 // guzhangshuru[n] = Convert.ToInt32(objPlc1.ReadPlc(device.ToString())); 278 //} 279 //for (int n = 0; n < 3; n++) 280 //{ 281 // device = 83 + n; 282 // k_dj[n] = Convert.ToInt32(objPlc1.ReadPlc(device.ToString())); 283 //} 284 Thread.Sleep(200); 285 } 286 catch (Exception e) 287 { 288 //ls_IniFile.WriteLog("ReadData12", e.Message.ToString()); 289 continue; 290 } 291 292 } 293 } 294 private string DateDiff(DateTime DateTime1, DateTime DateTime2) 295 { 296 string dateDiff = null; 297 try 298 { 299 TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); 300 TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); 301 TimeSpan ts = ts1.Subtract(ts2).Duration(); 302 dateDiff = ts.Days.ToString() + "天" 303 + ts.Hours.ToString() + "时" 304 + ts.Minutes.ToString() + "分"; 305 //+ ts.Seconds.ToString() + "秒"; 306 } 307 catch 308 { 309 310 } 311 return dateDiff; 312 }
仪表显示控件源码 https://files.cnblogs.com/files/meslog/LBIndustrialCtrls_src.zip qq 1153755352