用wincc的脚本进行二进制位变量的位操作和判断

建立一个16位的wincc二进制位变量*,然后将S7的变量A,B,C。。。的值0/1按顺序放到*中,放完后了再和固定值比对,每个位数值不对都对应一个文字输出。用脚本怎么编了?

问题补充:
思路是这样的吧S7变量A,B,C等按顺序排列放入WINCC变量中成一个01110111.。。。。的数或字符串,然后与固定值11111111比较,第四位和第八位不同则分别同时输出两个文本。不一个个比较是因为变量多了后太庞大了。

最佳答案

在wincc中我习惯用字符串代替二进制变量,因为不然的话可能涉及到wincc与PLC数据类型匹配的问题,而且,字符串函数可以帮助我们直观快速地实现要求。
把PLC中的开关量(0/1)读回来,在脚本中用cstr变成字符串。

针对你的问题,如果你plc中是一连串的点,可以直接按字(八位)读上来,再换成二进制字符串。

如果你是在wincc中创建了一连串按规律命名的变量与plc变量相对应,比如在wincc中的变量A1-A10 对应你plc的A,B,C...十个变量,那么
dim i
dim strBin
strBin = ""
For i = 1 to 10 Step 1
strBin = Cstr(HMIRuntime.Tags("A"&cstr(i)),Read)&strBin 
Next
''到此得到了你想要的二进制的字符串形式,如果strBin在下文中再无用了,那完全可以不建立这个变量。
For i = 1 to 10 Step 1
     if Mid(strBin,i,1)<>Mid(你的固定值,i,1) then
       Select Case i
                 Case 10  A1(A)不同时的文本
                 Case 9   A2(B)不同时的文本
                  ...
       End select
     end if
Next

------------------------------------------------------------------------------------------------------------------------
以下是我程序中用到的一小段代码,节选的,主要用于讨论思路,dim什么的就省了。

For i = 3 To 14 Step 1
      idec = Int(HMIRuntime.Tags ("I"&CStr(i)).Read) ''读八位开关量回来
      ibinstr = ""    
      Do While idec > 0   ''转为二进制字符串
      ibinstr = CStr(idec Mod 2) & ibinstr 
           idec = idec \ 2
      Loop 
    
If Len (ibinstr) <> 8 Then  ''补全八位
 ibinstr = Left ("00000000",8 - Len (ibinstr)) & ibinstr   
End If 
    
binstrL = Right (ibinstr,4)
binstrH = Left (ibinstr,4) 
''这里是对两个四位串操作,省略了    
IGDSTR = Mid (binstrH,1,1)&Mid(binstrL,1,1)&IGDSTR ''获取每个四位串中的第一位
Next

Dim tc 
tc = 0
For i = 1 To 24 Step 1
     If Mid(IGDSTR,i,1) = "1" Then
       tc = tc + 1  ''统计字符串中有多少个''"1"
     End If 
Next

提问者对于答案的评价:
希望多交流

最佳答案作者回复:
的确,如果变量较多,批量读回来统一处理的话,会耗费较长时间,而脚本运行系统不能并发处理,这就有可能在处理这些变量的时候,别的脚本本该触发的,却没动作,造成不可预知的错误。
关键变量,还是按位从PLC中直接读为好。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc263273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午2:07
下一篇 2019年6月11日 上午2:08

相关推荐

  • wincc脚本运行周期与step7同步问题

    在PLC里面写了一些与时间计数有关的计算,输出到DB,wincc接收DB,同时归档。这里的归档是在wincc里面写的脚本。问题:归档想从0秒开始,但是实际上从1秒开始;有的时候1秒…

    SIMATIC WinCC 2021年7月5日
  • WinCC c

    刚接触Wincc不久,对于公司的一些程序不明白。有些设备的开和关管命令操作都是相同的,所以当鼠标点击设备时弹出的窗口时相同的,但是我不太明白他们的地址和窗口号时怎么添加到弹出的窗口…

    SIMATIC WinCC 2017年11月12日
  • wincc7.4和博图中的wincc

    wincc7.4和博图15 professional中的wincc professional有什么区别 最佳答案 我以前的答案http://www.ad.sie…

    SIMATIC WinCC 2021年7月5日
  • Wincc 界面密码

    请问大家,如果我没有Wincc原始文本,从触摸屏上回传,可以吗?参数有密码保护,密码可以po解吗?如何破jie?谢谢 最佳答案 如果要回传触摸屏程序必须具备以下条件1,触摸屏要装有…

    SIMATIC WinCC 2019年6月11日
  • WINCC 运行报错

    项目激活时每次编译到图形运行系统就停止,换过新的项目也如此。 求同行朋友指教!谢谢~坐等 最佳答案 新建一个项目试试,如果还是同样的问题,那就是软件安装问题,否则就是项目…

    SIMATIC WinCC 2021年7月5日
  • 删除历史数据

    设置一个按键,怎样通过脚本将归档变量的历史数据删除掉? 最佳答案 WINCC在激活的状态下(在计算机属性中的 变量记录运行系统 打钩了)无法删除历史数据。因为W…

    SIMATIC WinCC 2019年6月11日
  • wincc7.4安装MSMQ服务器问题

    安装wincc时,在windows功能中不能更改MSMQ服务器,导致安装不了。重启也不行,请工控朋友们给个解决方法、 问题补充:不重新安装系统可以吗? 钻石用户推荐最佳答案 系统用…

    SIMATIC WinCC 2021年7月5日
  • 怎么设置导出变量的TXT文件路径名

    我用C 脚本使内部变量保存在一个名字为“name”的txt 文档里,这样重新启动时也可以显示其保存值,而不是初始值。但是这个txt 文档的路径名不知道…

    SIMATIC WinCC 2019年6月11日
  • WinCC与S7-300以太网通讯问题

    这几天做项目,现场发现一个奇怪的现象,硬件配置是315-2PN通过以太网和上位WinCC6.0通讯,每次启动WinCC后5秒时间后就什么都点不动了,那位高手遇到过这种情况啊,谢谢指…

    SIMATIC WinCC 2017年7月25日
  • 触摸屏数据存储

    触摸屏数据存储 钻石用户推荐最佳答案 精智面板变量记录http://www.ad.siemens.com.cn/service/elearning/cn/Course.aspx?C…

    SIMATIC WinCC 2021年7月5日