问题是这样的,准备做一个通用测试系统,测试步骤几乎相对独立,比如下面:
1.提示作员扫描条码SN
2.控制治具上电,操作单片机COM2口
3.固件烧录
4.发送UUT指令(COM3)口检查版本等
5.其实UUT指令(COM3)测试等
6.控制治具断电,操作单片机COM2口
这些动作的实现原本已经完成,但感觉效率不高,因为串口的操作每一步都有打开关闭动作。
现修改如下:
1.提示作员扫描条码SN 保存供后面使用
2.初始化 串口 COM2, COM3
2.控制治具上电,COM2 引用上面初始化好的
3.固件烧录
4.发送UUT指令(COM3 引用上面初始化好的)口检查版本等
5.其实UUT指令(COM3 引用上面初始化好的)测试等
6.控制治具断电,COM2引用上面初始化好的
所以:我把功能都做成了Assembly dll,准备通过反射调用实现,当然上面的功能不考虑通用性也不难,但是问题是,动态调用可能下次就不是SN 及COM要在后面引用了,如何通过动态全局变量传递呢?
如果熟悉Teststand里面有个FileGlobal就明白我什么意思了,前面定义后面引用,谢谢!
如果熟悉高通,也知道里面有个QGlobalVariable等,如下,如何通过XML实现呢?求大神!
<QGlobalVariable>
<Name>2.4GTxPowerMode</Name>
</QGlobalVariable>
<QGlobalVariable>
<Name>BT_ADDRESS</Name>
</QGlobalVariable>
实战经验分享之C#对象XML序列化,看看我篇文章可以帮到你么。http://www.cnblogs.com/datacool/p/datacool_XmlSerializer.html
你的问题,看的不是太明白。感觉可以用接口来隔离各种强依赖,然后动态Load Assembly去动态获取Assembly里的实现了接口的对象。想通用也可以使用泛型委托,Action,FunC等
感谢回复!
其它帖子我都给分,这个内容看上去很多,但实际只有一个全局变量定义与传递问题,没有实际解决问题的我都没有办法给分,解决的给100分,希望理解。
SerialPort的反序列化应该不是那么容易的。
你的测试程序需要支持多线程吗?如果不需要,为什么不把SN, COM2,COM3资源直接记忆在dll里面?
动态的输入的SN,记忆在dll里面,显然不合适,感谢回复!
其它帖子我都给分,这个内容看上去很多,但实际只有一个全局变量定义与传递问题,没有实际解决问题的我都没有办法给分,解决的给100分,希望理解。
@TabZ: 在实际项目是可以这么做的。
例如你创建一个SequenceExecutor类在dll中,在创建TestStand test sequence时,直接调用SequenceExecutor的各种方法。例如打开串口后,不管是Handle,还是SerialPort都是SequenceExecutor的实例变量,这样你在接下来的调用各种方法时就不需要传递这些实例变量了。
(SN, SerialPort等实例变量可以在PreUUT时重置到invalid状态。但SerialPort管理也可以放到更高的PreUUTLoop如果可以的话)
@zbbfb2001:
感谢回复及讲解,Teststand中我是能够很好的处理这个问题的,但是现在是由于版权的问题我们不能用Teststand,我想自己用C#做一个简易版的,只支持调用.Net的库,我之所以提这样的问题,是因为想借鉴Teststand的做法, 所以我的问题如何在C#中做这种效果,感谢!