[原创]无线监控系统之二-------C#实现(续)
[原创]无线监控系统之二-------C#实现(续)
接上。。。。
接上。。。。
二、我们来看看用户视图层
(Ⅰ) 用户窗体公共接口DataFormInter
namespace BUSINESSMANAGE
{
interface DataFormInter
{
//LOGICDEAL.DEALTHREAD.DealThread dt { set;get;}
//Thread thread { set;get;}
void init();
void start();
void run();
}
}
{
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)
{
}
}
}
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)
{
}
}
}
呵呵~~这就是第二部分了,还有系统的其它一些代码就不帖上了,虽然累但感觉还是蛮高兴的,感谢大家发时间阅读,如你需要打包源代码俺将提供到你的邮箱中。。。,再次感谢大家,感谢大家对易学的支持,希望大家学的愉快~~~~
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc
C/S框架网