HMI IoT软件连接西门子Logo 8 PLC点击按钮报ReferenceError如何解决
错误原因
你当前的报错核心是命名函数表达式的内部名称无法在全局作用域被访问:
你采用了var 变量名 = function 函数名() {}的写法,这里的函数名仅在函数内部作用域生效,全局作用域下只能通过变量名访问该函数。你的HMI按钮绑定的触发函数是LE1DOWNmachen,但全局作用域下不存在这个名称的函数,仅存在名为LE1DOWN的变量指向该函数,因此抛出未定义错误。
同时你的代码还有2处额外问题:
ADOWN函数定义行末尾有多余的*/注释结束符,会引发语法错误- 代码末尾的批量调用全是用的函数内部名,全部无法正常执行,最后两行的
TUPmachen、TDOWNmachen甚至完全没有对应定义
修复步骤
- 统一函数的访问名称,二选一即可:
- 方案A:将函数改为全局函数声明,按钮原绑定的函数名可直接生效,示例:
// 修改前:var LE1DOWN= function LE1DOWNmachen() {} // 修改后: function LE1DOWNmachen() { var LE1animateDOWN = LeitstandSCHENKERRadeburg.getElementById('LE1animateDOWN'); LE1animateDOWN.beginElement(); } - 方案B:保持现有函数写法,将HMI按钮的触发函数改为绑定变量名
LE1DOWN,同时把代码末尾的调用全部替换为对应变量名
- 方案A:将函数改为全局函数声明,按钮原绑定的函数名可直接生效,示例:
- 删除
ADOWN函数定义行末尾多余的*/ - 修正代码末尾的批量调用:将所有内部函数名替换为对应变量名,比如
fAUFmachen()改为TUP(),LE1DOWNmachen()改为LE1DOWN(),删除不存在的TUPmachen()、TDOWNmachen()调用,或改为TUP()、TDOWN()
修正后的完整代码示例(采用方案A,兼容原有按钮绑定)
// 抬升动画组 function fAUFmachen() { var animateAUF2 = LeitstandSCHENKERRadeburg.getElementById('animateAUF2'); var animateAUF3 = LeitstandSCHENKERRadeburg.getElementById('animateAUF3'); var animateAUF4 = LeitstandSCHENKERRadeburg.getElementById('animateAUF4'); var animateAUF5 = LeitstandSCHENKERRadeburg.getElementById('animateAUF5'); var animateAUF6 = LeitstandSCHENKERRadeburg.getElementById('animateAUF6'); var animateAUF7 = LeitstandSCHENKERRadeburg.getElementById('animateAUF7'); var animateAUF8 = LeitstandSCHENKERRadeburg.getElementById('animateAUF8'); var animateAUF9 = LeitstandSCHENKERRadeburg.getElementById('animateAUF9'); animateAUF2.beginElement(); animateAUF3.beginElement(); animateAUF4.beginElement(); animateAUF5.beginElement(); animateAUF6.beginElement(); animateAUF7.beginElement(); animateAUF8.beginElement(); animateAUF9.beginElement(); } // 下降动画组 function fZUmachen() { var animateZU2 = LeitstandSCHENKERRadeburg.getElementById('animateZU2'); var animateZU3 = LeitstandSCHENKERRadeburg.getElementById('animateZU3'); var animateZU4 = LeitstandSCHENKERRadeburg.getElementById('animateZU4'); var animateZU5 = LeitstandSCHENKERRadeburg.getElementById('animateZU5'); var animateZU6 = LeitstandSCHENKERRadeburg.getElementById('animateZU6'); var animateZU7 = LeitstandSCHENKERRadeburg.getElementById('animateZU7'); var animateZU8 = LeitstandSCHENKERRadeburg.getElementById('animateZU8'); var animateZU9 = LeitstandSCHENKERRadeburg.getElementById('animateZU9'); animateZU2.beginElement(); animateZU3.beginElement(); animateZU4.beginElement(); animateZU5.beginElement(); animateZU6.beginElement(); animateZU7.beginElement(); animateZU8.beginElement(); animateZU9.beginElement(); } function LE1UPmachen() { var LE1animateUP = LeitstandSCHENKERRadeburg.getElementById('LE1animateUP'); LE1animateUP.beginElement(); } function LE1DOWNmachen() { var LE1animateDOWN = LeitstandSCHENKERRadeburg.getElementById('LE1animateDOWN'); LE1animateDOWN.beginElement(); } function LE2UPmachen() { var LE2animateUP = LeitstandSCHENKERRadeburg.getElementById('LE2animateUP'); LE2animateUP.beginElement(); } function LE2DOWNmachen() { var LE2animateDOWN = LeitstandSCHENKERRadeburg.getElementById('LE2animateDOWN'); LE2animateDOWN.beginElement(); } function LAUPmachen() { var LAanimateUP = LeitstandSCHENKERRadeburg.getElementById('LAanimateUP'); LAanimateUP.beginElement(); } function LADOWNmachen() { var LAanimateDOWN = LeitstandSCHENKERRadeburg.getElementById('LAanimateDOWN'); LAanimateDOWN.beginElement(); } function ULUPmachen() { var ULanimateUP = LeitstandSCHENKERRadeburg.getElementById('ULanimateUP'); ULanimateUP.beginElement(); } function ULDOWNmachen() { var ULanimateDOWN = LeitstandSCHENKERRadeburg.getElementById('ULanimateDOWN'); ULanimateDOWN.beginElement(); } function AUPmachen() { var AanimateUP = LeitstandSCHENKERRadeburg.getElementById('AanimateUP'); AanimateUP.beginElement(); } function ADOWNmachen() { var AanimateDOWN = LeitstandSCHENKERRadeburg.getElementById('AanimateDOWN'); AanimateDOWN.beginElement(); } // 下方为初始化调用,不需要可删除 fAUFmachen(); fZUmachen(); LE1UPmachen(); LE1DOWNmachen(); LE2UPmachen(); LE2DOWNmachen(); LAUPmachen(); LADOWNmachen(); ULUPmachen(); ULDOWNmachen(); AUPmachen(); ADOWNmachen();
内容的提问来源于stack exchange,提问作者Rajmund Januszewski
相关产品推荐
相关产品推荐

