首页 > 开发 > JAVA > 正文

请问关于这样的项目,如何选择编程语言和框架等

2017-09-07 09:24:08  来源:网友分享

下位机:单片机
上位机:PC
单片机和PC机之间通过串口通信,单片机定时将采集数据通过串口传送至PC机。
PC机上的软件通过调用串口读取信息,将信息解析后存储到数据库。
然后要采用Web服务,供移动等设备访问将采集的数据,并发送指令到服务器,服务器将指令解析后,调用串口将指令下发到单片机。
最后还要在上位机端,设计本地软件,可以读取数据库数据,也可以调用串口数据库等内容。
请问在上位机如何设计软件结构,采用何种语言实现。
最近使用java做,但是java编写桌面程序并不好使。
求解。

解决方案

追究编程语言和框架,不如追究软件结构。语言用什么都搞得定,甚至这个需求(只要不是在Windows下)用Shell脚本都搞得定。但软件结构如果出了问题,就会变成什么语言都救不了。

两个要点,不听从就是开发失败:

  • 必须分解需求,绝对不要把所有的任务用同一个程序做出来。
  • 尽可能异步传输,程序之间尽量在运行上互不影响,只体现数据交换的关系。不到万不得已,不要让多个程序之间发生“假设”、“等待”、“干扰”甚至是“探测”、“监视”等,影响程序运行本身的行为。

首先把PC-MCU的通信单做一个程序(daemon)。从MCU收到数据时存入缓冲队列。不收数据时处理其他程序要求执行的指令,择机发送给MCU。

其次处理数据并存入数据库的再单做一个程序(daemon)。把通信程序的数据缓冲队列处理消化掉,送入本地数据库或数据库服务器永久存档。

Web服务器(很有可能是网上的虚拟主机吧?)向移动端提供Web界面和数据库服务。其实看你的需求,可以考虑Web服务器把数据库服务完全承担下来,本地就不再做数据库了。但是Web服务器向上位机PC推送数据很有可能是不畅通的(首先推送就不好做,其次PC很有可能没有外网IP不能直接访问到),这是一个问题。

所以这时上位机上就又要再做一个监视程序(daemon),监视移动端是否送入了新的指令。则此时移动端下达指令的行为,仅仅是把指令送到Web服务器暂存,等待上位机发现此指令后实际处理。

至于PC的操作程序就随意了,该做什么做什么就行。反正在这种结构下,上位机程序几乎不承担实质工作,只是把用户的指令交给各个守护进程去协调执行。java编写桌面程序已经够强力了。如果你仍然不满意,可以尝试wxWidgets,支持C++和Python等多种语言。Python做快速原型的能力是一流的,值得尝试。

唯一的一个禁区就是:千万不要手贱用VB写程序。很多单片机的上位机教程,是由长期为单片机编程而不了解PC桌面程序的作者编写的。这些作者经常抱着相当陈腐的观念,甚至于直到现在还在用VB来写程序。不要学那些反面教材。