显示对象: Dtextbox :IExecutable,IDataVisitable
接口:实现可运行接口,可访问数据接口
功能:显示数值,并根据数值范围指定不同的颜色,指定报警范围。
SetVisitor(IDataVisitor visitor)// 设定数据访问器
SetData(string DataName) // 设定变量
AddSpan(dataSpan span,Color spanColor,bool alarmEnable)
ClearSpan();
execute();
显示对象: Stextbox :IExecutable,IDataVisitable
接口:实现可运行接口,可访问数据接口
功能:显示字符串指定不同的颜色,指定报警范围。
SetVisitor(IDataVisitor visitor)// 设定数据访问器
SetData(string DataName) // 设定变量
AddString(int index,string Text,Color textColor)
ClearString()
execute();
数据采集系统,完全可以独立。
数据分为三部分:
数据采集系统:来自设备的数据,暂时只支持无符号整数。
数据处理系统:
上位机转化数据:把下位机的无符号整数转化为带符号整数,实数,布尔变量。二级数据
对于二级浮点数,还可以计量。计量后的值是为 三级数据。
计量子系统:为数据采集内部系统,外部无法知道所取得的数据是否经过计量。 提供计量界面。
计量一般采用最小二乘法。系数采用XML储存。
对于可计量的数据,先加入计量,在计量子系统内保存计量参数,外部访问可计量数据,接口从计量子系统获取。
外部访问数据应该统一接口,数据使用者不知道数据经过怎样的处理。
数据访问系统:
内部访问:
外部访问:接口布尔访问器,BoolVisitor(string DataName)
整数访问器 IntVisitor(string DataName)
浮点数访问器floatVisitor(string DataName)
数据写入。所有写入数据均为无符号整数。预先写入数据,必须经过处理转化为无符号整数?(存疑,有的设备支持写入负数,有的设备是ascii通讯)
接口:WriteInt(string DataName,unit Value);
设备:
(设备和数据采集系统,他们有怎样的接口?数据采集系统是否应该知道设备的变量的地址?一个数据采集系统应该有台设备,知道从哪台设备获取数据)
设备中的数据变量应该有两个地址,一个是虚拟地址,供数据采集系统使用,一个是实际地址,供直接从设备采集数据用。
支持读取和写入。
上位机核心部分:测控。
应该有的部分:配方(测量参数)。数据储存。报警。报表。实时曲线。
在一个测试开始前,读取配方。测试结果如何保存? 数据储存结构如何表示。每个应用都差别巨大。
扫描式执行?
结构语法?一般组态软件都是使用脚本语言。使用状态转移模式?
如何支持多工位?系统级别的变量?
目前已验证的思路是:在一个测试开始前,构建测试,比如读取配方,hook实时曲线。hook结果储存器等。每一个测试,中间过程变量使用全局变量。这样在测试外部可以显示测试状态,可以对测试进行监视和控制。测试使用非阻塞代码,扫描式执行。
在目前项目中用到的东西,仿PLC的定时器,计数器。全局变量
这部分需要提取所有项目用例,全面考虑。
系统构建过程:创建设备,创建数据采集系统。创建测控系统。
定时器是使用C#提供的timer,这其实是开了另外一个线程。在一个测试中,隐含使用了PLC的控制模式。可否用纯非阻塞的代码实现定时器?