使用Rockwell Arena遇SIMAN错误17035咨询及VBA代码优化建议
关于Arena SIMAN错误17035的解析与VBA代码优化建议
错误17035的具体含义
咱们先抓错误信息里的核心内容:Event number 0 is invalid: must be positive——这就是问题根源:你的VBA代码触发了一个编号为0的SIMAN事件,但Arena的SIMAN内核要求所有事件编号必须是大于0的整数。
结合错误场景(仿真启动0.0时刻,实体2进入VBA模块时触发),大概率是两种情况:
- 你的代码里调用了Arena的事件调度API(比如
CreateEvent这类方法),但传入的事件编号参数是0,违反了规则; - 代码逻辑失误,不小心修改了实体的内置事件相关属性,导致生成了无效的事件ID。
VBA代码优化建议
1. 优先修复事件编号问题
- 先排查代码中所有涉及SIMAN事件调度的语句:如果用了
Siman.Event、CreateEvent等方法,检查传入的事件编号参数,必须是1、2这类正整数,绝对不能用0; - 如果没主动调度事件,那要检查是否误触了相关API,或者在给实体属性赋值时不小心覆盖了系统内置的事件字段——别碰那些你没自定义的实体属性!
2. 优化Excel数据读取的稳健性
读取Excel时最容易踩坑,给你几个实用的优化点:
- 先检查文件/工作表是否存在,避免因路径或表名错误导致隐性崩溃:
Dim xlApp As Object, xlWB As Object, xlWS As Object ' 复用已打开的Excel实例,没打开就新建 On Error Resume Next Set xlApp = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set xlApp = CreateObject("Excel.Application") On Error GoTo 0 ' 检查工作簿 Set xlWB = xlApp.Workbooks.Open("你的Excel文件绝对路径") If xlWB Is Nothing Then MsgBox "Excel文件找不到或打不开!", vbCritical Exit Sub End If ' 检查工作表 Set xlWS = xlWB.Worksheets("目标工作表名") If xlWS Is Nothing Then MsgBox "指定的工作表不存在!", vbCritical xlWB.Close False xlApp.Quit Exit Sub End If - 处理空值与数据类型:读取单元格时明确取值,避免默认属性的坑,同时给空值设默认值:
Dim attrVal As Variant ' 假设读取第2行第1列的数据 attrVal = xlWS.Cells(2, 1).Value ' 空值处理,根据仿真需求设默认值 If IsEmpty(attrVal) Then attrVal = 0 ' 赋值给自定义实体属性 Entity.SetAttribute "你的自定义属性名", attrVal
3. 给VBA加错误捕获
别让错误直接抛给SIMAN内核,自己加个错误捕获,能精准定位问题:
Sub Arena_VBA_Module() On Error GoTo ErrHandler ' 你的核心代码:读取Excel、赋值实体属性等操作 Exit Sub ErrHandler: MsgBox "VBA运行出错:" & Err.Description & ",错误编号:" & Err.Number, vbCritical ' 这里可以加清理操作,比如关闭Excel If Not xlWB Is Nothing Then xlWB.Close False If Not xlApp Is Nothing Then xlApp.Quit End Sub
4. 实体属性赋值的注意事项
- 只给你提前在Arena里定义好的自定义属性赋值,别碰系统内置属性(尤其是和事件、调度相关的);
- 确保数据类型匹配:比如数值型属性别传字符串,避免类型不匹配的隐性错误。
内容的提问来源于stack exchange,提问作者Paloma Auladell
相关产品推荐
相关产品推荐

