紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3914|回复: 0

(SerialPort)串口编程知识整理:(三)串口编程的系统设计实用经验总结

[复制链接]
冰糖 发表于 2010-8-2 22:56:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本文介绍在串口编程项目中有关系统设计和开发方面的经验总结,希望对正在进行类似系统开发的同行提供一些借鉴和参考,同时也欢迎大家在此讨论。
1、界面设计

(1)在界面设计上,由于系统启动后要始终实时监控加油数据,采用了SDI展示方式。
(2)由于每个油站的油机个数不同(标红处),所以将显示信息通过控件进行封装,并且按照实际的客户环境,通过设置动态加载。
(3)界面通过四种颜色表示四种油机状态,分别为绿色-连在正常,黄色-正在加油,红色-加油结束,灰色-连接失败
(4)为了有更好的用户体验,每次系统退出时都保持每条油枪的油品、单价信息,以便下次系统启动时向用户显示。
(5)当进行调价操作时,对应油机的单价要实时调整。
(6)由于通过异步线程接收数据,在数据显示在界面的时候,需要通过代理完成。

2、串口的开关顺序控制
         由于系统需要通过SerialPort控件和硬件进行通讯,在通过timer控件进行轮询时,需要异步接收串口数据。基于防御性编程思想,为了保证串口能够正常关闭,在串口进行打开和关闭的操作时,需要注意对timer控件、SerialPort控件和flag信号量进行顺序的控制。Flag信号量是为了保证DataReceived异步接收事件能够接收到一条完成的协议数据。
         串口打开和关闭的顺序如下图所示:

3、串口的通讯状态检查
         通过watchdog方式,设置全局变量count[]数组做为计数器容器,当针对每个油机下发一条命令时,计数器容器对应的该油机计数器累加1,当DataReceived异步接收事件接收到某个油机一条完整的数据时,计数器清零。
         这样系统每次下发命令时,可以检查计数器,假设计数器小于20的时候,则将对应的油机显示置灰,说明这条油枪已经连续20次无法响应,也就是说通讯出现了问题。

4、重复数据的处理
         对于串口对同一笔数据重复上传的情况,为了减轻数据库的负载,通过缓存池对数据进行过滤,缓存池存储机号和该笔记录的唯一序列号。缓存对象池可以是一个DataTable,也可以是一个数组或者其他类型的对象,只要该对象提供按条件查找对比的功能就可以。

5、SerialPort控件对象和协议命令的封装
         通过对SerialPort控件对象的封装,保证了多个窗体间对串口实例的调用。在实际开发中也能提高代码的复用性。
对协议命令的封装带来的好处是当底层硬件升级带来协议的变更时,可以更好的降低系统耦合度,减少业务逻辑层的代码修改。

6、声明
         本文所涉及到的内容,是针对具体的项目场景进行的阐述,仅提供参考之用。请各位朋友在实际的应用过程中对项目需求场景进行具体分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-5-5 12:44 , Processed in 0.453125 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表