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
相关产品推荐
相关产品推荐

