技成培训网 技成学习APP 技成工具箱 技成企业服务

欢迎回到技成培训网

技成培训网

电工题库宝典

技成电工课堂

PLC练习题

技成PLC课堂

变频器故障查询

技成PLC学吧

伺服驱动故障查询

技成PLC网校

当前位置:技成首页 > 文章中心 > 技成百科 > 用wincc的脚本进行二进制位变量的位操作和判断

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

郑志武 发布于2013-11-08 11:42 5 0 标签:

建立一个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资料下载 电工电气资料下载
应用新秀
变频器故障代码查询APP
伺服故障代码查询APP
技成
手机APP
热门标签