C# 串口通讯程序的实现 For 医院实验室仪器
作者:admin 日期:2010-01-24
因为工作原因,学了C#大概有大半年的时间,只是利用些业余的时间来学的。
如果有时间的话,我希望利用博文将这其中的过程写一下,一个是为了自己记录,另外如果对大家学习C#编程和串口通讯有帮助的话,我也会非常高兴,大家一起学习。
此博文是面向有基础的读者,包括熟悉LIS与实验室仪器,以及串口通讯相关内容的从业人员。
我想各LIS公司都会有自己的仪器接口开发人员,我入行比较晚,05年开始接触LIS行业,并且开始的工作并不是编写程序。之后担任项目经理做了些项目,过程中觉得现有的接口程序在安装、备份和调试时有些不太方便,因此萌发了重写仪器接口程序的念头,于是从2009年3月之后着手设计。
原来公司的接口程序使用cache和c++写的。
我的设计从编程语言和数据库的选择开始。
从用户的角度出发,我希望开发一款可配置(适用于各种不同协议的仪器),可同时支持多仪器通讯,支持各种物理通讯模式,便于安装和使用的程序。
最后,权衡种种,选择了c#,数据库使用access。
在2009年3月之前,我从来没有接触过c#,并且我也不是计算机相关专业的,所以从程序的设计到实现过程可能和很多人不一样。
首先,我和大多数人一样,寻找c#下关于串口通讯的例程,同时开始学习c#的基本语法。
软件的设计,我是从UI开始的。

这是目前的界面,我希望主界面上能够直观的显示有多少台仪器接口,哪些接口正在运行,哪些停止了,通过颜色和图标来表示,同时,点击仪器接口或者右键可以出现设置选项。
软件的主要设计界面和调试界面以及应该有的功能的实现,应该针对每一个仪器接口来实现,具体C#中,除串口通讯的相关知识点外还需要些其他应该掌握的知识,列表如下:
对以上知识点,大家可以通过搜索引擎或者书籍寻找相关的内容,首先介绍下多线程。
我希望在我的博文中更多的讲述设计思路,而并非是知识点,所以相关的具体技术请大家自行学习,网上有太多的教程了。
在哪里用到了多线程?请大家看下下面的界面:

点击仪器后,会出现相应仪器的界面,下面的启动、停止按钮是用来操作串口通讯的,那么每一个仪器的启动停止都不应该影响其他的仪器,并且每个仪器的通讯设置也是和其他仪器不同的,例如:仪器接口1用COM1,仪器接口2用COM2与仪器进行通讯,因此,多线程是非常有必要的。
我在写这个接口程序的起始过程中,感到最痛苦的地方并不是串口通讯的实现,因为网上有现成的类(API),而且2008也有相应的控件支持,我最痛苦的地方就是多线程的实现,这个因为我初期没有处理好,还导致了后来对程序做了一次非常大的改动。当然程序中用到多线程的地方不止这一处,后面还有非常多的地方。
接下来是反射,为什么会用到反射?
这要从程序的设计理念讲起,前面提到了我要做一个可配置的程序,来适应仪器各种不同的通讯协议,包括物理通讯方式,那么如何来实现呢?如何使程序拥有比较好的扩展性呢?那么用反射来实现动态选择解析类是一个比较好的选择,当然现在我认为使用“接口”会更好一些。

通过选择不同的协议解析类,来实现对不同协议的解析,这是我最初的想法。也是,公司原来接口程序的设计理念。但随着开发的推进,我发现即使这样在配置的过程中也很可能需要改写程序代码,是否还有更好的方式呢?能否遵循程序编写的规律来实现程序的配置过程呢?(1.读协议 2.根据协议写解析方法)
于是,在程序设计上有两个不同的理念:
1.为不同的仪器设置不同的协议配置界面来支持
2.为不同的仪器设置相同的配置界面来支持
在本程序中,我选择了后者。很难说那种方式更好,我星期四还就这个问题与我芬兰的同事讨论过,他们国外用的就是第一种方式。但是由于国情不同,软件架构不同,他们使用B/S来实现的。所以,目前看,我认为还是第二种方式更合适一些,仅个人观点。
那么程序的设置解析设置保存到了哪里呢?我目前的做法是一部分在数据库,一部分在XML,所以前面也提到了,需要了解些读写数据库和XML的知识点。
高级设置的内容请看下界面:

从图中就可以看出,程序设计的宗旨:用配置的方式来实现所有仪器的通讯解析。
要实现这个宗旨,我认为需要有很强的归纳、抽象化的能力,也需要多年的行业经验。
我看到很多国内的LIS公司的仪器接口程序做得非常的局限,从设计角度上未能从一个宏观的环境出发,而只是局限在个别仪器或者同一类通讯协议的仪器上,我认为从一个软件设计者的角度出发,需要从概念上真正认清自己要做一个什么样的产品,这个产品能够解决什么问题;而不是在自己的一个小圈子中转悠,这一点我们与国外的软件公司的产品差距很大。
以上的界面并不是最终界面,而且也很可能随着版本的升级会有改动,但是软件设计的宗旨是不会变的,我希望即使不懂编程的人员,仅需简单了解下仪器通讯协议就可以自行配置出可使用的接口程序,即使不会配置,只要将其他人配置好的仪器协议XML文档导入,就可以实现接口程序与仪器的互联,我想这才是LIS仪器接口程序要最终实现的目的。
要实现这样的目的,在软件开发过程中需要花费比单一接口程序更多的精力和时间,大多数人(公司)都在赶任务,而未能停下来仔细想一想,我到底要给用户一个什么样的软件产品。在开发通用软件过程中所付出的更多时间和精力,我们会在后面的安装、调试、维护中得到切实的回报,远远超过所付出的。
今天周末,我做的软件也已经在很多医院使用了,我想是该有时间把这半年多用几乎所有业余时间所做的事情做一个总结了。几乎没有周末,没有在12点前睡过,没有加班费,没有涨工资,只为了实现我所能实现的。我希望同行的朋友们了解到,原来软件是可以做成这样的!也希望大家能够开发出更多更好的软件产品,也算是为中国的医疗事业做贡献了。
因为目前为止,除了国外的公司,我在国内还没有看到同类的产品。所以我非常的希望能够与国内的软件开发人员做交流。学习c#编程仅半年多,还都是用的业余时间,所以还有很多可以提高的地方,我非常感谢我的各位同事,提供了非常多的非常useful的建议。
稍后我会放些软件使用的视频,也希望我们同在一个行业的朋友们能够提供宝贵意见,让我们共同提高。
如果有时间的话,我希望利用博文将这其中的过程写一下,一个是为了自己记录,另外如果对大家学习C#编程和串口通讯有帮助的话,我也会非常高兴,大家一起学习。
此博文是面向有基础的读者,包括熟悉LIS与实验室仪器,以及串口通讯相关内容的从业人员。
我想各LIS公司都会有自己的仪器接口开发人员,我入行比较晚,05年开始接触LIS行业,并且开始的工作并不是编写程序。之后担任项目经理做了些项目,过程中觉得现有的接口程序在安装、备份和调试时有些不太方便,因此萌发了重写仪器接口程序的念头,于是从2009年3月之后着手设计。
原来公司的接口程序使用cache和c++写的。
我的设计从编程语言和数据库的选择开始。
从用户的角度出发,我希望开发一款可配置(适用于各种不同协议的仪器),可同时支持多仪器通讯,支持各种物理通讯模式,便于安装和使用的程序。
最后,权衡种种,选择了c#,数据库使用access。
在2009年3月之前,我从来没有接触过c#,并且我也不是计算机相关专业的,所以从程序的设计到实现过程可能和很多人不一样。
首先,我和大多数人一样,寻找c#下关于串口通讯的例程,同时开始学习c#的基本语法。
软件的设计,我是从UI开始的。

这是目前的界面,我希望主界面上能够直观的显示有多少台仪器接口,哪些接口正在运行,哪些停止了,通过颜色和图标来表示,同时,点击仪器接口或者右键可以出现设置选项。
软件的主要设计界面和调试界面以及应该有的功能的实现,应该针对每一个仪器接口来实现,具体C#中,除串口通讯的相关知识点外还需要些其他应该掌握的知识,列表如下:
- 多线程
- 反射
- 文件操作
- 数据库操作
- XML
- 数组
- 队列
- ……
对以上知识点,大家可以通过搜索引擎或者书籍寻找相关的内容,首先介绍下多线程。
我希望在我的博文中更多的讲述设计思路,而并非是知识点,所以相关的具体技术请大家自行学习,网上有太多的教程了。
在哪里用到了多线程?请大家看下下面的界面:

点击仪器后,会出现相应仪器的界面,下面的启动、停止按钮是用来操作串口通讯的,那么每一个仪器的启动停止都不应该影响其他的仪器,并且每个仪器的通讯设置也是和其他仪器不同的,例如:仪器接口1用COM1,仪器接口2用COM2与仪器进行通讯,因此,多线程是非常有必要的。
我在写这个接口程序的起始过程中,感到最痛苦的地方并不是串口通讯的实现,因为网上有现成的类(API),而且2008也有相应的控件支持,我最痛苦的地方就是多线程的实现,这个因为我初期没有处理好,还导致了后来对程序做了一次非常大的改动。当然程序中用到多线程的地方不止这一处,后面还有非常多的地方。
接下来是反射,为什么会用到反射?
这要从程序的设计理念讲起,前面提到了我要做一个可配置的程序,来适应仪器各种不同的通讯协议,包括物理通讯方式,那么如何来实现呢?如何使程序拥有比较好的扩展性呢?那么用反射来实现动态选择解析类是一个比较好的选择,当然现在我认为使用“接口”会更好一些。

通过选择不同的协议解析类,来实现对不同协议的解析,这是我最初的想法。也是,公司原来接口程序的设计理念。但随着开发的推进,我发现即使这样在配置的过程中也很可能需要改写程序代码,是否还有更好的方式呢?能否遵循程序编写的规律来实现程序的配置过程呢?(1.读协议 2.根据协议写解析方法)
于是,在程序设计上有两个不同的理念:
1.为不同的仪器设置不同的协议配置界面来支持
2.为不同的仪器设置相同的配置界面来支持
在本程序中,我选择了后者。很难说那种方式更好,我星期四还就这个问题与我芬兰的同事讨论过,他们国外用的就是第一种方式。但是由于国情不同,软件架构不同,他们使用B/S来实现的。所以,目前看,我认为还是第二种方式更合适一些,仅个人观点。
那么程序的设置解析设置保存到了哪里呢?我目前的做法是一部分在数据库,一部分在XML,所以前面也提到了,需要了解些读写数据库和XML的知识点。
高级设置的内容请看下界面:

从图中就可以看出,程序设计的宗旨:用配置的方式来实现所有仪器的通讯解析。
要实现这个宗旨,我认为需要有很强的归纳、抽象化的能力,也需要多年的行业经验。
我看到很多国内的LIS公司的仪器接口程序做得非常的局限,从设计角度上未能从一个宏观的环境出发,而只是局限在个别仪器或者同一类通讯协议的仪器上,我认为从一个软件设计者的角度出发,需要从概念上真正认清自己要做一个什么样的产品,这个产品能够解决什么问题;而不是在自己的一个小圈子中转悠,这一点我们与国外的软件公司的产品差距很大。
以上的界面并不是最终界面,而且也很可能随着版本的升级会有改动,但是软件设计的宗旨是不会变的,我希望即使不懂编程的人员,仅需简单了解下仪器通讯协议就可以自行配置出可使用的接口程序,即使不会配置,只要将其他人配置好的仪器协议XML文档导入,就可以实现接口程序与仪器的互联,我想这才是LIS仪器接口程序要最终实现的目的。
要实现这样的目的,在软件开发过程中需要花费比单一接口程序更多的精力和时间,大多数人(公司)都在赶任务,而未能停下来仔细想一想,我到底要给用户一个什么样的软件产品。在开发通用软件过程中所付出的更多时间和精力,我们会在后面的安装、调试、维护中得到切实的回报,远远超过所付出的。
今天周末,我做的软件也已经在很多医院使用了,我想是该有时间把这半年多用几乎所有业余时间所做的事情做一个总结了。几乎没有周末,没有在12点前睡过,没有加班费,没有涨工资,只为了实现我所能实现的。我希望同行的朋友们了解到,原来软件是可以做成这样的!也希望大家能够开发出更多更好的软件产品,也算是为中国的医疗事业做贡献了。
因为目前为止,除了国外的公司,我在国内还没有看到同类的产品。所以我非常的希望能够与国内的软件开发人员做交流。学习c#编程仅半年多,还都是用的业余时间,所以还有很多可以提高的地方,我非常感谢我的各位同事,提供了非常多的非常useful的建议。
稍后我会放些软件使用的视频,也希望我们同在一个行业的朋友们能够提供宝贵意见,让我们共同提高。
[本日志由 admin 于 2010-01-24 06:40 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 串口通讯 c# 检验科 实验室 医院 仪器
相关日志:
文章来自: 本站原创
Tags: 串口通讯 c# 检验科 实验室 医院 仪器
相关日志:
评论: 3 | 引用: 0 | 查看次数: 444
回复
]兄弟的博客连个联系方式都没有,想找你都没得办法哟。赶快联系这个地址,有意外惊喜哦。arliu163@gmail.com
学过一段java,发现java做桌面程序,尤其是WIndows下运行的程序开发效率比C#低,后来就没有再深入的学习。
想交流的话可以E-mail或MSN我,jiushao@hotmail.com
想交流的话可以E-mail或MSN我,jiushao@hotmail.com
今天老板让我研究串口通讯程序,正不知如何入手时,瞧到大哥精辟日志,小弟备为感激!不知大哥用java写过串口通讯程序没有?还有大哥能否我给发一个简单的案例不?
发表评论
你没有权限发表评论!
上一篇
下一篇








