第一次做前置规约,通讯调试时积累的经验以及思考
1.单个设备的规约调试完成后,当下面有多个设备时,数据回复包大的时候,要注意定义的数组长度,很有可能超过这个长度,程序出错。
2.现场不可能是很顺利的点对点通讯,要考虑一个指令下发后,终端没回,第二个指令再下发,是否会发不下去。另外要考虑装置突然掉线等情况,设置回复超时时间。
3.平衡式是指从站能主动上送变化数据 非平衡式只能从主站召唤从站数据,从站不能主动上送给主站数据
4.如何使用配置文件 在头文件中声明一个结构体,里面是配置文件中各个参数。 在类的private中,声明一个结构体类型的变量。 Initprotpara时,先填这个对象缺省时候的值,然后读取配置文件,填写实际值。
5.在debug过程中,经常发现vector的问题,不能直接vector【i】=a,这样插入数据,而应该用vector.push_back
6.编写程序时有一个要注意的地方,往往发下去一个报文后,需要把一个状态改变,存在一个map或者struct里面,然后接受到相应报文后,再去把这个状态变回去。根据这个状态是否变化,来判断是否接收到相应的回复报文,从而可以进行一些设置多长时间不回,重发,等等不同的操作。
7.101有校验位,但104没有,是因为以前101是用串口传输的,因此需要校验,而104走网口,tcp层会自动校验,因此不需要再规约中添加校验位。
8.在linux中编译pro文件,当没有makefile文件,或者pro文件改过之后,qmake config+=debug 然后再make。 Svn diff 程序名称,就可以看到新的程序。 Svn提交代码,如果以前没这个代码svn add 文件名 svn ci 文件名 -m"原因"
9.当编译时出现千奇百怪的错误时,很有可能是出错的地方其实没错,是上面的头文件里,打开头文件定义,里面没有写分号。
10.Mysql Rabbitmq(类似于消息总线,但在这个模式中,客户端之间不能相互发消息,需要先把消息传到服务端。再由服务端分发。因此需要安装rabbitmq服务端) Redis(类似于实时库)
第一次对着规约文本扩功能,用qt.pro分别在windows和Linux上编译,运行程序,调试通讯,wireshark抓包,debug。之前编程的经验并不多,对实际工程的应用场景有一定的了解。在面对一个架构比较复杂,调了很多头文件,与数据库进行交互的系统时,很迷茫。每天处于一种紧张,焦虑的状态之中,害怕自己做不好。所幸得到很多人的帮助,慢慢对如何开发,有了一定的概念。
如今仍旧紧张焦虑,仍是小白,但我会努力。
