工作后的第二个任务(项目)

任务过程

第一个任务做了两天还没有完成,只是做出一个小的demo后第二个任务又来了,让我编写一个程序驱动,并且给我了一个写的很专业的通信协议之后我蒙了,之前根本没有写过程序驱动也没有接触过,第一个任务我还就起码接触过QT、ROS、起码是做过界面的,但是这个我根本没做过,然后我开始像无头苍蝇一样疯狂百度:“怎么编写驱动”、“编写程序驱动需要什么知识”,等。但是百度的这些东西并没有实际性的作用,我开始慌了。

焦虑了一段时间后,我开始冷静下来,开始反思和找问题,认为可能是这两个任务来的太快,心里还没准备好,一下子就乱了。那么接下来我应该先把思路理清楚:

1、我必须知道什么是程序驱动?

2、程序驱动在整个系统中的地位是什么?

3、开始编写程序驱动。

有了目标后我开始了我的第一步,百度搜索:“程序驱动”,打开百度百科(由此可见有时候搜索内容不需要很多字,把重点拿出来就好了),他是这样写的:驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。

我们把重点提炼出来程序驱动就概念就很明了了么,就是和硬件通信,然后把通信的数据上传给计算机。说白了就是承上启下的作用,那么一下子两个问题都解决了。

开始第三步,但是在开启第三步之前还需要具体规划:

1、先写一个简单的程序作用是能够和硬件进行通信,能够接受硬件发来的数据和能够发送给硬件数据。

2、将接受过来的数据和通信协议进行对比,然后对数据进行处理

3、和上位机建立通讯,并且将处理好的数据返回给上位机。

这不就成事了么?目的明确,开干!

但就在完成第二小步之后,我发现了一个很严重的问题,我怎么和上位机建立通讯??

突然间我意识到不对,上位机用Linux通信,获取串口通信我调用的是Windows的库,这移植到Linux不就出大问题了么?

吓得我改进更改,就在我改到一半的时候,我又发现了问题,还是不对,我之前用的是有人物联网的模块然后虚拟了一个串口,然后网口转成串口,进行的通信。现在工控机和硬件用的网线进行通信,那么我之前写的串口通信方式也就没用了。想到这,我傻了。我这不是之前的工作全部白干了么?除了数据处理还有用之外,别的都需要更改啊!!崩溃了……所以这里一定要吸取经验和教训!!!

终于在不断更改后开始第三小步:和上位机建立通信需要用到ROS的知识,ROS通信方式有三种:1、话题(topic)2、服务(server)3、动作(action),这里我决定写一个server和client一开始我不太清楚那一端应该写成server,刚开始写反了,后来才明白和硬件进行通信的那一端一定要写成服务端,客户端只是你自己进行测试的那一端,最后上位机只需要订阅你的服务名称就好了,根本不需要你写的客户端,这样一想也就明白了为什么和硬件进行通信的那一端必须得是服务端了。

更改完服务端和客户端后还需要写了一个topic,他的主要作用是主动上报当前的状态。他需要时效性,所以我选择了使用topic。

最后写完整个程序后大致整体就已经算是完成了,这时还需要写一个驱动说明的文档来告诉上位机我这个驱动是怎么使用的和API是什么样的。

写完文档这就成了!!!是不是很简单?

总结经验和教训

自己写完第一个驱动后,才发现其实写程序驱动很简单,首先你必须需要明确以下几点:

1、首先一定要明确你的开发环境是什么!!!!是Windows还是Linux!!!不要南辕北辙!!

2、上位机和硬件的通信方式是什么:蓝牙?WiFi?串口还是网线?(这里敲黑板:注意不是你和硬件的通信方式,而是最终的上位机和硬件的通信方式(这里所谓的上位机是相对于硬件来说的),很重要!!

3、处理好的数据通过什么样的方式发送给上位机?或者说他们之间是如何进行交互的(这里的上位机是真正的上位机)

4、就是一定要和硬件还有上位机的人对接好,因为本身你写的驱动就是一个桥梁,你需要和上面和下面都要对接好才能明白需求和需要发送给他们什么信息。(说白了你就是乙方,上面和下面都是甲方爸爸,上位机需要什么数据你就给他们什么数据就完事了,硬件传上来什么数据你就接着就完事了)

原文地址:https://www.cnblogs.com/lisongzzx/p/13644788.html