




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/ C#异步数据接收串口操作类/ 串口串口接收到数据时,会产生一个事件。 / SPRecvDataArgs就是该事件的参数,参数中的RecvData包含接收到的数据。 / 使用方法: / public class SPRecvDataArgs:EventArgs / / 接收到的数据组成的字节数组 / private byte recvData; / / 构造函数,需要一个包含数据的byte作为初始化参数来实例化 SPRecvDataArgs / / 接收到的数据 public SPRecvDataArgs(byte recvData) if( recvData = null) throw(n
2、ew ArgumentNullException(); this.recvData = recvData; / / 返回接收到的数据内容 / public byte RecvData get return recvData; / / 封装动态链接库IbmsSerialPort.dll的功能,提供在.NET环境中异步 / 串口接收和发送功能。特别实现的是异步通过信号自动接收数据的模式。 / public class IbmsSerialPort:IDisposable #region 平台调用声明代码 / / 声明IbmsSerialPort.dll的Ibms_OpenPort函数 / / 串口
3、号 / 波特率 / DllImport("IbmsSerialPort.dll") public static extern IntPtr Ibms_OpenPort(int nPort, int nRate); / / 声明IbmsSerialPort.dll的Ibms_Close函数 / DllImport("IbmsSerialPort.dll") public static extern void Ibms_Close( IntPtr port); / / 声明IbmsSerialPort.dll的Ibms_SendData函数 / / / /
4、DllImport("IbmsSerialPort.dll") public static extern bool Ibms_SendData( IntPtr port, byte data,int nDataSize); / / 声明IbmsSerialPort.dll的Ibms_SetFuncHandle函数 / / DllImport("IbmsSerialPort.dll") public static extern void Ibms_SetFuncHandle( IntPtr port, HandleFunc handDataFunc); #
5、endregion #region 定义字段 / / 定义数据处理委托,作为API的函数指针传入动态链接库 / public delegate void HandleFunc(IntPtr pData, int nDataSize); / / 定义数据接收事件的原型 / public delegate void RecvData(object sender,SPRecvDataArgs e); / / 定义数据接收事件 / public event RecvData OnRecvData; / / 串口处理接收数据的委托 / private HandleFunc _handleDataFunc
6、; / / 串口的编号,从1开始的整数,最大255 / private int port; / / 串口所支持的波特率,必须是标准波特率之一 / private StanderdRate rate; / / 串口当前的打开状态 / private bool openStatus=false; / / 串口句柄 / private IntPtr portHandle; #region 定义标准的串口波特率 / / 标准的波特率 / public enum StanderdRate R50=50, R75=75, R110=110, R150=150, R300=300, R600=600, R1
7、200=1200, R2400=2400, R4800=4800, R9600=9600, R19200=19200, R38400=38400, R57600=57600, R76800=76800, R115200=115200 ; #endregion #endregion #region 定义方法 / / 构造函数 / public IbmsSerialPort() portHandle = (IntPtr)0; _handleDataFunc = new HandleFunc(OnDllRecvData); / / 打开串口 / / 串口号 / 波特率 / / 抛出应用程序异常,包换
8、错误描述 public void Open(int nPort, StanderdRate nRate) if(nPort > 255 | nPort < 0) throw(new ArgumentOutOfRangeException(); port = nPort; rate = nRate; portHandle = Ibms_OpenPort( port, (int)rate ); if( (IntPtr)0 = portHandle ) throw( new ApplicationException("打开串口失败"); /注册函数指针 Ibms_Se
9、tFuncHandle( portHandle, _handleDataFunc ); openStatus = true; / / 关闭串口 / public void Close() if( openStatus ) Ibms_Close( portHandle); openStatus = false; / / 发送数据 / / 数据内容 / 抛出应用程序异常,包换错误描述 public void SendData( byte data ) if( !openStatus ) throw( new ApplicationException("串口没有打开,发送数据失败"
10、;) ); if( !Ibms_SendData( portHandle, data, data.Length ) ) throw( new ApplicationException("串口发送数据失败") ); / / 处理接收到的串口数据 / / 串口数据接收缓冲区首地址 / 数据大小,一般数据大小不超过2K unsafe protected void OnDllRecvData(IntPtr pUnhandleData, int nDataSize) int dataSize= nDataSize ; byte * pData =(byte *) pUnhandleD
11、ata; byte data = new bytedataSize; /复制数据到byte数组 for(int i=0; i datai= pDatai; /激发事件 OnRecvData( this, new SPRecvDataArgs(data) ); #endregion #region 定义属性 / / 返回当前的串口号 / public int Port get return port; / / 返回当前串口的波特率 / public StanderdRate Rate get return rate; / / 返回当前串口的状态 / public bool OpenStatus
12、get return openStatus; #endregion #region 非托管资源的及时释放 / / 因为包含了非托管的资源(占用系统串口),必须实现IDisposable接口 / 在使用完该类的时候,必须记得调用Dispose(),回收系统资源 / / / 方法1 / / SerialPort port =new SerialPort(); / . / /在try-catch-finaly的finaly中释放资源 / / port.Dispose(); / / / 方法2 / using( SerialPort port = new SerialPort() / / . / / 变量超出作用域时会自动调用其Dispose()方法 / / / IbmsSerialPort() Dispose( false ); protected virtual void Dispose( bool disposing ) if( disposing ) /清理托管的对象 /清理非托管的资源 Close(); #region IDisposable 成员 public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务分析的意义和内容说课稿-2025-2026学年中职专业课-财务管理-财经类-财经商贸大类
- unit 7 Today is Monday教学设计-2025-2026学年小学英语四年级下册北师大版(一起)
- 第1课 寻根之旅教学设计-2025-2026学年初中艺术·美术人教版2024七年级下册-人教版2024
- 幼儿的社会行为与道德发展说课稿-2025-2026学年中职专业课-幼儿心理学-学前教育类-教育与体育大类
- 外研版八年级上册英语全册教学设计(配2025年秋改版教材)
- 跳动的琴弦(欣赏 阳光照耀着塔什库尔)教学设计-2025-2026学年小学音乐西师大版五年级上册-西师大版
- 蓄电池知识培训内容课件
- 2025年天津市红桥区中考三模物理试题(解析版)
- 2025年四川省资阳市中考英语试卷(含答案与解析)
- 第1章 生命的世界说课稿-2025-2026学年初中生物学北师大版七年级上册-北师大版
- 调相机工程施工质量验收规程-第4部分-仪表与控制系统
- 四渡赤水(课件)
- 2024年浙江绍兴杭绍临空示范区开发集团有限公司招聘笔试真题
- 部编版五年级语文上册各单元作文范文
- 贵州省贵阳市(2024年-2025年小学五年级语文)统编版小升初真题(上学期)试卷及答案
- 2024-2025学年青岛版七年级数学上册第一次单元过关检测 (前两章)
- 苏少版七年级上册综合实践活动教案
- 院前急救技能竞赛(驾驶员)理论考试题库大全-上(选择题)
- 锁骨骨折的护理查房
- 部编人教版六年级上册语文全册教学课件+单元复习课件
- 《消费心理学》课程教学大纲
评论
0/150
提交评论