一、类的应用
接上一章"类"
类在项目中,一般会在类的私有成员簇内,包含一个数据类型为参数类的队列。
例如网口类,里面实际会包含很多信息,有IP地址和端口等等参数。这些参数如果不放在队列引用中缓存下来,就无法在实际生产中修改参数。
因此,在实际应用中,需要新建一个网口参数类来包含IP地址等参数,而网口类需要一个元素最大长度为1的队列引用。
这个队列引用的作用就相当于一个全局变量,可以供网口类在初始化之后,别的地方可以读取或者修改其包含的网口参数类。
1.1、新建参数父类
由于参数类是每个仪器都有的,所以也是仪器类的共性,所以新建一个设备参数类"device para",充当仪器参数的父类。
类私有数据的簇,这个簇里面的元素也称为成员变量。
①新建"device para",默认继承LabVIEW对象
②LabVIEW类私有数据的簇,这个簇里面的元素也称为成员变量。双击类内的.ctl,可以打开,此处是双击"device para.ctl"。
仪器都应该有对应的名称,比如说是"某某工位的网口仪器类"等,所以在仪器参数类中可以包含一个name的成员变量。
添加一个类型为字符串,标签为name的控件。
③类需要新建一个用于访问类内数据成员的VI,有读和写的方法,通过这两个方法,可以读取和修改这个成员变量。
右键"device para"→点击"新建"→点击"用于数据成员访问的VI..."
④权限用"读写",其余全部默认,点击确定。就能生成两个vi,一个是读取name,一个是写入name,保存
- 在程序框图里,其实就是簇的解绑和捆绑。
- 类里面簇包含的变量,只能在成员方法中(静态方法和动态方法)解绑或捆绑,如果VI不是成员方法的,是无法解析类中的元素的。所以上面"读取name"和"写入name"能操作类的成员变量,是因为这两个方法都是类的成员方法。
因此想要访问类中的成员变量,只能通过成员方法,最好就是通过上述步骤来生成"用于数据成员访问的VI..."
1.2、设备类包含参数类队列
需要在设备类中包含一个数据元素为设备参数类的队列控件。
由于LabVIEW前面板没对应的队列控件,所以会有点复杂。
①在程序框图中放置一个"获取队列引用"→鼠标移动到"队列输出"输出接线端→右键后,选中"创建"→点击"输入控件"。
②这里的"队列输出"控件,就是队列控件。双击控件后,跳转到前面板,
③把"device para"类,拉出来放置到队列控件后,就可以得到一个数据元素为设备参数类的队列控件。
④把队列控件,放置到device类的成员变量中,并修改标签为"参数类队列",保存后,关闭"device.ctl"。此处如果不关闭,可能会导致类报错,接着正常关闭就行。
⑥"device"类新建一个"创建"的静态方法,程序框图如下:
- 新建了一个队列最大长度为1,数据类型为"device para"的队列,并入了一个默认值进队列
- 由于队列是引用,这样在程序的其他地方修改了这个队列里的元素是可以生效的。
⑦右键选中"device"类,新建一个静态方法,名字改为"获取参数",程序框图和前面板如下:
- 输出节点要连上"元素"控件
- 要用"预览队列元素"来读取,而非出队列。
⑧右键选中"device"类,新建一个静态方法,名字改为"写入参数",程序框图和前面板如下:
- 输入节点要连上"元素"控件
- 要用"有损耗元素入队列"来读取,而非入队列。
⑨创建一个VI来测试上述功能,程序框图和前面板如下
- 上面的循环可以修改"device"成员变量队列中的"device para"的name,下面的循环把"device"成员变量队列中的"device para"的name读取出来, 两者值是一样的。
- 这里的队列使得类成为了"引用"。
二、子类的创建
子类可以使用父类的成员变量和成员方法,也就是说,网口设备类可以使用设备类的成员变量"参数类队列"。也可以使用其成员方法"创建"。
2.1、新建网口参数类
网口参数包含IP地址和端口,在"簇"中,先加入这两个变量。
新建数据成员方位的VI
重写父类的"动态方法"的"创建",参数需要先插入新建好的"网口参数类",这样在后面转换的时候,不会报错。
转换的方式有两种:
- 变体转换
- 保留运行类