[原创]无线监控系统之二-------C#实现(续)
作者:C/S框架网  发布日期:2011/06/12 18:22:25
[原创]无线监控系统之二-------C#实现(续)


接上。。。。

二、我们来看看用户视图层

  
  
() 用户窗体公共接口
DataFormInter

namespace BUSINESSMANAGE
{
   interface DataFormInter
   {
      //LOGICDEAL.DEALTHREAD.DealThread dt { set;get;}
      //Thread thread { set;get;}
      
      void init();
      void start();
      void run();
   }
}


()接口实现一:显示屏窗口DataDisplyForm

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace BUSINESSMANAGE
{
   public partial class DataDisplyForm : Form,DataFormInter,IDisposable
   {
      private bool stop = true;
      private byte[] tdata=null;
      private LOGICDEAL.DEALTHREAD.DealThread dt=null ;
      private Thread thread =null;
      protected delegate void DisplyTemValue(byte[] dataaa);
      private DisplyTemValue displytemvalue = null; //委托,数据处理及显示
      private DATAACCESS.DbOperation db = null;
      private int n = 22, m = 9;
      Label label, label0,label10;
      TextBox txt1, txt2;
      char[] ch = new char[] { ’,’};
      
      public DataDisplyForm()
      {
         
         //init();
         db = new DATAACCESS.DbOperation();
         InitializeComponent();
      }
      
      private void DataDisplyForm_Load(object sender, EventArgs e)
      {
         CreatePanelOnMain();
         thread = new Thread(new ThreadStart(run));
         thread.Start();
         //Control.CheckForIllegalCrossThreadCalls = false;
      }
      
      //public LOGICDEAL.DEALTHREAD.DealThread dt
      //{
      
      // set
      // {
      // dt=new LOGICDEAL.DEALTHREAD.TemVlueThd();
      // }
      // get
      // {
      // return dt;
      // }
      //}
      
      
      public void init()
      {
      }
      
      public void run()
      {
         DataTable dt1;
         tdata = new byte[m]; // 最终的9个字节的数据, 顺序:数据,2字节 源地址,2字节 网络地址,2字节 网络号,1字节 通道,1字节 RSSI,1字节
         displytemvalue = new DisplyTemValue(showTemDisplyValue); //委托,数据处理及显示
         while (stop)
         {
            Thread.Sleep(1);
            if (LOGICDEAL.COMMUNICATE.Cflag.getFtype() == 0) //读取温度数值
            {
               dt = new LOGICDEAL.DEALTHREAD.TemVlueThd(); //新建数据线程类
               dt.start(); //开始运行线程
               Thread.Sleep(2); //暂停3毫秒,以便dt运行完
               if (dt.getData() == null) { continue; }
               Array.Copy(dt.getData(), tdata, m); //将处理后的最终数据传给用户窗体
               this.Invoke(displytemvalue, tdata); //委托,数据处理及显示
               dt.stop(); //销毁线程
               LOGICDEAL.COMMUNICATE.Cflag.setFtype(-1);
            }
            if (LOGICDEAL.COMMUNICATE.Cflag.getFtype() == 1) //更新网络地址
            {
               
               dt = new LOGICDEAL.DEALTHREAD.TemVlueThd(); //新建数据线程类
               dt.start(); //开始运行线程
               Thread.Sleep(3); //暂停3毫秒,以便dt运行完
               if (dt.getData() == null) { continue; }
               Array.Copy(dt.getData(), tdata, m); //将处理后的最终数据传给用户窗体
               //this.Invoke(displytemvalue, tdata); //委托,数据处理及显示
               //dt.stop(); //销毁线程
               
               dt1 = db.getData("select ipaddr from t_node where ipaddr=’" + COMMONDEAL.DataConversion.LenByte(tdata[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(tdata[3].ToString("x").Trim(), 2) + "’");
               if (dt1.Rows[0][0].ToString().Equals("")) { }
               else
               {
                  db.updateData("update t_node set netaddress=’"+COMMONDEAL.DataConversion.LenByte(tdata[4].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(tdata[5].ToString("x").Trim(), 2) +"’ where ipaddr=’"+dt1.Rows[0][0].ToString()+"’");
               }
               dt.stop(); //销毁线程
               LOGICDEAL.COMMUNICATE.Cflag.setFtype(-1);
            }
         }
      }
      
      public void showTemDisplyValue(byte[] dataaa) //委托,数据处理及显示
      {
         string v = Convert.ToString(COMMONDEAL.DataConversion.Hex2Ten(COMMONDEAL.DataConversion.LenByte(dataaa[0].ToString(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[1].ToString(), 2)));
         txttest.Text = v; //测试
         string rv = null;
         try
         {
            Label lab = ((Label)(this._Panel1OnM.Controls.Find("lblab" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]); //获取a、b
            rv = Convert.ToString(Convert.ToDouble(lab.Text.Split(ch)[0].ToString()) * Convert.ToDouble(v) + Convert.ToDouble(lab.Text.Split(ch)[1].ToString())); //计算实际值
            ((TextBox)(this._Panel1OnM.Controls.Find("txtdata" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]).Text = rv; //实际数值
            if ( float.Parse(rv) >50) //超值报警,暂定50
            {
               errorProvider1.SetIconAlignment(((TextBox)(this._Panel1OnM.Controls.Find("txtrssi" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]), ErrorIconAlignment.MiddleRight); //报警
               errorProvider1.SetError(((TextBox)(this._Panel1OnM.Controls.Find("txtrssi" + COMMONDEAL.DataConversion.LenByte(dataaa[2].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[3].ToString("x").Trim(), 2) + COMMONDEAL.DataConversion.LenByte(dataaa[7].ToString("x").Trim(), 2), false))[0]), "超值");
            }
         }
         catch { return; }
         
      }
      
      public void start() { }
      
      private void CreatePanelOnMain()                   //动态加载窗口控件
      {
         int m=0, n = 0;
         DataTable dt = db.getData("select ipaddr,channelnum,a,b from t_channal where ipaddr in (select ipaddr from t_node where monitornum=’01’) order by ipaddr desc");
         if (dt.Rows.Count <= 0) return;
         foreach(DataRow dr in dt.Rows)
         {
            // 起点坐标(10+m*100,30+n*22)
            
            m = 0;
            label = new Label(); //ipaddr,节点
            label.Name = "lbl"+dr[0].ToString() ;
            label.Text = dr[0].ToString();
            label.Location = new Point(10 + m * 100, 30 + n * 22);
            label.Size = new Size(100,22);
            this._Panel1OnM.Controls.Add(label);
            
            m++;
            label0 = new Label(); //channelnum,通道标示
            label0.Name = "lbl" + dr[1].ToString();
            label0.Text = dr[1].ToString(); //通道
            label0.Location = new Point(10 + m * 100, 30 + n * 22);
            label0.Size = new Size(100, 22);
            this._Panel1OnM.Controls.Add(label0);
            
            m++;
            txt1 = new TextBox(); //数据
            txt1.Name = "txtdata" + dr[0].ToString()+dr[1].ToString(); //标示:节点+通道
            txt1.Text = "0";
            txt1.Location = new Point(10+m*100,30+n*20);
            txt1.Size = new Size(100,20);
            txt1.BackColor = Color.White;
            txt1.Enabled = false;
            this._Panel1OnM.Controls.Add(txt1);
            
            m++;
            txt2 = new TextBox();
            txt2.Name = "txtrssi" + dr[0].ToString() + dr[1].ToString(); //ipaddr+channelnum
            txt2.Text = "0";
            txt2.Location = new Point(10 + m * 100, 30 + n * 20);
            txt2.Size = new Size(100,20);
            txt2.BackColor = Color.White;
            txt2.Enabled = false;
            this._Panel1OnM.Controls.Add(txt2);
            
            m++;
            label10 = new Label(); //a,b,a、b值
            label10.Name = "lblab" + dr[0].ToString()+dr[1].ToString();
            label10.Text = dr[2].ToString() +","+dr[3].ToString();
            label10.Location = new Point(10 + m * 100, 30 + n * 22);
            label10.Size = new Size(100, 22);
            label10.Visible = false;
            this._Panel1OnM.Controls.Add(label10);
            n++;
         }
      }
      
      private void DataDisplyForm_FormClosed(object sender, FormClosedEventArgs e)
      {
         thread.Abort();
         this.Dispose(true);
      }
      
      private void DataDisplyForm_Load_1(object sender, EventArgs e)
      {
      }
   }
}



呵呵~~这就是第二部分了,还有系统的其它一些代码就不帖上了,虽然累但感觉还是蛮高兴的,感谢大家发时间阅读,如你需要打包源代码俺将提供到你的邮箱中。。。,再次感谢大家,感谢大家对易学的支持,希望大家学的愉快~~~~

 

上一篇 下一篇