介绍:
要保存或者读取文本文件中的信息,您需要访问Windows的文件系统。使用基于对象的变量实现访问。
注意:
下面脚本中使用的源代码不能够应用于基于WindowsCE的操作面板,因为使用这些代码是不能访问到Windows CE的文件系统的。
在WindowsCE的操作面板上访问文件可以参考这篇文章:Entry ID: 26107211
内容条目:
WinCC flexible 中有关VB命令的文档
WinCC flexible帮助系统中有关VB脚本的信息在“Contents”标签栏下“...>使用WinCC flexible >参考”
图. 01
保存信息到文本文件或者CSV文件的例子
下表说明了如何从WinCC flexible 保存信息到文本文件或者CSV文件中
No. | 步骤 |
1 | 创建一个新项目 - 点击“项目>新建...”,选择"PC > WinCC flexible Runtime"作为操作面板
图. 02
|
2 | 创建变量 - 打开变量编辑器"项目 > 设备_1 >通讯> 变量".
- 按照下面设定添加四个内部变量:
No. | 变量 | 数据类型 | 1 | bExtension | Boolean | 2 | szMaterial | String | 3 | nPressure | Int | 4 | nTemperature | Int |
表 01 - Tags
图. 03
注意: 本样例中只使用了内部变量。当然,您也可以使用与控制器联接的变量
|
3 | 添加对象- 添加两个矩形 - 见 图. 03.
- 添加一个符号IO域和三个普通的IO域。
- Extend the WinCC flexible picture by adding one button and nine text fields. 增加一个按钮和9个文本域
- 如图4,设定好所有对象的位置,标注如下文本:
"Process values" "Pressure:" "Temperature:" "Material:" "Text file:" "mbar" "°C" "Properties" "Extension:" - 创建名为"Extension"的文本列表:
0 => ".txt" 1 => ".csv"
图. 04
|
4 | 组织脚本,文本列表和变量- 创建一个脚本,命名为"Write_data"。在项目树中选择"脚本 > 添加脚本"
- 将下列变量和新创建的脚本和相应的对象相连接
变量/脚本 | 对象 | 对象用于... | nPressure | IO field | Pressure | nTemperature | IO field | Temperature | szString_1 | IO field | Material | bExtension | Symbolic IO field | Extension | Write_data | Button | Save file | 表 02 - 与不同的对象相连接 - 将符号IO域与文本列表"Extension"相连接
图. 05
|
5 | 创建脚本 - 第一部分- 将给出的样例代码写入脚本 "Write_data"
注意: 关于VB脚本更多的信息参见WinCC flexible的帮助
源代码的说明:
在<行10>中声明的变量只有在脚本中才有效。<行13>中的变量"bExtension" 是一个全局变量,在整个WinCC flexible项目范围内都可以使用。通过这个变量,包含文件名称和文件后缀的路径在符号IO域中可以被选择。 需要有“出错时执行”的表达式,在脚本执行出错时调用。一旦有错误发生时,下面就会自动执行出错后的相应程序。
在<行23>的表达式用于将访问Windows文件系统的对象传给对象变量“fso”,其后的代码包括了处理运行出错的相应程序。即发生运行错误时,首先弹出错误提示窗口,然后脚本停止运行。 注意: 如果您使用"Scripting.FileSystemObject"对象,您是不能访问Windows CE的文件系统的。如果该脚本在Windows CE的操作面板上运行,会产生运行错误。
文本文件如果不存在,则用<行32>来创建一个新的文本文件 图. 06
|
6 | 创建脚本 - 第二部分 使用方法 "GetFile",可以用其指向文件路径的参数(filespec).创建"fso"对象实际对应的文件。如果该文件不存在,会有相应的错误处理程序。 <行44>中"OpenAsTextStream"方法用于打开文件读或写。该方法的两个参数是可选的,其中第一个参数规定了输入/输出模式,第二个是要打开文件的格式。 - OpenAsTextStream(【IO Mode【,Format】】)
如果文件不能被打开,会有相应的错误处理程序。
"WriteLine"用于将文本和变量数值写入到相应的文件中。然后使用"Close" 方法关闭文件 - WriteLine(【Line sequence】)
最后需要使用"Set"命令,通过设置"Nothing",将对象与对象变量分离开。 最后一行是将用户自定义的系统消息传给HMI消息系统。 图. 07
|
7 | 开始运行时- 启动WinCC flexible的PC运行项目
注意: 启动WinCC flexible运行系统时需启动脚本调试器,以便调试脚本 - 设置数值和您选择的材料名
- 然后点击"Save data"按钮
- 在符号IO域中选择 ".csv" 并再次点击按钮
- 结束 WinCC flexible 运行时
图. 08
|
8 | 打开文本文件- 打开后缀名为 ".txt"的文本文件
- 然后您可以关闭该文件
图. 09
- 用Excel打开后缀名为".csv"的文件
- 关闭Excel
图. 10
|
读取文本文件或者CSV文件中信息的例子
下表说明了如何从文本文件或者CSV文件中读取信息。
本例是基于上一个例子。但前一个例子的组态不用在本例中使用,只使用其中的组件。
No. | 步骤 |
1 | 创建一个 - 可选 如果您使用前一个项目,可以直接进入第二步 - 点击“项目>新建...”来创建新项目,选择"PC > WinCC flexible Runtime"作为操作面板
|
2 | 连接变量- 打开变量编辑器“项目>设备_1>通讯>变量”
- 按下表添加内部变量
No. | 变量 | 数据类型 | 1 | szString_1 | String | 2 | nValue_1 | Int | 3 | nValue_2 | Int |
表 03 - 变量
注意: 如果您不能使用前一个项目,还要添加一个BOOL变量"bExtension"
图. 11
|
3 | 添加对象- 添加一个矩形- 见图.12
- 添加一个符号IO域和三个普通IO域
- Extend the WinCC flexible picture by adding one button and four text fields. 扩展WinCC flexible 画面,增加一个按钮和四个文本域
- 所有对象的位置请参考图12,并添加如下文本:
"Value_1:" "Value_2:" "String_1:" "Text file:" "Properties" (如果没有) "Extension:" (如果没有) - 另外,添加一个文本列表"Extension"
0 => ".txt" 1 => ".csv"
图. 12
|
4 | 组织脚本,文本列表和变量 - 点击"脚本>新建脚本",创建脚本"Read_data".
- 连接下列变量或脚本到相应对象中:
变量/脚本 | 对象 | 对象用于... | nValue_1 | IO field | Value_1 | nValue_2 | IO field | Value_2 | szString_1 | IO field | String_1 | bExtension*) | Symbolic IO field | Extension | Read_data | Button | Read data | 表 04 - 连接相应对象 *)没有保存文件的配置时才这样连接 - 将文本列表"Extension"和符号IO域连接对应(见图13)
图. 13
|
5 | 创建脚本 - 第一部分- 将给出的样例代码写入脚本 "Write_data"
注意: 关于VB脚本更多的信息参见WinCC flexible的帮助
源代码的说明:
所有脚本中声明的变量只有在本脚本中才有效。<行17>中的变量"bExtension"可用于选择包含文件名称和文件后缀的路径。
需要有“出错时执行”的表达式,在脚本执行出错时调用。一旦有错误发生时,下面就会自动执行出错后的相应程序。
在<行27>的表达式用于将访问Windows文件系统的对象传给对象变量“fso”,其后的代码包括了处理运行出错的相应程序。即发生运行错误时,首先弹出错误提示窗口,然后脚本停止运行。 注意: 如果您使用"Scripting.FileSystemObject"对象,您是不能访问Windows CE的文件系统的。如果该脚本在Windows CE的操作面板上运行,会产生运行错误。 图. 14
|
6 | 创建脚本 - 第二部分
使用方法"OpenTextFile",打开脚本变量"Path" 中指定的文件。该方法中所有其他的参数都是可选的。第一个参数规定了IO模式,第二个参数规定了如果文件不存在时是否创建一个新的文件,最后一个参数规定了要打开文件的格式。
- OpenTextFile(filename【,iomode【,Create【,Format】】】)
如果文件不能被打开,会有相应的错误处理程序来正常结束脚本。 用"Do-While-Loop" 表达式,文本文件会依照对象变量"f" 执行方法 "Readline"来一行一行被读取直到循环结束。 "Split" 函数通过表达式参数分隔读取自文件的文本行,第二的参数分隔符是可选项。分隔之后的内容被传送到一维的数据域。该函数后两个参数本例中没有用到。 - Split(Expression【,delimiter【,Number【,Compare】】】)
字符串的保存和清空也需要处理(例如图9),所以使用 "Replace"函数来做清除。为此,需要规定该函数的前三个参数,第一个参数包含字符串(表达式),其中设置要被参数"ReplaceWith"中的字符替换掉的字符串。 - Replace(Expression, find, replace with 【,Start【,Number【,Compare】】】)
Fig. 15
|
7 | 创建脚本 - 第三部分 为了保持数据结构,所有数据都被传送到一个2维的数组"HiField"中。该数组中不是所有的数据都需要,只有相关的数据会从数组传到WinCC flexible的全局变量中。例子 - HiField (a, b)的结构和内容: Array | b | 0 | 1 | 2 | a | 0 | "material" | "steel" | "" | 1 | "pressure" | "12" | "mbar" | 2 | "temperature" | "56" | "°C" | 表 05 - 二维数组的结构和内容
<行62>用于关闭打开的文件,使用"Set"命令,通过设置"Nothing",将对象与对象变量分离开。 最后一行是将用户自定义的系统消息传给HMI消息系统。 图. 16
|
8 | 开始运行 - 开始WinCC flexible的运行
注意: 启动WinCC flexible运行系统时需启动脚本调试器,以便调试脚本 - 点击"Read data"按钮
- 在符号IO域中选择 ".csv" 并再次点击按钮
- 结束 WinCC flexible 运行时
图. 17
|
下载源代码和样例工程
下载附件1是PDF文档,包括两段样例程序
附件_1: WinCC_flexible_Quellcodes_PC.zip ( 18 KB )
附件2是上述的样例工程,用于从文本文件中保存和读取数据。
附件_2: Read_Write_data_from_or_into_a_file_PC.zip ( 1793 KB )
运行和测试环境:
下表给出了本例使用的组件
Components | Product and version designation |
PC operating system | Microsoft Windows XP SP2 |
Standard tools | - |
Engineering tool | - |
HMI software | WinCC flexible 2005 SP1 HF7 |
HMI system | WinCC flexible PC Runtime |
关键词:
保存, 装载, 写入, 读取, CSV 文件, TXT 文件