无线监控系统之二-------C#实现
无线监控系统之二-------C#实现
呵呵,虽然昨晚写得很辛苦了,但还是把我的第一部分写完了,呵呵~今晚就把第二部分写完吧,转载时请不要忘了注明本文来C/S框架网哦。 如图,我们先看看我们的解决方案,大体上按照MVC设计模型设计,分为用户视图层、业务逻辑层和数据访问层,另外还有公共处理模块和主窗体模块。 用户登录和主窗体就不多说了。。。。 一、我们首先来看看我们最核心的一层业务逻辑层LOGICDEAL。 (Ⅰ) COMMUNICATE包中主要是上位机与下位机数据通讯方式的实现。
namespace LOGICDEAL.COMMUNICATE
{ public class Cflag { private static CommunicateInter CType = null; //通讯类型 private static bool OFlag = true; // 通讯口是否已打开 private static int FType = -1; //数据帧功能类型 public static void setCtpye(CommunicateInter ci) { CType = ci; } //设置通讯类型 public static CommunicateInter getCtype() { return CType; } //获取通讯类型 public static void setOflag(bool oflag) { OFlag = oflag; } //设置打开类型,true为打开 public static bool getOfag() { return OFlag; } //获取打开类型 public static void setFtype(int i) { FType = i; } //设置数据帧功能类型,0:温度数值,1: public static int getFtype() { return FType; } } (Ⅱ) DATAFRAME包中主要实现数据帧及其处理接口 数据帧接口 using System;
using System.Collections.Generic; using System.Text; namespace LOGICDEAL.DATAFRAME { public interface DataFrameInter { byte[] dealFrame(byte[] frame); //接收数据帧函数 byte[] sendFrame(); //发送数据帧函数 void setAFI(); } } 数据帧处理接口 namespace LOGICDEAL.DATAFRAME
{ interface ArthFrameInter { byte[] dealData(byte[] framdata); //数据帧处理函数 } } 数据帧接口实现一:温度值数据帧类TemValueData namespace LOGICDEAL.DATAFRAME 数据帧处理接口实现一:温度值数据帧处理类TemValueArth{ class TemValueData:DataFrameInter { private ArthFrameInter afi = null; //工厂模式:对应的数据帧处理类 private int n=22, m=9; public TemValueData() { } public byte[] dealFrame(byte[] frame) //接收数据帧函数,温度值数据帧长度为21字节 { if (afi.dealData(frame) == null) return null; byte[] adata = new byte[m]; //需要输出的字节数组,长度为9字节 Array.Copy(afi.dealData(frame), adata, m); //adata = afi.dealData(frame); return adata; } public byte[] sendFrame() //发送数据帧函数 { byte[] a = new byte[10]; return a; } public void setAFI() //获取数据帧处理类实例 { this.afi = new TemValueArth(); } } } namespace LOGICDEAL.DATAFRAME
{ public class TemValueArth:ArthFrameInter { private int n = 22, m = 9; public byte[] dealData(byte[] framdata) //数据帧处理函数 { if (!framdata[0].ToString("x").Trim().Equals("aa")) return null; if (!framdata[2].ToString("x").Trim().Equals("11")) return null; if ((!framdata[4].ToString("x").Trim().Equals("3")) && (!framdata[4].ToString("x").Trim().Equals("2"))) return null; int textds = 0; for (int j = 0; j < n - 2; j++) //计算前20字节数之和 { textds += Convert.ToInt32(COMMONDEAL.DataConversion.Hex2Ten(framdata[j].ToString("x").Trim())); } int efficy = Convert.ToInt32(COMMONDEAL.DataConversion.Hex2Ten(framdata[n - 2].ToString("x").Trim() + framdata[n - 1].ToString("x").Trim())); //计算效验码值 if (textds != efficy) { return null; } byte[] adata = new byte[m]; adata[0] = framdata[5]; //提取数据,2字节 adata[1] = framdata[6]; adata[2] = framdata[13]; //提取源地址,2字节 adata[3] = framdata[14]; adata[4] = framdata[15]; //提取网络地址,2字节 adata[5] = framdata[16]; adata[6] = framdata[17]; //网络号,1字节 adata[7] = framdata[18]; //提取通道,1字节 adata[8] = framdata[19]; //提取RSSI,1字节 return adata; } } } (Ⅲ) DEALTHREAD包中用户窗体与数据逻辑层的数据处理线程类: 用户窗体与数据逻辑层的数据处理线程类DealThread namespace LOGICDEAL.DEALTHREAD
{ public abstract class DealThread { //SynchronizationContext private COMMUNICATE.CommunicateInter cci = null; //通讯类型 private DATAFRAME. DataFrameInter dfi = null; //数据帧 public Thread thread = null; //线程 public byte[] data=null; //处理后的数据 public abstract void init(); //初始化 //数据处理 public void start() { thread.Start(); } //开始线程 public abstract void run(); //线程运行函数 public void stop() { thread.Abort();} //停止线程 public byte[] getData() //获得最终数据 { return data; } } } 接口实现一:温度值处理线程类TemVlueThd namespace LOGICDEAL.DEALTHREAD { public class TemVlueThd:DealThread { private COMMUNICATE.CommunicateInter cci = null; //通讯类型 private DATAFRAME.DataFrameInter dfi = null; //数据帧 //private Thread thread = null; //线程 byte[] dataa = null; private int n = 22, m = 9; public TemVlueThd() //构造函数 { init(); } public override void init() { this.cci = COMMUNICATE.Cflag.getCtype(); //初始化通讯类 this.dfi = new DATAFRAME.TemValueData(); //初始化数据帧类 dfi.setAFI(); this.thread = new Thread(new ThreadStart(this.run)); //申请线程 //throw new Exception("The method or operation is not implemented."); } public override void run() //线程运行的方法 { dataa = new byte[n]; if (cci.getdata() == null) return; Array.Copy(cci.getdata(), dataa, n); if (dfi.dealFrame(dataa) == null) return; data = new byte[m]; //返回的数据 Array.Copy(dfi.dealFrame(dataa), data, m); } } } 呵呵~~这一帖第二部分先写到这了。。。。谢谢大家!
参考文档:
C# 简易POS零售系统架构设计源码(3) 无线监控系统之一-------UML设计 [原创]无线监控系统之二-------C#实现(续) 无线监控系统之三-------测试与扩展 无线监控系统之四-------结言 C#植入友商网在线服务并实现同步用户注册接口实现 C# 注册系统热键/快捷键(MainForm HotKey) C#.NET 监视操作系统打开程序(使用Window消息实现全局系统勾子) C#源码-AnyPIM个人信息管理系统 6.2-源码下载 C#源码-mrp生产管理系统(C#.NET)-源码下载 C#源码-仿贝壳房少房产系统网站-源码下载 C#源码-[整站程序]英语沙龙全站系统 net 2.0_esalon-源码下载 信息系统开源框架 - 企业内信息系统应用架构(C#.NET+Winform) Winform三层架构+WebService+权限管理系统软件开发平台(C#.NET开发) C#三层架构系统 C#.NET三层架构快速开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |