维护控HMI脚本问题 点击:659 | 回复:2



Oscar_C

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2014年4月22日
发表于:2014-04-23 15:36:47
楼主

在维控的开发环境中写脚本的时候发现了一个问题。


首先环境是在地址标识库中,定义了一个地址的别名

比如 @B_HDX100.0 的别名是 @水阀A控制位


然后可以用如下语句来操控@B_HDX100.0


SetB( "@水阀A控制位" )


这个是正常的表型


但是以下语句理论上应该能够操作该位,但是编译运行后却发现完全不起效


SetB( "@水阀控" + "A" + "控制位" )


请问这个应该如何解决?

-------------------


发布后修改了原帖中的笔误




DARLINGZW

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 29回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2013年3月27日
发表于:2014-04-23 16:13:57
1楼

哥们儿,地址表识里边用什么在脚本里也得用什么,要不然字符串不一致,系统无法识别变量。

Oscar_C

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2014年4月22日
发表于:2014-04-23 22:27:44
2楼

回复内容:

对: DARLINGZW 哥们儿,地址表识里边用什么在脚本里也得用什么,要不然字... 内容的回复!


啊,感谢你的回复,不好意思我打字的时候手滑了。

更正一下,我的意思是

✔︎  - SetB( "@水阀A控制位" )

✗  - SetB( "@水阀" + "A" + "控制位" )

第一行可以运行,

第二行的命令没有效果。


另外说明一下我想这么做的原因是因为PLC的位地址不能通过NewNoAddr函数来偏移。

举个例子来说ModBus的地址格(例如 @2#1:W5_X_000001 )既不能用NewNoAddr来计算偏移位后的新地址,也不能NewStatAddr来计算偏移站数后的新地址,测试的结果是这两个函数在处理这类地址的时候只返回一个“@”

所以我只好把要用到的PLC地址都在地址标识表里面标识好,然后通过字符串的操作来计算偏移后的地址的别名进而改动里面的数据。

在这个例子中 @水阀A控制位 @水阀B控制位 …… @水阀E控制位 的地址都是标好了的。

这样我想控制第 n 个水阀,那么就可以通过

"@水阀" + Chr(  Asc("A") -1 + n ) + "控制位"

这个语句来算出那个水阀的控制的地址,但是这样算出来的结果传递给SetB函数却没有效果。我的问题就是为什么都是一样的字符串,整块输入的就有效,平凑起来的就无效呢?


热门招聘
相关主题

官方公众号

智造工程师