SerialPort类同样也有很多的方法来实现它与其它硬件的通信,其常用方法如表4-2所示。
表4-2 SerialPort类的常用方法
方法名称 说 明
Close 关闭端口连接,将IsOpen属性设置为False,并释放内部Stream对象
Open 打开一个新的串行端口连接
Read 从SerialPort输入缓冲区中读取
ReadByte 从SerialPort输入缓冲区中同步读取一个字节
ReadChar 从SerialPort输入缓冲区中同步读取一个字符
ReadLine 一直读取到输入缓冲区中指定NewLine值
ReadTo 一直读取到输入缓冲区中指定的value的字符
Write 已重载。将数据写入串行端口输出缓冲区
WriteLine 将指定的字符串和NewLine值写入输出缓冲区
在本系统的串口通信设计中最重要的设计就是数据接收的方法设计,SerialPort类控件在C#中有许许多多的事件可以调用,使用其中的DataReceived事件来触发的方法,只要完美的设置好其中ReceivedBytesThreshold的数值就可以很方便的使用,若接收的数据长度为定长时,则只要将其中ReceivedBytesThreshold的数值设置为该接收数据的长度即可;若接收的数据的末端是固定的字符或字符串则可用ReadTo的方法来实现或在DataReceived事件中判断接收的字符是否符合条件,若满足条件就进行接收。SerialPort类读取数据的方法许多都是同步阻塞调用,应尽量避免在主线程中调用,可以使用线程间处理调用或异步处理来调用这些读取数据的方法。
事件表示C#中已定义的一个对象,即处理通知过程的对象。可是这样说未免抽象,对于像我这样的初学者往往还是难以理解。而我的理解是,事件是处理事件的对象感兴趣的,能够感知或捕获到一种事物状态的改变。说白了,事件即改变。哲学上说,事物的运动是永恒的,静止是相对的。永恒的运动意着事物本身在发生着改变,所以无时无刻,我们生活的这个世界和宇宙都有无穷的改变在发生,但是,这当中的绝大多数对你来说并不是事件,秘鲁总统死了,对秘鲁全国所有的人来说或许是一个事件,因为他们关心,可是对课堂正在听课全然不知的你来说就不是,除非你听到了这样一个新闻,开始关注,那么这个变化对你来说就是一个事件。所以,在这所有的变化中,你能捕获到的,感兴趣的变化,对你来说,就是一个事件。
委托是C#中的一种引用类型,类似于C/C++中的函数指针。与函数指针不同的是,委托是面向对象、类型安全的,而且委托可以引用静态方法和实例方法,而函数指针只能引用静态函数。委托主要用于.NET Framework中的事件处理程序和回调函数。
一个委托可以看作一个特殊的类,因而它的定义可以像常规类一样放在同样的位置。与其他类一样,委托必须先定义以后,再实例化。与类不同的是,实例化的委托没有与之相应的术语(类的实例化称作对象),作为区分我们将实例化的委托称为委托实例。
C#中的委托和指针不一样,指针不通过MSIL而是直接和内存打交道,这也是指针不安全的原因所在,当然也是采用指针能够提高程序运行速度的缘故;委托不与内存打交道,而是把这一工作交给CLR去完成。
从SerialPort对象接收数据时,由于DataReceived事件是在辅线程被引发,当接收到一条完整的数据时就返回到窗体上显示或返回主线程处理时,特别要注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。
如图4-1表示上位机软件编程实现的流程图。
- 上一篇:激光测距中激光接收电路的设计
- 下一篇:基于blackfin DSP视频字符叠加的实现
-
-
-
-
-
当代大学生慈善意识研究+文献综述
酸性水汽提装置总汽提塔设计+CAD图纸
中考体育项目与体育教学合理结合的研究
大众媒体对公共政策制定的影响
乳业同业并购式全产业链...
java+mysql车辆管理系统的设计+源代码
电站锅炉暖风器设计任务书
十二层带中心支撑钢结构...
杂拟谷盗体内共生菌沃尔...
河岸冲刷和泥沙淤积的监测国内外研究现状