如何通过字符串名称获取.cmm脚本中全局MACRO的变量值
PC-DMIS .cmm脚本间接引用宏变量报错的解决方法
问题原因
你遇到的"operand expected"错误,是因为PC-DMIS对直接使用&&error_name进行间接变量赋值的语法解析存在限制——即便调试窗口能读取变量值,脚本执行时仍会因语法校验不通过报错。
修复方案
改用ASSIGN命令实现间接引用,这是PC-DMIS官方支持的动态变量引用方式,能避免语法错误。同时修正变量名处理的细节问题:
&error_name = STRING.LoWeR("&error_name") + "_low" // 用ASSIGN实现间接变量引用 ASSIGN/&modulus = &&error_name VAR.IF (FS_ErrorIdStatus[&modulus] != 0) ( // 移除之前添加的_low后缀,避免错误名称冗余 &error_name = STRING.REPLACE(&error_name, "_low", "") // 直接使用变量值转大写,而非字符串字面量 &error_name = "ERR_MON_" + STRING.UPpeR(&error_name) + "_VOLTAGE" GOSUB TC_DEBUG_MESSAGE " -- FAILED: " + &error_name + " was reported" RETURN FALSE() )
关键细节说明
ASSIGN命令的必要性:PC-DMIS的直接赋值语句对间接引用的语法支持不完善,ASSIGN/&var = &&dynamic_name是更可靠的写法,能通过脚本的语法校验。- 变量名修正:原代码中
STRING.UPpeR("&error_name")会把字符串"&error_name"转大写,而非变量&error_name的实际值,需去掉引号;同时添加的_low后缀会导致最终错误名称冗余,用STRING.REPLACE移除更合理。
内容的提问来源于stack exchange,提问作者Ondina
相关产品推荐
相关产品推荐

