You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TIA Portal VBScript写入SmartTags触发运行时溢出错误求助

TIA Portal V15.1 HMI VBScript 数据导入溢出故障求助

场景说明

在TIA-Portal V15.1编程环境下开发工业PLC本地SD卡与HMI(控制面板)本地USB之间的数据导入/导出功能,导出功能运行正常,导入功能触发运行时溢出错误。

  • 导出逻辑:PLC将本地SD卡中总计64135字节数据拆分存入数据块(DB)的嵌套字节数组传输缓冲区array[array[bytes]],HMI侧VBScript可正常访问该缓冲区,通过引用变量USBSD_Interface_TransferBuffer.Datapack_#,以FOR循环遍历所有元素写入连接USB的日志文件。
  • 导入逻辑:为导出的逆流程,先加载文件将所有条目存入值数组变量FILEDATA,再遍历所有值写入传输缓冲区对应位置,运行时触发溢出报错。

导出功能实现代码

'#############################################################################################
'#                            HANDSHAKE TO WRITE DATA TO FILE                                #
'#-------------------------------------------------------------------------------------------#
Dim LOCAL_BUFFERSIZE : LOCAL_BUFFERSIZE = 1599          ' Array[0..1599] = 1600 entries
Const MAX_ARRAYSIZE = 64135                             ' Max number of elements in array
Const MAX_ARRAYCOUNTER = 40                             ' 40 * 1600 = 64000 values
Dim BUFFER_COUNTER : BUFFER_COUNTER = 0
Dim ARRAY_COUNTER : ARRAY_COUNTER = 0
'#############################################################################################

For ARRAY_COUNTER = 0 To MAX_ARRAYCOUNTER
    If ARRAY_COUNTER = MAX_ARRAYCOUNTER Then
        ' Catch case of final datapack only holding 135 elements
        LOCAL_BUFFERSIZE = 135  
    End If
    
    For BUFFER_COUNTER = 0 To LOCAL_BUFFERSIZE
        FILE.WriteLine SmartTags("USBSD_Interface_TransferBuffer.Datapack_" & ARRAY_COUNTER)(BUFFER_COUNTER)
    Next
Next

导入功能实现代码

'#############################################################################################
'#                         HANDSHAKE TO WRITE DATA TO TEMP-DB                                #
'#-------------------------------------------------------------------------------------------#
Const MAX_ARRAYSIZE = 40
Const MAX_ELEMENTS = 64135
Dim LOCAL_BUFFERSIZE : LOCAL_BUFFERSIZE = 1599
Dim ARRAY_COUNTER : ARRAY_COUNTER = 0
Dim BUFFER_COUNTER : BUFFER_COUNTER = 0
Dim ELEMENT_COUNTER : ELEMENT_COUNTER = 0
'#############################################################################################

For ARRAY_COUNTER = 0 To MAX_ARRAYSIZE
    If ARRAY_COUNTER = MAX_ARRAYSIZE Then
        LOCAL_BUFFERSIZE = 135
    End If
    
    For BUFFER_COUNTER = 0 To LOCAL_BUFFERSIZE
        SmartTags("USBSD_Interface_TransferBuffer.Datapack_" & ARRAY_COUNTER)(BUFFER_COUNTER) = CByte(FILEDATA(ELEMENT_COUNTER))
        ELEMENT_COUNTER = ELEMENT_COUNTER + 1
    Next
    
    If ELEMENT_COUNTER >= MAX_ELEMENTS Then
        Exit For
    End If
Next

报错详情

运行导入脚本时触发如下报错:

0x800a0006 - Microsoft VBScript runtime error: Overflow: 'BUFFER_COUNTER'

已确认的故障特征

  • 报错仅在导入阶段出现,触发时机为第一个数据包(即ARRAY_COUNTER = 0)下计数到BUFFER_COUNTER = 99时
  • 手动逐行硬编码写入前100个数组元素,同样在索引99位置触发相同溢出错误
  • 单独零散写入索引99、100、101、102位置的元素时无任何异常
  • 错误仅在VBScript执行过程中连续写入超过98个数组元素时触发
  • 所有传输缓冲区数组均已完成实例化,可正常读写单个元素,暂未定位故障根因,求同类问题排查思路、解决方法或规避方案。

内容的提问来源于stack exchange,提问作者Robot Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:48:33