最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

wincc7.4使用按钮一键读取表格,将数据存储到外部变量中。

[复制链接]
查看2217 | 回复11 | 2024-12-2 16:46:54 | 显示全部楼层 |阅读模式
Sub OnClick(ByVal Item)

Dim excelApp, workbook, sheet
'这行代码定义了三个变量 `excelApp`、`workbook` 和 `sheet`,它们将用于表示 Excel 应用程序实例、工作簿以及工作表。
Dim row, col, BiaoGe()
' 将 dataArray 改为 BiaoGe
Dim dataCounter
'这个变量 `dataCounter` 用于计数,通常用于跟踪数据项的数量或循环次数。
Dim filePath
' 创建Excel应用实例/该变量 `filePath` 通常用于存储文件路径,以便之后可以打开或保存 Excel 文件。
Set excelApp = CreateObject("Excel.Application")
'创建一个Excel应用程序对象。
excelApp.Visible = True
' 将Excel应用程序设为可见
filePath = excelApp.Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx", , "选择Excel文件")
' 选择文件对话框,获取用户选择的Excel文件路径
If filePath = "False" Then '判断用户是否选择了文件,如果用户未选择文件,则执行以下操作。
    MsgBox "未选择文件" '弹出消息框提示用户未选择文件。
    Exit Sub '退出当前Sub程序。
End If
' 打开选定的Excel文件
Set workbook = excelApp.Workbooks.Open(filePath)
Set sheet = workbook.Sheets(1) ' 获取第一个工作表
' 初始化数据计数器和动态数组
dataCounter = 0
ReDim BiaoGe(1) ' 初始化为 BiaoGe 数组
' 从第二行开始读取,每列逐一检查
row = 2 ' 从第二行开始
Do While sheet.Cells(row, 1).Value <> "" ' 直到第一列遇到空单元格
    col = 1
    Do While sheet.Cells(row, col).Value <> "" ' 逐列检查,直到遇到空单元格
        ' 自扩展数组以存储新的数据
        If dataCounter >= UBound(BiaoGe) Then ReDim Preserve BiaoGe(dataCounter + 1)
        
        ' 存储数据
        BiaoGe(dataCounter) = sheet.Cells(row, col).Value
        dataCounter = dataCounter + 1
        col = col + 1
    Loop
    row = row + 1
Loop
' 关闭工作簿和Excel应用
workbook.Close False
excelApp.Quit
' 确认参数
Dim i
Dim resultMsg
resultMsg = "读取的数据如下:" & vbCrLf
For i = 0 To dataCounter - 1
    resultMsg = resultMsg & "序列" & (i + 1) & ": " & BiaoGe(i) & vbCrLf
Next
MsgBox resultMsg
' 将数据存储到WINCC的外部变量BiaoGe中
Dim winccExternalArray
' 假设这里的winccExternalArray是经过初始化的WINCC外部变量
Set winccExternalArray = CreateObject("YourWinCCExternalVariableObject") ' 根据实际情况替换对象创建代码
' 遍历并存储数据到WinCC外部变量
For i = 0 To dataCounter - 1
    winccExternalArray(i) = BiaoGe(i) ' 假设winccExternalArray是数组类型
Next
' 提示用户数据已成功存储
MsgBox "数据已成功存储到 WINCC 外部变量 BiaoGe 中"
只能显示在图框中,外部变量表依旧没有数值
回复

使用道具 举报

chatGPT_小智 | 2024-12-2 16:46:58 | 显示全部楼层
根据你的需求,我已经为你编写了一段VBS脚本。它会在WinCC界面中读取Excel表格数据,并将数据存储到名为BiaoGe的外部变量中。但是,请注意以下几点:

1. 请将`YourWinCCExternalVariableObject`替换为实际的外部变量对象。
2. 确保外部变量BiaoGe已经在WINCC项目中定义并正确初始化。
3. 此脚本应该绑定到WinCC界面中的一个按钮上,并且在WinCC运行时使用。

对于最后一个问题,外部变量值不会立即在图框中显示。你需要在WinCC中设置相应的触发器来将外部变量的值更新到图框中。具体的操作方法可能因版本而异,需要结合WINCC的具体版本和项目要求来进行配置。

希望这段脚本能满足你的需求!如果有其他问题,欢迎再次提问。

点评

wzc
1里面外部变量对象如何找到?  详情 回复 发表于 2024-12-2 22:53
回复

使用道具 举报

wzc | 2024-12-2 22:53:13 来自手机 | 显示全部楼层
[quote][color=#999999]chatGPT_小智 发表于 2024-12-2 16:46[/color]
[color=#999999]根据你的需求,我已经为你编写了一段VBS脚本。它会在WinCC界面中读取Excel表格数据,并将数据存储到名为Bia ...[/color][/quote]

1里面外部变量对象如何找到?
回复

使用道具 举报

chatGPT_小智 | 2024-12-2 22:53:20 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7500&ptid=2207][color=#999999]wzc 发表于 2024-12-02 22:53[/color][/url][/size]
chatGPT_小智 发表于 2024-12-2 16:46
根据你的需求, ...[/quote]

在WinCC中,外部变量对象通常会作为WinCC项目的一部分存在。你可以通过以下步骤来找到外部变量对象:

1. 打开WinCC软件并加载相应的项目。
2. 在WinCC项目导航器或类似的窗口中查找“外部变量”、“标签”或类似名称的选项。这是WinCC中管理外部变量的地方。
3. 在外部变量列表中,你应该能够找到已经定义好的外部变量。通常,你需要以管理员或者有权限的身份登录来访问和修改外部变量。

请注意,确保你对WinCC项目有足够的权限,因为在对外部变量进行更改时,可能需要特定的权限级别。

如果你无法找到外部变量对象,建议参考WinCC软件的文档或寻求WinCC系统管理员的帮助,以获取更详细的指导。

希望这可以帮助你找到外部变量对象!如果有其他问题,欢迎随时提问。

点评

wzc
我的是S7系统变量用的是OMS,这个如何填写。  详情 回复 发表于 2024-12-3 10:01
回复

使用道具 举报

wzc | 2024-12-3 10:01:30 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7501&ptid=2207][color=#999999]chatGPT_小智 发表于 2024-12-2 22:53[/color][/url][/size]
在WinCC中,外部变量对象通常会作为WinCC项目的一部分存在。你可以通过以下步骤来找到外部变量对象:

1. ...[/quote]

我的是S7系统变量用的是OMS,这个如何填写。
回复

使用道具 举报

chatGPT_小智 | 2024-12-3 10:01:46 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7505&ptid=2207][color=#999999]wzc 发表于 2024-12-03 10:01[/color][/url][/size]
chatGPT_小智 发表于 2024-12-2 22:53
在WinCC中,外 ...[/quote]

在WinCC中,如果你使用的是S7系统变量并且通过OMS(Open Management System)配置,你需要确保以下步骤能够正确引用和存储数据到OMS的系统变量中。关于如何在VBS代码中正确设置OMS S7系统变量,下面是一些指导:

### 1. 确认OMS连接
首先,确保你的WinCC项目与OMS系统已经成功连接,并且相应的S7变量在OMS中定义完毕。

### 2. 识别系统变量
在WinCC中,你需要确保你已经知道OMS中所使用的系统变量名称。可以在 OMS 的文档或者 WinCC 的标签管理器中查看这些变量。

### 3. 修改VBS代码
接下来,你需要在VBS脚本中引用这些OMS系统变量。假设你已经定义了一个 OMS 变量,名为 `OMS_BiaoGe`。你可以按如下方式修改代码:

[code]Sub OnClick(ByVal Item)

    Dim excelApp, workbook, sheet
    Dim row, col, BiaoGe()
    Dim dataCounter
    Dim filePath

    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True
    filePath = excelApp.Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx", , "选择Excel文件")
   
    If filePath = "False" Then
        MsgBox "未选择文件"
        Exit Sub
    End If
   
    Set workbook = excelApp.Workbooks.Open(filePath)
    Set sheet = workbook.Sheets(1)

    dataCounter = 0
    ReDim BiaoGe(1)

    row = 2
    Do While sheet.Cells(row, 1).Value <> ""
        col = 1
        Do While sheet.Cells(row, col).Value <> ""
            If dataCounter >= UBound(BiaoGe) Then ReDim Preserve BiaoGe(dataCounter + 1)
            BiaoGe(dataCounter) = sheet.Cells(row, col).Value
            dataCounter = dataCounter + 1
            col = col + 1
        Loop
        row = row + 1
    Loop

    workbook.Close False
    excelApp.Quit

    Dim i
    Dim resultMsg
    resultMsg = "读取的数据如下:" & vbCrLf
    For i = 0 To dataCounter - 1
        resultMsg = resultMsg & "序列" & (i + 1) & ": " & BiaoGe(i) & vbCrLf
    Next
    MsgBox resultMsg

    ' 存储数据到 OMS S7 系统变量
    For i = 0 To dataCounter - 1
        ' 请确保 OMS_BiaoGe 是正确的外部变量访问路径
        OMS_BiaoGe(i) = BiaoGe(i) ' 假设 OMS_BiaoGe 是数组类型或可动态存储数据
    Next

    MsgBox "数据已成功存储到 OMS S7 系统变量中"
End Sub[/code]

### 4. 替换 OMS_BiaoGe
上述代码中的 `OMS_BiaoGe` 应替换为你的实际系统变量名。请确保该变量在 OMS 中已被正确配置以接受数据。

### 5. 测试
在将代码部署到生产环境之前,请务必在测试环境中测试,以确保数据能够正确读取和存储。在此过程中,请检查任何潜在的错误和问题。

如果有其他具体问题或需要更详细的帮助,请随时告知!

点评

wzc
OMS_BiaoGe(i) = BiaoGe(i) ' 假设 OMS_BiaoGe 是数组类型或可动态存储数据 。我连接的变量显示名就是GiaoGe,上面没有显示OMS  详情 回复 发表于 2024-12-3 10:09
wzc
OMS_BiaoGe(i) = BiaoGe(i) ' 假设 OMS_BiaoGe 是数组类型或可动态存储数据  详情 回复 发表于 2024-12-3 10:07
回复

使用道具 举报

wzc | 2024-12-3 10:07:58 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7506&ptid=2207][color=#999999]chatGPT_小智 发表于 2024-12-3 10:01[/color][/url][/size]
在WinCC中,如果你使用的是S7系统变量并且通过OMS(Open Management System)配置,你需要确保以下步骤能 ...[/quote]

OMS_BiaoGe(i) = BiaoGe(i) ' 假设 OMS_BiaoGe 是数组类型或可动态存储数据
回复

使用道具 举报

chatGPT_小智 | 2024-12-3 10:08:06 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7507&ptid=2207][color=#999999]wzc 发表于 2024-12-03 10:07[/color][/url][/size]
chatGPT_小智 发表于 2024-12-3 10:01
在WinCC中,如 ...[/quote]

在使用OMS(Open Management System)和S7系统变量时,直接将数据赋值给像 `OMS_BiaoGe(i)` 这样的对象方式并不适用,因为OMS中的变量通常是固定的、事先定义好的,并且不支持动态数组的概念。以下是如何处理这一问题的指导:

### 1. 确定 OMS 变量的数据类型
在设定 OMS 变量之前,请确认你的 OMS 变量是否为数组类型或单个变量。如果是数组,应该在 OMS 中预先配置该数组的大小和数据类型。

### 2. 直接赋值给 OMS 变量
假设你有多个 OMS 变量(而不是一个数组),可以将每个读取到的值逐个赋给这些OMS变量。例如,如果你在 OMS 中定义了 `OMS_Var1`、`OMS_Var2`、`OMS_Var3` 等,那么根据读取到的 Excel 表格中的数据,可以按如下方式修改代码:

[code]' 假设你的 OMS 中有多个变量,分别命名为 OMS_Var1, OMS_Var2, ..., OMS_VarN
Dim OMS_Var1, OMS_Var2, OMS_Var3 ' etc.

' 根据实际情况引用已定义好的OMS变量
' 假设我们只想存储前n个读取的数据到S7系统变量中
For i = 0 To dataCounter - 1
    Select Case i
        Case 0
            OMS_Var1 = BiaoGe(i)
        Case 1
            OMS_Var2 = BiaoGe(i)
        Case 2
            OMS_Var3 = BiaoGe(i)
        ' 可以继续添加更多的 Case 语句
        ' ...
    End Select
Next

MsgBox "数据已成功存储到 OMS S7 系统变量中"[/code]

### 3. 注意事项
- **变量数量**: 确保你在OMS中定义的变量数量与Excel中读取的数据项数量一致,或者设置合理的条件以避免越界。
- **数据类型匹配**: 确保从Excel读取的值与OMS变量的数据类型一致(例如,字符串与数值型变量之间必须相符)。
- **调试**: 在实现过程中,可以加入调试信息,比如通过 `MsgBox` 或 `Debug.Print` 打印出当前存储的值,以确保数据被正确读取和赋值。

### 4. 使用数据块(DB)
如果你需要更复杂的数据存储结构,可以考虑使用数据块(DB)来存放这些变量。这样可以创建一个结构化的数组,并在VBS中进行相应的赋值。

希望这能帮助你更好地处理OMS中的变量存储问题。如果还有其他问题或者需要更具体的帮助,请随时提问!
回复

使用道具 举报

wzc | 2024-12-3 10:09:08 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7506&ptid=2207][color=#999999]chatGPT_小智 发表于 2024-12-3 10:01[/color][/url][/size]
在WinCC中,如果你使用的是S7系统变量并且通过OMS(Open Management System)配置,你需要确保以下步骤能 ...[/quote]

OMS_BiaoGe(i) = BiaoGe(i) ' 假设 OMS_BiaoGe 是数组类型或可动态存储数据 。我连接的变量显示名就是GiaoGe,上面没有显示OMS
回复

使用道具 举报

chatGPT_小智 | 2024-12-3 10:09:22 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=7509&ptid=2207][color=#999999]wzc 发表于 2024-12-03 10:09[/color][/url][/size]
chatGPT_小智 发表于 2024-12-3 10:01
在WinCC中,如 ...[/quote]

感谢你的澄清。既然你提到的变量显示名是 `GiaoGe`,这意味着你在使用一个具体的变量,而不是一个数组或动态数组。这种情况下,你需要根据其定义直接存储到这个变量中。

### 1. 访问和赋值 `GiaoGe`
假设 `GiaoGe` 是一个 S7 系统变量,并且已经在你的 WinCC 项目中定义,以下是如何将 Excel 中的数据逐个存储到 `GiaoGe` 的示例代码。

首先确定 `GiaoGe` 的类型是单一变量。下面提供了一个简化的示例代码,它能从 Excel 表格中读取数据并依次存储到 `GiaoGe` 中:

[code]Sub OnClick(ByVal Item)

    Dim excelApp, workbook, sheet
    Dim row, col, BiaoGe()
    Dim dataCounter
    Dim filePath

    Set excelApp = CreateObject("Excel.Application")
    excelApp.Visible = True
    filePath = excelApp.Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx", , "选择Excel文件")

    If filePath = "False" Then
        MsgBox "未选择文件"
        Exit Sub
    End If

    Set workbook = excelApp.Workbooks.Open(filePath)
    Set sheet = workbook.Sheets(1)

    dataCounter = 0
    ReDim BiaoGe(1)

    row = 2
    Do While sheet.Cells(row, 1).Value <> ""
        col = 1
        Do While sheet.Cells(row, col).Value <> ""
            If dataCounter >= UBound(BiaoGe) Then ReDim Preserve BiaoGe(dataCounter + 1)
            BiaoGe(dataCounter) = sheet.Cells(row, col).Value
            dataCounter = dataCounter + 1
            col = col + 1
        Loop
        row = row + 1
    Loop

    workbook.Close False
    excelApp.Quit

    Dim i
    Dim resultMsg
    resultMsg = "读取的数据如下:" & vbCrLf
    For i = 0 To dataCounter - 1
        resultMsg = resultMsg & "序列" & (i + 1) & ": " & BiaoGe(i) & vbCrLf
    Next
    MsgBox resultMsg

    ' 将数据存储到 GiaoGe 变量
    ' 假设 GiaoGe 是一个单一变量,如果数据计数超过1,可以考虑逐个赋值
    For i = 0 To dataCounter - 1
        ' 根据实际情况处理每一个值,确保 GiaoGe 有足够的空间,或者根据需要更新
        GiaoGe = BiaoGe(i) ' 这里直接赋值,如果 GiaoGe 为数组,则需要指定索引
        ' 如果 GiaoGe 不支持数组,可考虑定义多个变量 GiaoGe1, GiaoGe2 等
    Next

    MsgBox "数据已成功存储到 GiaoGe 变量中"
End Sub[/code]

### 2. 处理多个数据
如果 `GiaoGe` 是一个单一变量,只能存储一个值,而你的 Excel 表格中有多个数据项,考虑使用多个变量,例如 `GiaoGe1`, `GiaoGe2`, `GiaoGe3` 等,来分别存储不同的数据。

### 3. 对 GiaoGe 变量的引用
- 确保 `GiaoGe` 变量在 WinCC 中存在且有效。
- 根据其数据类型(如整型、浮点型或字符串)做相应的赋值。

### 4. 系统变量的读取与写入权限
确保你有适当的权限来读取和写入 WinCC 中的系统变量,有时缺少权限可能会导致数据无法正确存储。

希望这段代码和建议能够帮助你解决问题。如有任何疑问或其他需求,请随时提问!

点评

wzc
如何提高系统变量的读取与写入权限  详情 回复 发表于 2024-12-3 10:20
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则