最近需要做一个项目中的通信更改原来的CAN改成了modbus tcp,通信本身很简单但是因为兼顾系统内其他无法改变的架构导致通信的备份和连接的逻辑变得有些复杂。通信分为主站副站两种模式主站模式时首先和A1、A2、A3和C四个服务器请求连接共4路传输不同业务数据其中A1 A2 A3如果连通不成功时分别单独切换至B1 B2 B3C则是单路连接无备份。接着自身作为服务器接收D、E、F、G四个终端请求分别告知他们业务数据现在取自哪里。他们则根据获得的信息自己去对应服务器去取业务数据。当DEFG接收不到主站告知他们的信息时D自己升级成主站。最开始的思路是把需求在豆包上描述后生成了通信的流程图根据流程图描述看到不正确的地方再去修正直至导出最正确的流程图。接着在TRAE上将需求完整描述生成了QT中的C代码编译运行首先是崩溃的问题接着是自动重连的逻辑因为实验环境下还没有配齐全所有的设备所以看到的现象是不断地重连完全不知道东南西北的状态生成代码效率高但开发处于失控的状态。一开始是让TRAE增加了一个试验状态不要自动连接但是处理不彻底主站副站的切换自动重连客户端、服务器端的先后顺序等还是非常混乱于是完全放弃该版本程序重新开始。回到最初不急于一气呵成先从第一路modbus TCP连接建立开始作为客户端和服务器建立连接连接测试通过后再加上主备切换的功能然后加上计时器连续发送请求全部通过后记为V1.0。第二步加第二路连接同样作为客户端和之前一样的功能通过服务器端建立连接和收发数据完成测试全部完成记为V1.1。第三步加上作为服务器端的连接客户端连接测试完成后记为V1.2。第四步加上了主站副站的切换模式测试主站断网后副站可以升级为主站完成后记为V1.3。此时完成状态去对照最初的需求和流程图发现从服务器取业务数据服务器端的AB断开切换重连以及自身作为服务器向外提供信息、副站自动升级为主站的功能都完成了对比最开始一气呵成的程序来看这版程序自我的掌控程度高了很多逻辑也更为清晰。整个开发过程使用免费的TRAE资源上午时段的效率尤其十点以前几乎没有排队感受也非常好。