本小猿前几天用C#鼓捣了一个模拟电表的软件,代码写得很暴力,为了后面好维护以及方便添加更多功能,想改造一下,烦请大神给点思路建议,下面简单介绍一下情况。
背景:
我们有个数据采集设备,是专门用来抄读电表数据的,通道为485,一个采集设备通过485总线下面可接N块电表,由于调试过程中接N块真实的电表比较麻烦而且电表数据不好修改,于是产生了搞一个模拟电表的想法。
软件要完成的任务:
1、能够按照指定的电表通讯协议和数据采集设备进行报文交互
2、报文由采集设备发起,模拟电表软件被动接收,通道使用PC串口
3、能够模拟多块电表,且不同的电表数据也不同
4、每个不同的电表可以按照一定的策略独立改变数据(如根据功率和时间的变化通过一定公式自动改变电能示值)
之前的设计思路:
1、创建一个串口对象,获取到系统串口后按需选择,设置串口参数,可通过按钮打开或关闭;
2、串口处于被动等待状态,若有数据进来,调用解析函数对报文帧进行解析,获取到帧里的信息,如电表地址、所要抄读的数据ID等;
3、通过电表地址和所要抄读的数据ID,从数据库中读出相应数据(只有一套数据,即只能模拟一块电表);
4、然后根据读出的数据组成回复帧返回;
软件按照上述思路实现了报文交互、解帧组帧的基本功能,但是对多电表的模拟以及数据改变策略基本却没有实现,原因应该在于我搞这个小软件的时候虽然需求简单梳理了一下,但是在总体设计上却很模糊,上手就干,没有想好,请各路大神在总体设计思路上给予指点,本小猿自己也重新好好思考一下,先谢谢了~
------解决方案--------------------
将经常变动的模块提取成接口,现有代码做成接口的实现。未来改变的代码做成另一种实现。主程序反射加载,就能在不同实现之间切换了。
------解决方案--------------------
进行“优秀的”改造,只有两点建议:
1. 先写测试,后写实现代码。如果你已经有实现代码,那么抛开它,还是要先写测试。
2. 你的测试单元应该局限在 1 小时实现时间以内,不要写一个空洞的需要两三天才能实现的测试。
------解决方案--------------------
技术其实算个“屁”啊。技术说多了、成了“玩儿”了,就是害人的,就是莽撞瞎搞。
关键是先要搞懂技术以外的东西,先保证你步步安全,然后才能上演步步惊心的好戏。
------解决方案--------------------
如果你写出40个测试单元,然后你再来说说你的这些测试中使用到的模型设计思路吧,再来整理。那时候就不会求别人了。