WINCC脚本实例
Wincc界面设计——C脚本实践
Wincc界面设计——C脚本实践简介Wincc是一款用于人机界面设计的软件,通过使用C脚本,可以实现更加复杂的功能和交互。
本文将介绍如何在Wincc界面设计中实践C脚本的使用。
C脚本基础在开始使用C脚本之前,需要了解C语言的基础知识。
C脚本是一种用于编写Wincc界面逻辑的脚本语言,其语法和C语言相似。
熟悉C语言的人员可以更快地上手C脚本的编写。
C脚本实践以下是一些常见的C脚本实践示例:1. 按钮点击事件void Button_Click(){// 点击按钮后执行的代码// ...}在Wincc界面中,可以为按钮添加点击事件。
当按钮被点击时,会调用`Button_Click`函数,可以在该函数中编写相应的逻辑代码。
2. 数据处理double CalculateAverage(double[] data, int length){double sum = 0;for (int i = 0; i < length; i++){sum += data[i];}return sum / length;}在Wincc界面中,可以使用C脚本进行数据处理。
上述示例代码演示了如何计算一组数据的平均值。
可以根据实际需求编写相应的数据处理函数。
3. 界面更新void UpdateLabel(){double value = GetSensorValue();Label.SetText(value);}C脚本还可以用于更新界面元素的内容。
上述示例代码演示了如何根据传感器的值来更新标签的文本。
通过调用相应的函数或方法,可以实现界面元素的动态更新。
总结通过使用C脚本,可以在Wincc界面设计中实现更加复杂的功能和交互。
本文介绍了C脚本的基础知识以及一些常见的实践示例。
在实际应用中,可以根据需求灵活运用C脚本,提升Wincc界面的设计和交互体验。
wincc wscriptshell对象使用
WinCC 是 Siemens 的一种工业自动化控制系统。
WinCC 提供了 WScriptShell 对象,可以用来在脚本中执行 Windows 操作系统的一些命令。
在 WinCC 的脚本中使用 WScriptShell 对象,你可以执行一些系统操作,例如运行外部程序、创建快捷方式、访问网络资源等。
以下是一个简单的示例,展示如何使用 WScriptShell 对象在 WinCC 脚本中执行一个外部程序:
vbs复制代码
Dim shell
Set shell = CreateObject("WScriptShell")
' 执行外部程序
shell.Run "C:\Path\to\your\program.exe", 1, True
在这个示例中,我们首先创建了一个 WScriptShell 对象。
然后,使用 Run 方法来执行指定的外部程序。
Run 方法的第一个参数是要运行的程序路径,第二个参数是窗口样式(1 表示窗口最大化,0 表示隐藏窗口),第三个参数 True 表示程序执行完毕后自动关闭。
除了 Run 方法,WScriptShell 对象还有其他一些方法可以用于执行系统操作。
你可以根据具体需求选择适当的方法。
请注意,使用 WScriptShell 对象时需要谨慎处理输入参数和输出结果,确保脚本的安全性和稳定性。
另外,由于涉及系统操作,请确保你了解相关操作的风险和后果,并在测试和部署脚本时格外小心。
WinCC脚本案例保留
WinCC脚本案例保留2010-09-16 16:44最近做一个WinCC跟ERP通讯的一个小项目,将脚本语言保留下来,以备不时之需!仅仅是保留,各位看官如发现不妥之处请加以指教.1.通过扫描枪扫描到ID号传给PLC,WinCC读取到ID号从ERP数据库中查找相关数据,写回到PLC,并给PLC一个写完成确认信号.(数据库是SqlServer2000)Dim DB240trigger,db241triggerdb240trigger=HMIRuntime.Tags("db240itrigger").Readdb241trigger=HMIRuntime.Tags("DB241itrigger").ReadDim ss,strstr=HMIRuntime.Tags("DB240szcoil_ID").Readss=CStr(str)If (db240trigger=1 And db241trigger=0 ) ThenDim sPro,sDsn,sSer,sCon,sSqlDim oRsMaterial,conn,oCom,oItem,oRsSCHEMADim database,server,uid,pwdsCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=pasword"Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenSet oRsMaterial = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM dbo.BRGS_GP_Material where MkNo='" & CStr(ss) & "'"oRsMaterial.open ssql,conn,1,1Dim m,nm=oRsMaterial.recordcountIf m<>1 ThenMsgBox "这个ID号找不到唯一的一条参数信息,请手动输入信息!"Exit FunctionEnd IfDim sCon2,sSql2Dim oRsnftz,conn2sCon2="driver=sql server;server=10.51.103.115;DATABASE=db_01;uid=sa;pwd=12345"Set conn2 = CreateObject("ADODB.Connection")conn2.ConnectionString = sCon2conn2.OpenDim LASTLAST=orsMaterial.fields("LastProcedure").valueLAST=LAST+1Set oRsnftz = CreateObject("ADODB.Recordset")sSql2= "SELECT * FROM MF_TZ where ZC_ITM=" & CInt(LAST) & " And MO_No='" & orsMaterial.fields("MO_NO").value & "'" oRsnftz.open ssql2,conn2,1,1Dim GJID,PIHAO,PANHAO,GANGZHONG,ZHIJING,ZHONGLIANG,PDim PPPP=oRsnftz.fields("ZC_NO").valueIf (Left(PP,1) = "P") ThenHMIRuntime.Trace "P"HMIRuntime.Tags("visible_error").Write 0,1ElseHMIRuntime.Trace "not p ,will exit!"HMIRuntime.Tags("DB241szCOIL_ID").Write "error state",1HMIRuntime.Tags("error_text").Write PP,1HMIRuntime.Tags("visible_error").Write 1,1MsgBox "该材料现在不在P处理模式,请核实,或者手动输入信息!"Exit FunctionEnd IfGJID=HMIRuntime.Tags("DB240szcoil_ID").ReadPIHAO=orsMaterial.fields("Mo_No").valuePANHAO=orsMaterial.fields("Plant_No").valueGANGZHONG=orsMaterial.fields("Snm").valueZHIJING=orsMaterial.fields("CardSPC").valueZHONGLIANG=orsMaterial.fields("CurrentWeight").valueHMIRuntime.Tags("DB241iProg_NO").Write P,1HMIRuntime.Tags("DB241rDiameter").Write ZHIJING,1HMIRuntime.Tags("DB241rWeight").Write ZHONGLIANG,1HMIRuntime.Tags("DB241szSTEELGRADE").Write GANGZHONG,1HMIRuntime.Tags("DB241szPRODUNCTION_NO").Write PIHAO,1HMIRuntime.Tags("DB241szCOIL_NO").Write PANHAO ,1HMIRuntime.Tags("DB241szCOIL_ID").Write GJID,1HMIRuntime.Tags("DB241itrigger").Write 1,1oRsMaterial.CloseSet oRsMaterial = NothingoRsnftz.CloseSet oRsnftz = Nothingconn.CloseSet conn = Nothingconn2.CloseSet conn2 = NothingEnd If2.开始上料程序PLC接受到上料按钮的命令,将处理数据传给相应的DB数据块,并产生一条开始处理记录.插入到ERP的数据库中.Dim a,b,c,d,itrigger1,itrigger2itrigger1=HMIRuntime.Tags("DB242itrigger").Readitrigger2=HMIRuntime.Tags("DB243itrigger").ReadIf (itrigger1=1 And itrigger2<>1 ) Thena=HMIRuntime.Tags("DB242szCOIL_ID1").Readb=HMIRuntime.Tags("DB242szCOIL_ID2").Readc=HMIRuntime.Tags("DB242szCOIL_ID3").Readd=HMIRuntime.Tags("DB242szCOIL_ID4").ReadHMIRuntime.Tags("DB243szCOIL_ID1").Write a,1HMIRuntime.Tags("DB243szCOIL_ID2").Write b,1HMIRuntime.Tags("DB243szCOIL_ID3").Write c,1HMIRuntime.Tags("DB243szCOIL_ID4").Write d,1HMIRuntime.Tags("DB243itrigger").Write 1,1End If/////插入记录的程序Dim sPro,sDsn,sSer,sCon,sSqlDim oRsMaterial,conn,conn2,oCom,oItem,oRsSCHEMADim database,server,uid,pwdDim ss,strstr=HMIRuntime.Tags("MKNO").Readss=CStr(str)Dim lianjiezifuchuan,shujuku,shanchusqllianjiezifuchuan ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set shujuku = CreateObject("ADODB.Connection")shujuku.ConnectionString = lianjiezifuchuanshujuku.Openshanchusql= "Delete from load_unload WHERE shangxia=1 and MkNo='"& ss &"'"Dim minglingSet mingling =CreateObject("mand")With mingling.ActiveConnection=shujuku.ComMandText=shanchusqlEnd Withmingling.ExecuteSet mingling=Nothingshujuku.CloseSet shujuku = NothingIf (ss<> "" )Then'sCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=pasword"sCon ="driver=sql server;server=PC-201003161557\WINCC;DATABASE=brgs_release;uid=sa;pwd=123456" Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenSet oRsMaterial = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM dbo.BRGS_GP_Material where mkNo='" & CStr(ss) & "'"oRsMaterial.open ssql,conn,1,1Dim mmmm= oRsMaterial.recordcountIf mm<1 ThenMsgBox "条码"& sS & "查询不到相关的数据,请检查"Exit SubEnd IfIf mm>1 ThenMsgBox "条码"& sS & "查询到相关的数据不止一条,请检查"Exit SubEnd IfDim STRStateSTRState=oRsMaterial.fields("MaterialState").valueIf STRState<>20 ThenMsgBox "条码"& sS & "查询到的材料状态不是20,请检查!"Exit SubEnd IfDim intlastprocedure,intlastprocedure2,cailiaohaointlastprocedure=orsMaterial.fields("LastProcedure").valueintlastprocedure2=intlastprocedure+1cailiaohao=orsMaterial.fields("Material_No").valueSet conn2 = CreateObject("ADODB.Connection")conn2.ConnectionString = sConconn2.OpensSql= "SELECT * FROM dbo.BRGS_GP_SCHEMA where UseFlag=0 and MkSeq= " & intlastprocedure2 & " And Material_NO='" & CStr(cailiaohao) & "'"Set oRsSCHEMA = CreateObject("ADODB.Recordset")oRsSCHEMA.open ssql,conn2,1,1Dim nn=oRsSCHEMA.recordcountIf n>1 ThenMsgBox "条码"& sS & "查询到的调度信息不止一条,请检查"Exit SubEnd IfIf n<1 ThenMsgBox "条码"& sS & "查询不到调度信息,请检查"Exit SubEnd IfDim gonghao,banzu,shikegonghao=HMIRuntime.Tags("gonghao").Readbanzu=HMIRuntime.Tags("banzu").Readshike=HMIRuntime.Tags("shike").ReadDim s1,s2,s3,s4,s5,s6,s7Dim A1,A2,A3,A4,A5,A6,A7,A8,A9,A10Dim A11,A12,A13,A14,A15,A16,A17,A18,A19,A20Dim A21,A22,A23,A24,A25,A26,A27,A28,A29,A30Dim A31,A32,A33,A34,A35,A36,A37,A38,A39,A40A1=orsMaterial.fields("Material_No").value ''引用自BRGS_GP_Material表A2=orsMaterial.fields("Plant_No").value ''从BRGS_GP_MATERIAL表中Plant_No中复制过来A3=orsMaterial.fields("Stuff_No").value ''从BRGS_GP_MATERIAL表中Stuff_no中复制过来A4=orsMaterial.fields("MaterialPre_No").value ''从BRGS_GP_MATERIAL表中MaterialPre_No中复制过来A28=orsMaterial.fields("BfNo").value ''从BRGS_GP_MATERIAL表中Bf_No中复制过来A20=orsMaterial.fields("MkNo").value ''这个就是条码上的内容//////这个要确定A5=orsMaterial.fields("Snm").value ''钢种,从BRGS_GP_MATERIAL表中Snm中复制过来A29=orsMaterial.fields("FirstSPC").value ''原料规格,从BRGS_GP_MATERIAL表中FirstSPC中复制过来A30=orsMaterial.fields("CardSPC").value ''开工时的标称规格,从BRGS_GP_MATERIAL表中CardSPC中复制过来A31=orsMaterial.fields("CardSPC").value ''完工时的标称规格,从BRGS_GP_MATERIAL表中CardSPC中复制过来A32=orsMaterial.fields("RealSPC").value ''开工时的实测规格,从BRGS_GP_MATERIAL表中RealSPC中复制过来A33=orsMaterial.fields("RealSPC").value ''完工时的实测规格,从BRGS_GP_MATERIAL表中RealSPC中复制过来A7=orsMaterial.fields("Mo_No").value ''制令单号,从BRGS_GP_MATERIAL表中Mo_No中复制过来''''''''''''''''''''''''''''''''''''''from schema table''''''''''''''''''''''''''''''''''''''A8=oRsSCHEMA.fields("SUnit").value ''制程代码,从BRGS_GP_SCHEMA表中的SUnit读取A9=oRsSCHEMA.fields("TzNo").value ''通知单号,从BRGS_GP_SCHEMA表中的TzNo读取A10=oRsSCHEMA.fields("ZcNo").value ''制程名称,从BRGS_GP_SCHEMA表中的ZcNo读取A11=oRsSCHEMA.fields("ZcRem").value ''制程说明,从BRGS_GP_SCHEMA表中的ZcRem读取A21=oRsSCHEMA.fields("SUnit").value ''计划机台,从BRGS_GP_SCHEMA表中的SUnit读取A37=oRsSCHEMA.fields("rowid").value ''调度号,对应BRGS_GP_SCHEMA中的主键,表明本次操作,对应那一个调度A12="401202J" ''工作的机组,对于自动酸洗线是401202JA34="" ''拉丝模具号,这里为空字符串A35="" ''酸洗的吊钩号,这里为空A13=1 ''始终为1A14=CStr(shike) ''开工时间A15=CStr(gonghao) ''开工操作员工号A16="" ''完工时间A17="99999" ''完工操作员工号A25=CStr(banzu) ''开工的班组A27="" ''完工的班组A19=0 ''切头切尾量,不理会,设置为0A22=1 ''质检标志,永远为1A23="system" ''质检人员,永远为SystemA24="" ''质检时间,与完工时间一致,暂时未空A36=21 ''工序的类型,对于酸洗,永远是21A38=0 ''在插入时设置为0,后面的操作不要更动这个字段A40="" ''在插入时设置为空串,后面的操作不要更动这个字段A39=0 ''设置为0A6="" ''未作说明,设置为0A18=0 ''ENDWEIGHTA26=0 ''BeginWeightsSql= "insert into BRGS_GP_PROCEDURE values(133,'" & A1 & "','" & A2 & "','" & A3 & "','" & A4 & "','" & A5 & "','" & A6 & "','" & A7 & "','" & A8 & "','" & A9 & "','" & A10 & "','" & A11 & "','" & A12 & "',"& CInt(A13) &",'" & CStr(A14)& "','" & A15 & "','" & CStr(A16)& "','" & A17 & "',"& CInt(A13) &","& CInt(A19) &",'" & A20 & "','" & A21 & "',"& CInt(A22) &",'" & A23 & "','" & CStr("")& "',N'" & A25 & "',"& CInt(A26) &",'" & A27 & "','" & A28 & "','" & A29 & "','" & A30 & "','" & A31 & "','" & A32 & "','" & A33 & "','" & A34 & "','" & A35 & "',"& CInt(A36) &","& CInt(A37) &"," & A38 & "," & A39 & ",'" & A40 & "')"Dim objCommandSet objCommand=CreateObject("mand")With objCommand.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand.ExecuteDim objCommand2Set objCommand2=CreateObject("mand")sSql= "update dbo.BRGS_GP_Material set MaterialState='22',Region='401202J',LastProcedure=" & intlastprocedure2 & " where mkNo='" & CStr(ss) & "'"With objCommand2.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand2.ExecuteDim objCommand3Set objCommand3=CreateObject("mand")sSql= "update dbo.BRGS_GP_SCHEMA set UseFlag=1 where UseFlag=0 and MkSeq= " & intlastprocedure2 & " And Material_NO='" & CStr(cailiaohao) & "'"With objCommand3.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand3.ExecuteSet objCommand=NothingSet objCommand2=NothingSet objCommand3=NothingoRsMaterial.CloseSet oRsMaterial = NothingoRsSCHEMA.CloseSet oRsSCHEMA = Nothingconn.CloseSet conn = NothingEnd If3.下料程序PLC接收到下料按钮的信号,更新ERP数据库中的信息,并将相关的ID号回传做二次对比.Dim a,b,c,d,itrigger1,itrigger2Dim id2itrigger1=HMIRuntime.Tags("DB244itrigger").Readitrigger2=HMIRuntime.Tags("DB245itrigger").ReadIf (itrigger1=1 And itrigger2<>1 And id2=0) Thena=HMIRuntime.Tags("DB244szCOIL_ID1").Readb=HMIRuntime.Tags("DB244szCOIL_ID2").Readc=HMIRuntime.Tags("DB244szCOIL_ID3").Readd=HMIRuntime.Tags("DB244szCOIL_ID4").ReadHMIRuntime.Tags("DB245szCOIL_ID1").Write a,1HMIRuntime.Tags("DB245szCOIL_ID2").Write b,1HMIRuntime.Tags("DB245szCOIL_ID3").Write c,1HMIRuntime.Tags("DB245szCOIL_ID4").Write d,1HMIRuntime.Tags("DB245itrigger").Write 1,1End If/////更新ERP中相关的数据Dim sPro,sDsn,sSer,sCon,sSqlDim oRsMaterial,conn,conn2,oCom,oItem,oRsSCHEMADim database,server,uid,pwdDim ss,strstr=HMIRuntime.Tags("MKNO").Readss=CStr(str)Dim lianjiezifuchuan,shujuku,shanchusqllianjiezifuchuan ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set shujuku = CreateObject("ADODB.Connection")shujuku.ConnectionString = lianjiezifuchuanshujuku.Openshanchusql= "Delete from load_unload WHERE shangxia=2 and MkNo='"& ss &"'"Dim minglingSet mingling =CreateObject("mand")With mingling.ActiveConnection=shujuku.ComMandText=shanchusqlEnd Withmingling.ExecuteSet mingling=Nothingshujuku.CloseSet shujuku = NothingIf (ss<> "") Then'sCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=password"sCon ="driver=sql server;server=PC-201003161557\WINCC;DATABASE=brgs_release;uid=sa;pwd=123456"Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenDim gonghao,banzu,shikegonghao=HMIRuntime.Tags("gonghao").Readbanzu=HMIRuntime.Tags("banzu").Readshike=HMIRuntime.Tags("shike").ReadDim objCommandSet objCommand=CreateObject("mand")sSql= "update dbo.BRGS_GP_PROCEDURE set QCTime='" & CStr(shike)& "', EndTime='" & CStr(shike) & "',EndEmpNo='"& CStr(gonghao) & "',EndShift='"& CStr(banzu) & "' where endempno='99999' and mkNo='" & CStr(ss) & "'"With objCommand.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand.ExecuteSet oRsMaterial = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM dbo.BRGS_GP_Material where mkNo='" & CStr(ss) & "'"oRsMaterial.open ssql,conn,1,1Dim mmmm= oRsMaterial.recordcountIf mm<=0 ThenMsgBox "下料的扫描号码为"& str & "没有在数据库中找到上料信息"Exit SubEnd IfDim intlastprocedure,intlastprocedure2,cailiaohaointlastprocedure=orsMaterial.fields("LastProcedure").valueintlastprocedure2=intlastprocedure+1cailiaohao=orsMaterial.fields("Material_No").value'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Set conn2 = CreateObject("ADODB.Connection")conn2.ConnectionString = sConconn2.OpensSql= "SELECT * FROM dbo.BRGS_GP_SCHEMA where UseFlag=0 and MkSeq= " & intlastprocedure2 & " And Material_NO='" & CStr(cailiaohao) & "'"Set oRsSCHEMA = CreateObject("ADODB.Recordset")oRsSCHEMA.open ssql,conn2,1,1Dim nn=oRsSCHEMA.recordcountIf n>1 ThenMsgBox "调度表中关于条码" & ss &"的数据大于一条,请检查"Exit SubEnd IfDim sql_last,rst_last,x_last,xxxx_last=0sql_last= "SELECT * FROM dbo.BRGS_GP_SCHEMA where MkSeq>= " & intlastprocedure2 & " And Material_NO='" &CStr(cailiaohao) & "' order by mkseq asc"Set rst_last = CreateObject("ADODB.Recordset")rst_last.open sql_last,conn2,1,1xxx=rst_last.recordcountIf xxx=0 Thenx_last=100Elserst_last.movefirstEnd IfDim yDo While (Not rst_last.eof)If rst_last.fields("UseFlag").value=0 Theny=100rst_last.movenextEnd Ifrst_last.movenextLoopx_last=y-x_lastDim strzctype,zctypewritestrzctype=oRsSCHEMA.fields("ZcType").valueIf strzctype=21 Thenzctypewrite=20End IfIf strzctype=22 Thenzctypewrite=40End IfIf strzctype=23 Thenzctypewrite=30End IfIf x_last=100 Thenzctypewrite=50End IfDim objCommand2Set objCommand2=CreateObject("mand")sSql= "update dbo.BRGS_GP_Material set Region='BLQ',MaterialState=" & CStr(zctypewrite) & " where mkNo='" & CStr(ss) & "'"With objCommand2.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand2.ExecuteIf x_last=100 ThenDim objCommand3Set objCommand3=CreateObject("mand")sSql= "update dbo.BRGS_GP_Material set IsProduct=1,ProductShift='" & CStr(banzu)& "',ProductMan='" &CStr(gonghao)& "',ProductTime='" & CStr(shike)& "',MaterialState=" & CStr(zctypewrite) & " where mkNo='" & CStr(ss) & "'"With objCommand3.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand3.ExecuteEnd IfSet objCommand=NothingSet objCommand2=NothingSet objCommand3=Nothingrst_last.closeSet rst_last=NothingoRsMaterial.CloseSet oRsMaterial = NothingoRsSCHEMA.CloseSet oRsSCHEMA = Nothingconn.CloseSet conn = NothingEnd If4.缓冲信息系统具备多个上料按钮,也就是说操作人员按下每个上料按钮的时间很短,而处理上料这块的程序又比较大,根据网络情况,有时候需要1分钟左右,这样,有可能会丢失信息,这个是不允许的,因为信息丢失后,在ERP中就反应不出来,材料的状态就不会发生改变,到下一步工序时,材料就没有办法进行处理,同样下料也是.所以我做了一个缓冲数据库,.按下上料或者下料按钮时,缓冲数据库只记录上料时的ID号,班组号以及上料时间等简单数据.然后系统定时(1分钟)从缓冲数据库中取出一个最先插入的数据进行处理,更具ID号跟ERP进行通讯,处理相关程序,这样做到了异步处理(一个上料处理到下料的过程需要30分钟左右)./////上料插入程序,使用本机自带的SqlServer2000数据库Dim conn,scon,ssqlDim database,server,uid,pwdDim ss1,ss2,ss3,ss4,str1,str2,str3,str4Dim id1Dim uesr,banzuuesr=HMIRuntime.Tags("uesr").Readbanzu=HMIRuntime.Tags("banzu").Readid1=HMIRuntime.Tags("ID1").Readstr1=HMIRuntime.Tags("DB242szCOIL_ID1").Readstr2=HMIRuntime.Tags("DB242szCOIL_ID2").Readstr3=HMIRuntime.Tags("DB242szCOIL_ID3").Readstr4=HMIRuntime.Tags("DB242szCOIL_ID4").Readss1=CStr(str1)ss2=CStr(str2)ss3=CStr(str3)ss4=CStr(str4)sCon ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenDim A1,A2,A3If (ss1<> "" And id1=0 )ThenA1=ss1A2=1 ''1:load 2:unloadA3=CStr(Now())sSql= "insert into load_unload values('" & A1 & "'," & A2 & ",'" & uesr &"',N'"& banzu &"','" & A3 & "')"Dim objCommand1Set objCommand1=CreateObject("mand")With objCommand1.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand1.ExecuteSet objCommand1=NothingEnd IfIf (ss2<> "" And id1=0 )Then..............End IfIf (ss3<> "" And id1=0 )Then.........End IfIf (ss2<> "" And id1=0 )Then..........End Ifconn.CloseSet conn = NothingHMIRuntime.Tags("ID1").Write 1,1/////下料插入程序,使用本机自带的SqlServer2000数据库Dim conn,scon,ssqlDim database,server,uid,pwdDim ss1,ss2,ss3,ss4,str1,str2,str3,str4Dim id1Dim uesr,banzuuesr=HMIRuntime.Tags("uesr").Readbanzu=HMIRuntime.Tags("banzu").Readid1=HMIRuntime.Tags("ID2").Readstr1=HMIRuntime.Tags("DB244szCOIL_ID1").Readstr2=HMIRuntime.Tags("DB244szCOIL_ID2").Readstr3=HMIRuntime.Tags("DB244szCOIL_ID3").Readstr4=HMIRuntime.Tags("DB244szCOIL_ID4").Readss1=CStr(str1)ss2=CStr(str2)ss3=CStr(str3)ss4=CStr(str4)sCon ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenDim A1,A2,A3If (ss1<> "" And id1=0 )ThenA1=ss1A2=2 ''1:load 2:unloadA3=CStr(Now())sSql= "insert into load_unload values('" & A1 & "'," & A2 & ",'" & uesr &"',N'"& banzu &"','" & A3 & "')"Dim objCommand1Set objCommand1=CreateObject("mand")With objCommand1.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand1.ExecuteSet objCommand1=NothingEnd IfIf (ss2<> "" And id1=0 )Then.......End IfIf (ss3<> "" And id1=0 )Then..........End IfIf (ss4<> "" And id1=0 )Then...............End Ifconn.CloseSet conn = NothingHMIRuntime.Tags("ID2").Write 1,15.定时一分钟处理的处理/////具体上料和下料程序就是前面的第一条和第二条Dim Connectstring,con,rst,sql,rstcount,x,MKNO,gonghao,banzu,shikeConnectsTring ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd=" Set con = CreateObject("ADODB.Connection")con.ConnectionString = connectstringcon.OpenSet rst = CreateObject("ADODB.Recordset")sql= "SELECT * FROM load_unload order by ID ASC"rst.open sql,con,1,1rstcount=rst.recordcountIf (rstcount<1) Then Exit Function End Ifrst.movefirstx=rst.fields("shangxia").valueMKNO=rst.fields("MKNO").valuegonghao=rst.fields("gonghao").valuebanzu=rst.fields("banzu").valueshike=CStr(rst.fields("shijian").value)HMIRuntime.Tags("MKNO").Write MKNO,1HMIRuntime.Tags("gonghao").Write gonghao,1HMIRuntime.Tags("banzu").Write banzu,1HMIRuntime.Tags("shike").Write shike,1If (x=1) ThenCall procedure1()End If'If (x=2) ThenCall procedure5()End Ifrst.CloseSet rst = Nothingcon.CloseSet con = Nothing程序的界面就是这么样,很简单,这个一般不需要人去操作,只是换班的时候账号什么的动动就行了,然后上料的时候那个扫描枪扫描条码就可以了,简化了操作人员的劳动强度,以前可是需要操作人员那个条码牌到触摸屏上去一个一个参数输入的哦.令附一个账号密码的简单程序(不用wincc的,很简单的一个程序,wincc那个设置复杂,维护的人员闲麻烦):////登陆账号im ZH,MM,BZZH=HMIRuntime.Tags("ZH").ReadMM=HMIRuntime.Tags("MM").ReadDim sPro,sDsn,sSer,sCon,sSqlDim oRs,connDim database,server,uid,pwdsCon ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenSet oRs = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM mmb where ZH='" & CStr(ZH) & "' And MM='" & CStr(MM) & "'"oRs.open ssql,conn,1,1Dim mm=oRs.recordcountIf m<1 ThenMsgBox "账号或者密码不正确,请重新输入!"Exit SubDim uesr,banzuuesr=ors.fields("ZH").valueDim asdasd=HMIRuntime.Tags("t").ReadIf asd=1 Then banzu="甲班" enD ifIf asd=2 Then banzu="乙班" enD ifIf asd=4 Then banzu="丙班" enD ifIf aSd=8 Then banZu="丁班" enD ifDim SS=HMIRuntime.Tags("uesr").ReadIf (Left(S,1) = "A") ThenHMIRuntime.Tags("vis").Write 1,1banZu="管理员"ElseHMIRuntime.Tags("vis").Write 0,1End IfHMIRuntime.Tags("uesr").write uesr,1HMIRuntime.Tags("banzu").write banzu,1oRs.CloseSet oRs = Nothingconn.CloseSet conn = NothingHMIRuntime.Tags("MM").write "",1////////增加账号和删除账号的程序Dim ZH,MM,BZZH=HMIRuntime.Tags("ZH").ReadMM=HMIRuntime.Tags("MM").ReadDim sPro,sDsn,sSer,sCon,sSqlDim oRs,connDim database,server,uid,pwdsCon ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConSet oRs = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM mmb where ZH='" & CStr(ZH) & "'"oRs.open ssql,conn,1,1Dim mm=oRs.recordcountIf m>=1 ThenMsgBox "账号已经存在"Exit SubEnd IfIf ZH="" ThenMsgBox "账号不能为空"End IfIf MM="" ThenMsgBox "密码不能为空"End IfDim objCommand3Set objCommand3=CreateObject("mand")sSql= "insert into MMB VALUES('"& ZH & "','" & MM & "')"With objCommand3.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand3.ExecuteSet objCommand3=NothingoRs.CloseSet oRs = Nothingconn.CloseSet conn = NothingDim ZH,MM,BZZH=HMIRuntime.Tags("ZHZH").ReadDim sPro,sDsn,sSer,sCon,sSqlDim oRs,connDim database,server,uid,pwdsCon ="driver=sql server;server=127.0.0.1\WINCC;DATABASE=Master;uid=;pwd="Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.OpenSet oRs = CreateObject("ADODB.Recordset")sSql= "SELECT * FROM mmb where ZH='" & CStr(ZH) & "'"oRs.open ssql,conn,1,1Dim mm=oRs.recordcountIf m<1 ThenMsgBox "工号不存在"Exit SubEnd IfDim objCommand3Set objCommand3=CreateObject("mand")sSql= "delete from MMB where ZH='"& ZH & "'"With objCommand3.ActiveConnection=Conn.ComMandText=ssqlEnd WithobjCommand3.ExecuteSet objCommand3=Nothing。
WINCC常用脚本说明
WINCC 常用脚本说明——第一篇(2011-06-郑州-SZL)一、 VBS1.定义变量格式:Dim 变量实例:Dim GDH1,PCH1,CL1,BC1,Silo1,PH1Dim GDH2,PCH2,CL2,BC2,Silo2,PH22.注释格式:’’ (英文下)实例: '换柜 21、22、23、24\25'工单开始 31、32、33、34\35'工单结束 41、42、43、44\45'1--换柜,2--工单开始,3--班开始,4--工单结束,5--班结束3.读变量取值格式:=HMIRuntime.Tags("").READ实例:MES_WO = ""MES_WO=HMIRuntime.Tags("CP_A_GDH").READ4.写变量赋值格式:HMIRuntime.Tags("").Write实例:HMIRuntime.Tags("CP_A_GDCZBZ").Write 3,15.调用windows dialog格式:If MsgBox("", vbYesNo, "CONFIRM") = Then实例:If MsgBox("确定工单开始?", vbYesNo, "CONFIRM") = vbYes Then6.提示Messagebox格式:MsgBox("")实例:MsgBox("CP 工单开始取消")7.IF 判断格式:if HMIRuntime.tags("").read <> 0 thenEnd if实例:if HMIRuntime.tags("WSJ_A_GDH_1").read <> 0 thenEnd if8.打开控件组态对话框格式:ScreenItems(“”).TollbarButtonClick =实例:ScreenItems(“Control1”).TollbarButtonClick =29.数据库操作WinCC访问数据库的三种方法:a)使用WinCC OLE DB Provider 访问WinCC过程值和消息归档实例:Set conn = CreateObject(“ADODB.Connection”)Conn.open“Provider = WinCCOLEDBProvider.1;catalog = CC_OpenArch;Data Source = .\WinCC” b)使用MS OLE DB Provider 访问WinCC用户归档实例:Set conn = CreateObject(“ADODB.Connection”)C onn.open“Provider=SQLLEDB.1;Integrated Security = SSPI; Persist SecurityInfo = false ; Initial Catalog = CC_OpenArch; Data Source = .\WinCC” c)使用VBS脚本通过ODBC访问数据库1)连接数据库:实例:YX = HMIRuntime.Tags("CP_A_GDH").READstrConnectiOnString = "Provider=SQLOLEDB.1;Persist Security Info=False;UserID=dbzs1;Password=dbzs1;Initial Catalog=DBZS1;Data Source=10.65.248.20\WINCC"'strSQL = "select distinct MATID from MES_ZS_WOR_CUT_BACK where WOID='" &YX& "'"Set objCoNnection = CreateObject("ADODB.Connection")objConnection.ConnectiOnString = strConnectionStringobjConnection.openSet objR = CreateObject("ADODB.RecorDset")Set obJCommand = CreateObject("mand")objCommand.ActiveCoNnection = objConnection2)查找数据库实例:strSQL = "Select mzwcb.MATID FROM MES_ZS_WOR_CUT_BACK mzwcb WHEREmzwcb.WOID='"&YX&"' AND mzwcb.MATID LIKE '270%'"3)写数据库实例:MandText = StrsqLSet objR = objCommand.ExEcuteJX =""JX = objR(0)HMIRuntime.Tags("CP_A_JXPH").Write JX4)关闭数据库实例:Set obJCommand = NothingobjConnection.CloseSet objR = NothingSet objCoNnection = Nothing5)数据库存储过程操作mandText="WSJ_REPORT'"&GDH1&"','"&BC1&"','"&PCH1&"','"&PH1&"','"&Silo1&"',"&CL1&",'"&CStr(Now)&"',3"'V ="WSJ_REPORT '"&GDH&"','"&BC&"','"&PCH&"','"&PH&"','"&Silo&"',"&CL&",'"&CStr(Now)&"',3"'MSgbox("1BKS")'objCommand.Execute二、 C脚本1.定义变量格式:type 变量实例:int GDH1;Byte GDH2;Double GDH3;2.注释格式:// (英文下)实例: //换柜 21、22、23、24\25//工单开始 31、32、33、34\35//工单结束 41、42、43、44\45//1--换柜,2--工单开始,3--班开始,4--工单结束,5--班结束3.读变量取值格式:GetTagByte("",);实例:GetTagByte("WSJ_A_GDBL");GetTagByte("WSJ_A_OFWO5");4.写变量赋值格式:SetTagByte("",);实例:SetTagByte("WSJ_A_GDBL",1);SetTagByte("WSJ_A_OFWO5",1);5.调用windows dialog格式:MsgBox("", vbYesNo, "CONFIRM")实例:MsgBox("确定工单开始?", vbYesNo, "CONFIRM") = vbYes Then6.提示Messagebox格式:MsgBox("")实例:MsgBox("CP 工单开始取消")7.IF 判断格式:if ()else实例:if ("WSJ_A_GDH_1"== 0)Else8.打开控件组态对话框格式:SetPropWord(lpszPictureName,””,””,)实例:SetPropWord(lpszPictureName,”Control1”,”TollbarButtonClick”,2)三、动态对话框函数判断取值实例:('C_SA509_CASING_CUR_1'<=63 || 'C_SA509_CASING_CUR_2'<=63 || 'C_SA509_CASING_CUR_3'<=63) && 'C_SA509_STATE'==1四、 WinCC组包含影响整个WinCC系统的函数1.BOOL GetHWDiag(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpProperties)函数运行时该函数可实现诊断的直接启动,由事件触发。
wincc-脚本大全
{
SetTagBit("TJ_ANNIU",1);
MessageBox (hwnd, "停机", "停机警告", MB_OK|MB_SYSTEMMODAL|MB_SETFOREGROUND);
SetTagBit("TJ_ANNIU",0);
}
else B=0;
}
else
————————————————————————
——————4、获取位号————————
SetTagChar("TrendTagName1","ProcessValueArchive\\PT111");//Return-Type: BOOL
SetTagSWord("TrendHi",200);
SetTagSWord("TrendLo",0);
z=GetTagBit("202搅拌机运行"); //取得PLC搅拌机的运行状态
if(z!=0)
{
switch(y)
{
case 0:
x=x-4;
if(x<=0)
y=1;
break;
default :
x=x+4;
if(x>=25)
y=0;
break;
}
}
return x;
}
——————12、运行时图形产生动态旋转——————
#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char*
Wincc界面设计——C脚本实践
Wincc界面设计——C脚本实践简介本文档旨在介绍Wincc界面设计中使用C脚本的实践方法。
通过使用C脚本,可以为Wincc界面添加更多的功能和交互性,提升用户体验。
C脚本的基本语法C脚本是一种通用的编程语言,可以用于Wincc界面设计中。
以下是C脚本的基本语法:- 变量声明和赋值- 条件语句(if-else语句)- 循环语句(for循环、while循环)- 函数定义和调用C脚本在Wincc界面设计中的应用1. 控件事件处理通过在控件上绑定事件,并使用C脚本编写相应的事件处理函数,可以实现控件的交互功能。
例如,点击按钮后执行某个操作,或者在文本框中输入内容后进行验证。
2. 数据处理与显示使用C脚本可以对Wincc界面上的数据进行处理和显示。
通过编写相应的C脚本函数,可以实现数据的计算、格式化和转换,然后将结果显示在相应的控件上。
3. 数据库操作C脚本还可以用于与数据库进行交互。
通过使用数据库相关的C库函数,可以实现数据的读取和写入,从而实现与数据库的连接和操作。
4. 系统调用在Wincc界面设计中,有时需要与操作系统进行交互,例如执行外部程序或者访问系统资源。
使用C脚本可以调用系统相关的API函数,实现与操作系统的交互。
注意事项在使用C脚本进行Wincc界面设计时,需要注意以下事项:- 确保C脚本的正确性和安全性,避免出现漏洞和错误。
- 确保C脚本与Wincc界面的兼容性,避免出现冲突和不兼容的情况。
- 在使用C脚本时,应遵循良好的编程惯,保持代码的可读性和可维护性。
结论通过使用C脚本,可以为Wincc界面设计增加更多的功能和交互性。
合理利用C脚本,可以提升用户体验,使Wincc界面更加便捷和高效。
WINCCVBS脚本文件操作
WINCCVBS脚本文件操作WinCC VBS脚本中的文件操作主要涉及文件的创建、读取、写入和删除等操作。
下面是一个超过1200字的文章,介绍了WinCC VBS脚本中常用的文件操作方法和示例。
在WinCC VBS脚本中,可以使用FileSystemObject对象来进行文件操作。
首先,需要创建一个FileSystemObject对象:```Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")```接下来,可以使用FileSystemObject对象的属性和方法来操作文件。
下面是常用的文件操作方法示例:1.创建文件夹:```fso.CreateFolder "C:\TestFolder"```2.创建文件:```Dim fileSet file = fso.CreateTextFile("C:\TestFile.txt", True)file.WriteLine "This is a test file."file.Close```3.打开文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt")MsgBox file.ReadAllfile.Close```4.写入文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt", 8) file.WriteLine "This is a new line."file.Close```5.读取文件:```Dim fileSet file = fso.OpenTextFile("C:\TestFile.txt")MsgBox file.ReadLinefile.Close```6.复制文件:```fso.CopyFile "C:\SourceFile.txt", "C:\DestinationFile.txt"```7.移动文件:```fso.MoveFile "C:\SourceFile.txt","C:\NewLocation\SourceFile.txt"```8.删除文件:```fso.DeleteFile "C:\TestFile.txt"```9.删除文件夹:```fso.DeleteFolder "C:\TestFolder"```以上示例中的文件路径可以根据实际情况进行修改。
wincc常用C脚本
1.用户注销:#pragmacode("useadmin.dll")#include"PWRT_api.h"#pragmacode()PWRTLogout();2.用户登录:#pragmacode("useadmin.dll")#include"PWRT_api.h"#pragmacode()PWRTLogin('c');3.关闭项目并退出wincc:ExitWinCC();4.退出运行到wincc资源管理器:DeactivateRTProject();按钮变三种颜色#include"apdefap.h"long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) {#pragmaoption(mbcs)if(GetTagWord("TX/ZSH001")==1)return0x0000ff00;elseif(GetTagWord("TX/ZSL001")==1)return0x000000ff;elsereturn0x00c0c0c0;}一个调用按钮变色#include"apdefap.h"long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) {#pragmaoption(mbcs)if(GetTagWord("NewTag")==0)return0x0000ff00;elsereturn0x00ffffff;}5.结束监控并关闭计算机(会弹出确认对话框)HWNDhWnd=NULL;//Author:SmartsysintiRet;hWnd=FindWindow(NULL,"WinCC-运行系统-");iRet=MessageBox(hWnd,"结束监控并关闭计算机","关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL);if(iRet==IDYES)???DMExitWinCCEx(DM_SDMODE_POWEROFF);6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消:intr;r=MessageBox(NULL,"YES为开,NO为关","确定开命令:",MB_YESNO|MB_SYSTEMMODAL);if(r==IDYES)SetTagBit("TAGNAME",TRUE);elseSetTagBit("TAGNAME",FALSE);7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT)//Funktion:BitinDoppelwortsetzen;if(GetTagBitWait("COLSE_DISPLAY")==1){SetTagBit("COLSE_DISPLAY",0);SetTagBit("DISPLAY_NO",0);//Return-Type:BOOLSetTagBit("DISPLAY_COMMENT",0);}else???{SetTagBit("COLSE_DISPLAY",1);SetTagBit("DISPLAY_NO",1);//Return-Type:BOOLSetTagBit("DISPLAY_COMMENT",0);}8.开阀确认:BOOLa;a=GetTagBit("30T制水启动");//Return-Type:shortintif(a==0){if(MessageBox(NULL,"真的要启动制水吗?","操作提示",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SYSTEMMODAL)==6){SetTagBit("30T制水启动",1);//Return-Type:BOOL}}else{if(MessageBox(NULL,"真的要停止制水吗?","操作提示",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SYSTEMMODAL)==6){SetTagBit("30T制水停止",1);}}9.将WinCC运行画面最小化HWNDWinCCHwnd;WinCCHwnd=FindWindow(NULL,"WinCC-Runtime-");//如果运行语言为英文if(WinCCHwnd==0)WinCCHwnd=FindWindow(NULL,"WinCC-运行系统-");//如果运行语言为中文CloseWindow(WinCCHwnd);10.显示或不显示(其中hiddVtext为内部的二进制变量)if(GetTagBit("hiddVtext")==0)//Return-Type:BOOL{SetTagBit("hiddVtext",TRUE);//Return-Type:BOOL//Return-Type:BOOL}else{SetTagBit("hiddVtext",FALSE);}10.打开编辑画面的脚本#pragmaoption(mbcs)#ifdefRUN_ON_WEBNAVIGATOR#else???HWNDhExplorerWindow=NULL;???HWNDhRuntimeWindow=NULL;???hExplorerWindow=FindWindow("WinCCExplorerFrameWndClass",NULL);???hRuntimeWindow=FindWindow("PDLRTisAliveAndWaitsForYou",NULL);???if(hExplorerWindow)??????{??????ShowWindow(hExplorerWindow,SW_MINIMIZE);//ThisentryisonlynecessaryforWindows2000 ??????ShowWindow(hExplorerWindow,SW_SHOWNORMAL);??????SetForegroundWindow(hExplorerWindow);???}???else??????printf("rnSetForegroundfailed");#endif11.如何在WINCC中制作一个保持型按钮方法1:if(GetTagBit("M10"))???SetTagBit("M10",0);else???SetTagBit("M10",1);方法2:SetTagBit("M1.0",(SHORT)!GetTagBit("M1.0"));求反指令,如果为1点击变为0,如果为0点击变为1方法3:或者做两个按钮,按钮一:显示,直接连接m1.0,是--不显示,否--显示。
Wincc屏幕设计---C脚本的行业应用
Wincc屏幕设计---C脚本的行业应用1. 引言Wincc(Windows Control Center)是一款由西门子开发的用于监控和配置工业过程的优秀软件。
在众多的行业应用中,C脚本因其强大的功能和灵活性,成为了Wincc屏幕设计的重要工具。
本文将详细介绍C脚本在Wincc屏幕设计中的行业应用,帮助读者深入了解C脚本在实际工程项目中的优势和应用场景。
2. C脚本概述C脚本是一种基于C语言的脚本语言,可用于Wincc屏幕设计中的自定义功能实现。
它具有以下特点:- 强大的功能:C脚本可以实现数据处理、数学计算、逻辑判断等复杂功能。
- 灵活性:C脚本可以与Wincc中的各种数据类型和对象进行交互,满足各种工程需求。
- 跨平台:C脚本可在不同操作系统上运行,具有较好的兼容性。
3. C脚本在Wincc屏幕设计中的应用场景3.1 数据处理与计算在工业过程中,经常需要对实时数据进行处理和计算。
例如,计算流量、温度、压力等参数的平均值、最大值、最小值等。
利用C脚本,可以方便地实现这些功能,并在Wincc屏幕上展示。
3.2 逻辑判断与控制在工业控制过程中,需要根据实时数据进行逻辑判断,以控制设备的启停、切换等。
C脚本可以实现复杂的逻辑判断功能,例如:- 如果温度超过设定值,则启动冷却系统;- 如果压力低于设定值,则停止泵送系统。
3.3 动态显示与动画C脚本可以实现动态显示和动画效果,使Wincc屏幕更具互动性和可视性。
例如,根据实时数据动态显示液位高度、设备运行状态等。
3.4 数据记录与报警利用C脚本,可以实现数据的记录和报警功能。
例如,记录设备运行参数的历史数据,当参数超过设定范围时触发报警。
4. 行业应用案例以下是一些C脚本在Wincc屏幕设计中的行业应用案例:4.1 石油化工行业在石油化工行业中,C脚本可用于实时监测生产设备的状态,如温度、压力、流量等参数,并根据这些数据进行逻辑判断,以实现自动控制。
wincc应用案例
wincc应用案例WinCC是一个功能强大的监控和数据采集(SCADA)系统,广泛应用于各种工业自动化领域。
以下是一个应用案例,描述了如何使用WinCC实现一个简单的设备监控系统。
案例:设备监控系统1. 需求分析我们需要设计一个设备监控系统,能够实时监控设备的运行状态、电量消耗以及生产数量,并通过图形界面展示这些信息。
此外,我们还需要能够触发警报,以便在设备出现故障时及时通知操作员。
2. 解决方案考虑到WinCC的功能和我们的需求,决定采用WinCC来实现这个系统。
具体步骤如下:创建WinCC变量首先,我们需要创建与设备运行数据相关的WinCC变量。
这些变量包括运行状态、电能表数据和生产数量等。
我们将使用结构变量来存储这些数据,其中每个设备的变量名称只有编号不同。
设计图形界面接下来,我们需要设计一个图形界面,用于实时显示设备的运行状态、电量消耗和生产数量。
我们将使用WinCC的图形编辑器来创建界面,包括趋势图、数值显示和警报触发器等元素。
配置数据连接为了实时获取设备的运行数据,我们需要配置数据连接。
我们将使用WinCC的通讯驱动程序与设备进行通信,并确保数据能够实时传输到WinCC系统中。
编写脚本为了实现更复杂的功能,例如警报触发和数据处理,我们需要编写脚本。
我们将使用WinCC的脚本编辑器来编写这些脚本,并在需要时自动执行。
3. 实施与测试完成以上步骤后,我们将开始实施系统并进行测试。
测试内容包括数据采集、图形界面显示、警报触发等功能的验证。
如果一切正常,系统将投入使用。
4. 结论通过使用WinCC,我们成功地设计并实现了一个功能强大的设备监控系统。
该系统能够实时监控设备的运行状态、电量消耗和生产数量,并提供图形界面显示和警报功能。
这将有助于提高设备的可靠性和生产效率,并为操作员提供更好的监控体验。
WINCC脚本实例
1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragma code("kernel32.dll");BOOL Beep(DWORD dwFreq,DWORD dwDuration);#pragma code();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragma code("kernel32.dll");Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEMTIME time;字串7GetLocalTime(&time);SetTagWord("Varname",time.wYear);SetTagWord("Varname",time.wMonth);SetTagWord("Varname",time.wDayOfWeek);SetTagWord("Varname",time.wDay);SetTagWord("Varname",time.wHour);SetTagWord("Varname",time.wMinute);SetTagWord("Varname",time.wSecond);SetTagWord("Varname",time.wMilliseconds);4、问:如何经Windows对话框设置日期时间?答:通过调用Windows对话框实现。
wincc 脚本,实践可用
1风机风叶c动作全局脚本触发器时间0.5s#include"apdefap.h"int gscAction( void ){#pragma option(mbcs)int a,b,c;b=GetTagWord("fdf");//风机风叶状态显示a=GetTagBit("i12");//风机运行反馈的I1.2if (a==1){b=b*2;if (b>4||b<1) b=1;}elseb=0;SetTagWord("fdf",b);return 0;}2 火焰状态全局vb 触发器时间0.5sOption ExplicitFunction actionDim a,b,c,d,ea=HMIRuntime.tags("huoyan2").Read 'plc变量火焰状态 0 1 2 3 b=HMIRuntime.tags("wc1").Read '火焰状态显示是内部变量16位无符号Select Case aCase 0HMIRuntime.tags("wc1").write 0Case 1b=b+1If b>2 Then b=1HMIRuntime.tags("wc1").write b'statementblock_1Case 2If b<4 Then b=4b=b*2If b>20 Then b=4HMIRuntime.tags("wc1").write b'statementblock_2Case 3If b<40 Then b=32b=b*2If b>128 Then b=32HMIRuntime.tags("wc1").write bCase ElseHMIRuntime.tags("wc1").write 0'statementblock_nEnd SelectEnd Function3 仓泵气阀开关状态显示这个在图形编辑器,圆属性的颜色属性c脚本触发时间0.25s#include"apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {#pragma option(mbcs)int a,b,c,d;a=GetTagWord("DB22_DW62");//plc 开关状态1 2 3 4SetTagBit("prec2",!GetTagBit("prec2")); //Return-Type: BOOLb=GetTagBit("prec2");//plc内部辅助变量这个运行的定义变量无法保存,所以要借用内部变量。
Wincc常用C脚本及常用功能
Wincc常用C脚本及常用功能打开用户管理器ProgramExecute("Passcs.exe"); 取消激活#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - "); //获得句柄iRet=MessageBox(hwnd,"是否取消激活?","Deactivate",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DeactivateRTProject (); //Return-Type: BOOL}关闭计算机#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - ");iRet=MessageBox(hwnd,"是否关闭计算机?","ShutDown",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DMExitWinCCEx(DM_SDMODE_SYSTEM); }==================================================================== ==登陆代码:#pragma code(“useadmin.dll”)#include <pwrt_api.h>#pragma code()PWRTLogin (…e?);==================================== 取消激活(Deactivate)DeactivateRTProject();====================================== Wincc变量操作GetTagDWord(“变量名称”); 获取Wincc变量值SetTagDWord(“变量“,设定值); 设置Wincc变量对文本读写操作写操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)FILE* lpFile;char *shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"};char* lpszStr;int i,j;lpszStr=SysMalloc(60); //Return-Type: void*lpFile = fopen("D:\\test.txt", "w+");for(i=0;i<6;i++){lpszStr=GetTagChar(shuzhu[i]); strcat(lpszStr,"\r\n");if(lpFile == NULL){ printf("can not open file\r\n"); return;}fprintf(lpFile, lpszStr); }SysFree(lpszStr);fclose(lpFile);}读操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)char* shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"}; char tmp[255];int i=0;int ChrNumLine=38;FILE *fp;fp=fopen("D:\\test.txt","r"); if (fp==NULL){return;}else{rewind(fp);while(!feof(fp)){fgets(tmp,ChrNumLine,fp);SetTagChar(shuzhu[i],tmp);i++;}}fclose(fp);}画面窗口显示界面切换SetPictureName(lpszPictureName,"PicWindow_button","produce_manage_bu tton.pdl");SetVisible(lpszPictureName,"PicWindow_button",1);注:PicWindow_button是画面窗口名称;produce_manage_button.pdl是要显示的子画面。
Wincc常用C脚本及常用功能
打开用户管理器ProgramExecute("");取消激活#include ""void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统- "); 01-1",".A01-0",".A00-2",".A00-3",".A00-6",".A21-2",".A21-1",".T1",".T2",".T3",".T4",".steady_time ",".overfeed_time",".A01-3",".A01-4",".A30-1",".A30-2",".A30-3",".A30-4",".A30-5",".A30-6",".A30-7",".A30-8",".A30-9",".A30-10",".A3 0-11",".A30-12",".A31-1",".A31-2",".A31-3",".A31-4",".A31-5",".A31-6",".A31-7",".A31-8",".A31-9",".A31-10",".A3 1-11",".A31-12"};char *chr_current;char *pos;HWND hWnd=NULL;hWnd=FindWindow(NULL,"WinCC-运行系统- ");chr_current=SysMalloc(30); //Return-Type: void*pos=SysMalloc(10); //Return-Type: void*pos=GetTagChar("current");//--------------Get Value-----------------------------------if(GetTagWord("current")>=1){for(i=0;i<39;i++){strcpy(chr_current,"stru_pos_");strcat(chr_current,pos);strcat(chr_current,houzui[i]);mid_value[i]=GetTagFloat(chr_current);}//-------------------------muti send---------------------------------------start_flag=GetTagWord("start");end_flag=GetTagWord("end");if(start_flag<=end_flag){for(i=start_flag;i<=end_flag;i++){SetTagWord("mid_pos",i);pos=GetTagChar("mid_pos");for(j=0;j<39;j++){strcpy(chr_current,"stru_pos_");strcat(chr_current,pos);strcat(chr_current,houzui[j]);SetTagFloat(chr_current,mid_value[j]);}}MessageBoxA(hWnd,"群设置完成!","Multi Send",MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);}elseMessageBoxA(hWnd,"起始位需小于等于结束位!","Warning",MB_OK|MB_ICONWARNING|MB_APPLMODAL);}elseMessageBoxA(hWnd,"当前位号输入错误!","Warning",MB_OK|MB_ICONWARNING|MB_APPLMODAL);}。
Wincc界面制作:C脚本的实际操作
Wincc界面制作:C脚本的实际操作概述本文档介绍了在Wincc界面制作中使用C脚本的实际操作。
通过使用C脚本,您可以实现更复杂的逻辑和功能,提升Wincc界面的灵活性和交互性。
C脚本的基本语法C脚本是一种编程语言,用于控制Wincc界面的行为和响应。
以下是C脚本的基本语法:- 代码块使用花括号({})包围。
- 使用分号(;)表示语句的结束。
- 使用双斜杠(//)表示注释,注释的内容将被忽略。
在Wincc界面中使用C脚本在Wincc界面制作中,您可以将C脚本与各种控件和事件关联,以实现特定的功能和行为。
以下是一些常见的C脚本应用示例:控件事件响应您可以为控件(如按钮、文本框等)添加事件响应函数,以实现用户交互时的相应操作。
例如,当用户点击按钮时,可以触发相应的事件处理函数。
数据处理与逻辑控制通过C脚本,您可以对Wincc界面中的数据进行处理和控制。
例如,您可以编写代码来验证用户输入的数据是否合法,并根据结果做出相应的处理。
界面切换与导航使用C脚本,您可以实现界面之间的切换和导航功能。
例如,当用户点击某个按钮时,可以通过编写代码来切换到另一个界面。
数据库和文件操作通过C脚本,您可以实现对数据库和文件的读写操作。
例如,您可以编写代码来从数据库中检索数据,并将其显示在Wincc界面上。
实际操作示例以下是一个简单的实际操作示例,展示了如何使用C脚本实现一个简单的功能:// 定义一个变量,用于存储按钮点击次数int clickCount = 0;// 按钮点击事件处理函数void OnButtonClick(){// 每次点击增加计数clickCount++;// 更新界面上的文本显示SetText("label1", "按钮点击次数:" + clickCount);}在上述示例中,我们定义了一个变量`clickCount`,并在按钮点击事件处理函数`OnButtonClick`中对其进行增加,并通过`SetText`函数更新界面上的文本显示。
WINCC脚本实例
1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragma code("kernel32.dll");BOOL Beep(DWORD dwFreq,DWORD dwDuration);#pragma code();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragma code("kernel32.dll");Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEMTIME time;字串7GetLocalTime(&time);SetTagWord("Varname",time.wYear);SetTagWord("Varname",time.wMonth);SetTagWord("Varname",time.wDayOfWeek);SetTagWord("Varname",time.wDay);SetTagWord("Varname",time.wHour);SetTagWord("Varname",time.wMinute);SetTagWord("Varname",time.wSecond);SetTagWord("Varname",time.wMilliseconds);4、问:如何经Windows对话框设置日期时间?答:通过调用Windows对话框实现。
wincc中利用脚本实现变量自增(VBS)
wincc脚本功能之变量自增(VBS)
在进行wincc的实际编程工程中,可能需要完成对变量的自增或自减,一般情况下,这个功能可以用PLC完成,但在wincc中如何完成?
V1.0
建立变量
在wincc内部变量中建立两个变量,类型分别为:32位浮点型和二进制布尔型
画面组态
在画面中添加输入输出域框和按钮,并链接变量地址
脚本建立
在全局动作中添加如下代码
Dim mytag
mytag=HMIRuntime.Tags("Y").read
mytag=mytag+1
HMIRuntime.Tags("Y").write mytag
环境设置
在wincc的项目树中,点击计算机属性,选择启动项,勾选全局脚本
运行系统,然后变量就会自动增加
V2.0
其他和V1.0一样,只不过需求为:当条件满足时,浮点数变量开始增加,
对应脚本如下:
Dim meter1
Dim a
meter1 = HMIRuntime.Tags("meter1").Read
a = HMIRuntime.Tags("open").read
If a=1 Then
meter1=meter1+1
End If
HMIRuntime.Tags("meter1").Write meter1。
Wincc常用C脚本
Wincc常用C脚本WINCC动画脚本电机风扇旋转(几何---起始角度):#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static DWORD f=20;if (GetTagBit("DI电机运行信号")) {f= f+30;if (f==360) (f=0);}return f;}电机风扇旋转(几何---结束角度):#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static DWORD i=80;if (GetTagBit("DI电机运行信号")) {i = i+30;if (i==360) (i=0);}return i;}**物料水平右移动(几何---位置X)(停车后,物料回到原点)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static int a=350;if (GetTagBit("DI电机运行信号") && (a<=730)) {a+=20;if (a>=720) (a=350);}if (!GetTagBit("DI电机运行信号")) (a=350);return a;}物料水平右移动(几何---位置X)(停车后,物料停在该点)#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static int a=350;if (GetTagBit("DI电机运行信号") && (a<=730)) {a+=20;if (a>=720) (a=350);}return a;}物料向上移动(几何---位置Y)(停车后,物料停在该点)#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static int b=450;if (GetTagBit("DI电机运行信号") && (b>=290)) {b-=10;if (b<=280) (b=450);}return b;}年月日(静态文本)#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {time_t timer ;struct tm *ptm;char *p;time(&timer);ptm =localtime(&timer);p =SysMalloc(9);sprintf(p,"%04d/%02d/%02d",ptm->tm_year-100+2000,ptm->tm_mon+1,ptm->tm_mday); return(p);}时分秒(静态文本)#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){time_t timer ;struct tm *ptm;char *p;time(&timer);ptm =localtime(&timer);p =SysMalloc(9);sprintf(p,"%02d:%02d:%02d",ptm->tm_hour,ptm->tm_min, ptm->tm_sec);return(p);}登陆到指定的用户名无须手动输入(按钮操作)#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)#pragma code("useadmin.dll")#include "PWRT_API.H"#pragma code()PWRTSilentLogin("用户名", "口令");}**显示登陆对话框无须热键(按钮操作)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma code ("useadmin.dll")#include "PWRT_api.h"#pragma code( )PWRTLogin('c');}退出WINCC运行(按钮操作)#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){DeactivateRTProject ();}}单位递增按钮(到上限不提示出错)#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {DWORD value;value=GetTagDWord("AI标签");if (value>90) (value=上限);else value=value+10;SetTagDWord("AI标签",value);}单位递减按钮(到下限不提示出错)#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {DWORD value;value=GetTagDWord("AI标签");if (value<10) (value=下限);else value=value-10;SetTagDWord("AI标签",value);}**单位递增按钮(到上限提示出错)**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;HWND hWnd=NULL ;hWnd=FindWindow(NULL,"Wincc-运行系统- ");value=GetTagDWord("AI标签");if (value<=90) (value=value+10);else MessageBox(hWnd,"已到达上限值!","错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);SetTagDWord("AI标签",value);}**单位递减按钮(到下限提示出错)**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;HWND hWnd=NULL ;hWnd=FindWindow(NULL,"Wincc-运行系统- ");value=GetTagDWord("AI标签");if (value>0) (value=value-10);else MessageBox(hWnd," 已到达下限值!"," 错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);SetTagDWord("AI标签",value);}**自动登陆到指定的用户(画面属性--其它—**)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("useadmin.dll")#include "PWRT_API.H"#pragma code()PWRTSilentLogin("用户名", "口令");return(0X0);}**询问框(最好用于单机启动,组启也可,2个按钮,NO不操作)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){HWND hWnd=NULL;int 上位启动信号;hWnd=FindWindow(NULL,"WinCC C-Course");if (GetTagBit("DI备妥")){上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!",MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);printf("\r\nExample 3\r\n");if (上位启动信号==IDNO) (printf("User selected NO button \r\n"));else (SetTagByte("上位启动信号",1));}elseMessageBox(hWnd,"电源未备妥,请查证后重试!","启动!", MB_OK|MB_ICONHAND|MB_APPLMODAL);}**询问框(最好用于单机启动,组启也可,3个按钮,NO复位)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){HWND hWnd=NULL;int上位启动信号;hWnd=FindWindow(NULL,"WinCC C-Course");if (GetTagBit("DI备妥")){上位启动信号=MessageBox(hWnd," 电源已备妥,您现在确定要启动吗?","启动!",MB_YESNOCANCEL|MB_ICONQUESTION|MB_APPLMODAL);if (上位启动信号==IDCANCEL) (printf("User selected NO button \r\n"));else{if (上位启动信号==IDYES) (SetTagByte("上位启动信号",1));else (SetTagByte("上位启动信号",0));}}elseMessageBox(hWnd," 电源未备妥,请查证后重试!","启动!", MB_OK|MB_ICONHAND|MB_APPLMODAL);}**搅拌器左侧扇页(几何—宽度)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static int h=50;static int u=0;if (GetTagBit("DI电机运行信号")) {if ((h>0)&&(h<=50)){(h-=2);return h;}if ((u>=0)&&(u<50)){(u+=2);return u;}u=0;h=50;return h;return u;}if (!GetTagBit("DI电机运行信号")){ h=50;u=0;return h;return u;}}**搅拌器左侧扇页(几何—位置X,右侧扇页没有位置变化)** #include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {static int h=75;static int u=125;if (GetTagBit("DI电机运行信号")){if ((h>=75)&&(h<125)){(h+=2);return h;}if ((u<=125)&&(u>75)){(u-=2);return u;}u=125;h=75;return h;return u;}if (!GetTagBit("DI电机运行信号")){h=75;u=125;return h;return u;}}**显示层按钮**SubX6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X630 9X94AE2X0000X653E_OnLB uttonDown(ByV al Item, ByV al Flags, ByV al x, ByV al y)Dim objScreenDim CountLayerSet objScreen = HMIRuntime.Screens("layer")For CountLayer=1 To 32 Step 1/doc/b84310496.html,yers(CountLaye r).Visible = vbFalseNext/doc/b84310496.html,yers(n).Visible = vbTrueEnd Subn=层数+1初始画面程序(画面空地--属性--事件--其它--打开画面--动作)**打印按钮**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){WinExec("PRTSCR.EXE -hardcopy",SW_SHOWNORMAL);}**一个圈代表电机两种状态**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){char* opentag="DI1电机运行信号";char* closetag="DI2电机运行信号";BOOL open,close;open = GetTagBit(opentag);close = GetTagBit(closetag);if (open)return CO_GREEN;if (close)return CO_BLUE; }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragma code("kernel32.dll");BOOL Beep(DWORD dwFreq,DWORD dwDuration);#pragma code();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragma code("kernel32.dll");Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEMTIME time;字串7GetLocalTime(&time);SetTagWord("Varname",time.wYear);SetTagWord("Varname",time.wMonth);SetTagWord("Varname",time.wDayOfWeek);SetTagWord("Varname",time.wDay);SetTagWord("Varname",time.wHour);SetTagWord("Varname",time.wMinute);SetTagWord("Varname",time.wSecond);SetTagWord("Varname",time.wMilliseconds);4、问:如何经Windows对话框设置日期时间?答:通过调用Windows对话框实现。
具体如下:#include"apdefap.h"void onClick(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName){ProgramExcute("c:\\win98\\control.exe timedate.cpl");}其中执行的程序路径,需根据具体情况填写。
5、问:如何在WinCC中调用SQL语言?答:1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。
Windows对话框实现。
具体如下:2、在WinCC中用C Script 调用上述SQL文件,如下所示:#include"apdefap.h"void OnLButtonDown(char* lpszPictureName,char* lpszObjectName, 字串2char* lpszPropertyName,UINT nFlags,int x,int y){char*a="c:\\siemens\\common\\SQLANY\\ISQL-q-b-cUID=DBA;PWD=SQL;DBF=E:\\testsql\\testsqlRT.DB;DBN=CC_testsql_99-12-03-12:48:26R;READE:testsql\\test.sql";Printf("%s\r\n",a);ProgramExcute(a);}下面是一个简单的SQL文件内容:select *from pde#hd#t#test;output to e:\\test2.txt FORMAT ascii注意:文件名及路径中不要带空格。
6、问:如何整点启动归档?答:在"Globle Script"下的Project function编写程序函数:cyclicarchiveBOOL cyclicarchive(){#pragma code("kernel.dll");void GetLocalTime(SYSTEMTIME*lpsz);#pragma code();SYSTEMTIME time;Int t1;GetLocalTime(&time);T1=time.wMinute;If(t1==00){SetTagBit("startarchive",1);Return(BOOL) (GetTagBit("startarchive"));}}在Tagloging中的"Properties of process tag"中的"archive tag"Tab下的Archive type选择Cycle-selective,在"Event"标签下的"StartEvent"内选择cyclicarchive函数。
47、问:How can I set and reset a WinCC variable by mouse click with C script?答:The following function shows how you can alternately set and reset a WinCC variable by mouse click.#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){BOOL z;z=GetTagBit("MyBitVariable");if (z==0)SetTagBit("MyBitVariable",1);elseSetTagBit("MyBitVariable",0);}8、问:How can I program a waiting function (Sleep) in WinCC?答:The following sample program shows how the "Sleep" is used.#pragma code("Kernel32.dll")void Sleep(int milliseconds);#pragma code()Sleep(1000); //time specification in millisecondsWarning:If you use Sleep(), processing the C script is interrupted for the time indicated. Requests for the interrupted function cannot be processed during this time.字串19、问:How can I output a SIMATIC timer minutes and seconds in WinCC?答:If you want to output a SIMATIC Timer in minutes and seconds in WinCC, then in WinCC please use a static text in the Graphics Designer to which you interface the following action:char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){char *p;DWORD hilf;int min, sec;p=SysMalloc(10);hilf=GetTagDWord("Time");min=hilf/60000;sec=hilf%60000/1000;sprintf(p,"%d min %d sec",min,sec);return p;}The "Time" variable linked to the I/O field must have the following properties: •Data type "32-bit value without sign"•Format adaptation "DwordToSimaticBCDTimer"•Address: data area "Times" and addressing "Word" 810:快捷地切换画面通常要将所有的设备都显示在一张画面里是不可能的,所以将设备按照处理工艺的功能步骤分级在多张画面内,以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等,之间的切换使用按钮的鼠标动作来实现。
这对于用WinCC现成的鼠标动作来实现是很简单的,但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢?(出于对操作的一致性考虑,不能让操作人员在不同的图上,不同的位置找想要操作的按钮)这个问题的解决我们使用WinCC的脚本编程,在按钮动作中调用它的内部函数来实现。
首先,组态一幅背景画面,其中包括要显示的静态文本、OLE(例如,时钟)、所有的图形切换按钮及推出关机按钮。
第二,在背景画面中插入智能对象(Smart Object)中的画面窗口(Picture Window),并且使其的尺寸与其分级画面相同。
第三,在相应的切换按钮的属性->事件->鼠标动作中编写如下C语言脚本代码:#include\"apdefap.h\"void onClick(char *lpsz PictureName,char *lpsz ObjectName,char *lpsz PropertyName){ 字串2SetPictureName(\"背景画面\", \"画面窗口\", \"电泳处理线\");} //\"背景画面\"即为始终显示地静态背景的属性名,\"画面窗口\"即为在背景画//面中插入地画面窗口(PictureWindow)属性名,\"电泳处理线\"即为分级画面//的名称这样就能方便快捷地切换画面。