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程序案例
wincc程序案例WinCC (Windows Control Center) 是一个用于工业自动化领域的监控和数据采集 (SCADA) 系统。
下面是一个简单的WinCC程序案例,这个案例展示了如何使用WinCC来监控一个简单的工业过程。
案例背景:假设我们有一个工业烤箱,它有两个温度传感器,分别监测烤箱内部的上下两层温度。
我们想要通过WinCC来实时监控这两个温度,并在温度超过设定值时触发警报。
步骤:1. 创建WinCC项目:打开WinCC软件,创建一个新的项目,并为其命名。
2. 添加变量:在项目资源管理器中,添加两个模拟变量,分别代表烤箱上下两层的温度。
3. 创建图形界面:在图形编辑器中,创建一个简单的界面,包含两个温度显示区域和一个警报显示区域。
4. 配置温度显示区域:将步骤2中添加的温度变量分别绑定到两个温度显示区域。
5. 配置警报显示区域:创建一个标签或文本框用于显示警报信息。
6. 编写脚本:为温度变量编写脚本,当温度超过设定值时,触发警报并将警报信息显示在警报显示区域。
7. 运行和测试:运行WinCC程序,并使用模拟数据测试其功能。
8. 部署:将WinCC程序部署到实际硬件上,连接温度传感器并测试其实际运行效果。
注意事项:在实际应用中,需要确保温度传感器与WinCC系统之间的通信是可靠的。
根据实际需求,可能需要添加更多的功能,例如历史数据记录、趋势分析等。
在编写脚本时,要考虑到系统的实时性和稳定性,避免产生过多的计算或网络负载。
通过这个案例,您可以了解WinCC的基本使用方法和在工业自动化领域的应用。
根据您的具体需求和环境,可能需要进行更多的定制和优化。
WinCC中使用脚本实现报警
WinCC中使⽤脚本实现报警WinCC中使⽤脚本实现报警wincc 2009-01-19 14:30:04 阅读99 评论0 字号:⼤中⼩在6.2⾥,新建⼀个画⾯,两个按钮,⼀个开始播放声⾳(循环播放)按钮,⼀个停⽌播放按钮(没次按钮将循环播放,退出wincc同样在播放),试验成功了,就是第⼀次反应很慢,第⼀次成功报警后,之后在调⽤就快了。
开始播放按钮代码。
#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//循环播放sndPlaySoundA("d:\\致爱丽丝.wav",SND_ASYNC|SND_LOOP);停⽌播放按钮代码。
#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//停⽌播放sndPlaySoundA(NULL,SND_ASYNC); 00000000000000000000000000000000000000000000000000积累—WinCC报警实例wincc 2009-01-19 14:33:28 阅读458 评论0 字号:⼤中⼩这是⽹友给的实际⼯程中的例⼦,以后做项⽬使⽤时可以仔细研究⼀下,再次感谢那位热⼼的⽹友,我贴出来供⼤家学习:在WinCC全局脚本编辑器中完成,达到了语⾔报警的预期效果。
具体步骤如下:A.监控系统所在项⽬创建⽂件夹Voices,所有的语⾳报警⽂件存储在该⽂件夹。
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-脚本大全
{
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教学案例
wincc教学案例WinCC (Windows Control Center) 是一个基于Windows的HMI/SCADA软件,用于监视和控制自动化设备。
以下是一个简单的WinCC教学案例,这个案例将指导你创建一个简单的WinCC项目,包括创建新项目、设计HMI界面、连接PLC以及实现简单的控制逻辑。
案例名称:自动门控制目标:创建一个WinCC项目,用于控制一个自动门的开启和关闭。
步骤 1: 创建新项目1. 打开WinCC软件。
2. 选择“新建项目”并为其命名,例如“自动门控制”。
3. 选择合适的WinCC版本和许可证。
4. 点击“确定”创建项目。
步骤 2: 设计HMI界面1. 在左侧的导航窗口中,双击“图形编辑器”以打开HMI设计器。
2. 在设计器中,创建一个新的画面,为其命名如“门状态”。
3. 使用绘图工具添加两个按钮:“开启门”和“关闭门”。
4. 使用标签工具添加一个状态显示,用于显示门的当前状态(开或关)。
5. 设置按钮和标签的属性,如颜色、字体等。
6. 保存并关闭设计器。
步骤 3: 连接PLC1. 在WinCC项目管理器中,右键点击“变量管理”并选择“添加新的驱动程序”。
2. 选择你的PLC类型(例如:Siemens S7系列)。
3. 配置通信参数,如PLC的IP地址、端口号等。
4. 在“变量管理”中,为PLC中的相关变量创建WinCC变量。
例如:门的当前状态、门控制输出等。
5. 确保WinCC与PLC之间的通信正常。
步骤 4: 实现控制逻辑1. 在左侧导航窗口中,双击“脚本编辑器”以打开VBA编辑器。
2. 为“开启门”按钮编写一个事件处理程序。
当按钮被按下时,设置门控制输出为1(或True),并更新门的状态显示。
3. 为“关闭门”按钮编写一个类似的事件处理程序,设置门控制输出为0(或False),并更新门的状态显示。
4. 保存并关闭脚本编辑器。
步骤 5: 运行和测试项目1. 在WinCC项目管理器中,右键点击“运行系统”并选择“启动”。
wincc 全套脚本总结
} -------------------------------------
——————6、时间同步——————
void SetCpuTime() { #pragma code("kernel32.dll"); void GetLocalTime(SYSTEMTIME *lpst); #pragma code(); SYSTEMTIME time BOOL ret; //printf("Start function SetCpuTime\r\n"); GetLocalTime(&time); ret= SetTagMultiWait("%d%d%d%d%d%d%d",
"data_FLAG",1
) }
-------------------------------------
——————7、对话框调用——————
BOOL A; BOOL B; HWND hwnd=NULL; int RetMsg; A=GetTagBit("TJ_ANNIU"); //Return-Type: BOOL hwnd=FindWindow(NULL,"WinCC-运行系统 - "); if (A==0)
MB_OK|MB_SYSTEMMODAL|MB_SETFOREGROUND); SetTagBit("TJ_ANNIU",0);
} else B=0; } else { } ------------------------------------------
——————8、声音报警——————
#pragma code("Winmm.dll") VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwflag); #pragma code()
WinCC VBS脚本
WinCC 例程分析
脚本系统 VBS脚本 变量读写 调试诊断 例程分析
例程: 变量读写 属性——返回值/Item 线程 描绘曲线
14
IS Sales TAS 2012.02 / TECH Talk / For internal use only.
Thank you!
IS Sales TAS 2012.02 / TECH Talk / For internal use only.
会被加载。
▪ 模块越大,包含的过程越多,模块加载的时间就越长。
▪ 需要加载的模块越多,运行系统的性能越差。
因此,需要合理地组织模块,将相互关联的过程放在同一模块中。 例如:
▪ 可以把用于特定系统或画面的过程放在一个模块中。
▪ 也可以按照功能来构建模块。比如,把具有计算功能的过程放 在一个模块中。
8
IS Sales TAS 2012.02 / TECH Talk / For internal use on有良好的容错性
IS Sales TAS 2012.02 / TECH Talk / For internal use only.
图形编辑器中的VBS
脚本系统 VBS脚本 变量读写 调试诊断 例程分析
VBS可实现类似ANSI C的功能: ▪ 基于对象(VBS)/基于功能(C)
例如,读变量: VBS代码: Tag.Read C代码: WORD value = GetTagWord(“Tag”)
▪ 再次读取变量时,异步读直接将映像区中的数据返回,变量读取的 时间不受AS系统和总线负载的影响。同步读直接从AS系统读取当前 值,比异步读方式要花费更长的时间。
11
IS Sales TAS 2012.02 / TECH Talk / For internal use only.
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-C脚本大全
WINCC C脚本的标准函数 12009-08-06 17:04标准函数该系统包含标准函数。
可以按需要修改这些函数。
此外,还可以自己创建标准函数。
该系统包括一个标准函数集。
一、Alarm - 简短描述Alarm组包含控制WinCC报警控件的函数。
标准函数可用于工具栏中的每一个按钮。
这些函数可用来创建自定义工具栏,例如选择画面,或者定义控件上的设置。
1.void AcknowledgeMessage(DWORD MsgNr)函数,确认消息系统中带编号的消息,该编号被传递为参数。
使用标准函数操作WinCC报警控件的实例{//确认选择的报警记录消息AcknowledgeMessage(GetTagWord("U08i_Msg Nr"));}指定待确认的消息号。
在本例中是从变量读取的。
2.BOOL AXC_OnBtnArcLong(char* lpszPi ctureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在长期归档中。
使用标准函数操作WinCC报警控件的实例{// 跳转到WinCC报警控件中的第一条消息AXC_OnBtnMsgFirst("gs_alarm_00","Contro l1");}AXC_OnBtnMsgFirst函数参数:“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。
Control 1是WinCC报警控件的对象名。
3.BOOL AXC_OnBtnArcShort(char* lpszPic tureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在短期归档中。
使用标准函数操作WinCC报警控件的实例{// 跳转到WinCC报警控件中的第一条消息AXC_OnBtnMsgFirst("gs_alarm_00","Contro l1");}AXC_OnBtnMsgFirst函数参数:“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。
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脚本实例
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常用C脚本
wincc常用C脚本第一篇:wincc常用C脚本.用户注销:#pragma code(“useadmin.dll”)#include “PWRT_api.h” #pragma code()PWRTLogout();2.用户登录:#pragma code(“useadmin.dll”)#include “PWRT_api.h” #pragma code()PWRTLogin('c');3.关闭项目并退出wincc:ExitWinCC();4.退出运行到wincc资源管理器:DeactivateRTProject();按钮变三种颜色#include “apdefap.h” long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){ #pragma option(mbcs)if(GetTagWord(“TX/ZSH001”)==1)return0x0000ff00;else if(GetTagWord(“TX/ZSL001”)==1)return 0x000000ff;else return 0x00c0c0c0;} 一个调用按钮变色#include “apdefap.h” long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){ #pragma option(mbcs)if(GetTagWord(“NewTag”)==0)return0x0000ff00;else return 0x00ffffff;}5.结束监控并关闭计算机(会弹出确认对话框)HWND hWnd = NULL;//Author:Smartsys int iRet;hWnd = FindWindow(NULL,“WinCC-运行系统”);//如果运行语言为英文if(WinCCHwnd==0)WinCCHwnd=FindWindow(NULL,“Win CC-运行系统-”);//如果运行语言为中文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.打开编辑画面的脚本#pragma option(mbcs)#ifdef RUN_ON_WEBNAVIGATOR #elseHWND hExplorerWindow= NULL;HWND hRuntimeWindow= NULL;hExplorerWindow=FindWindow(“WinCCExplorerFrameWndClass”,NULL);hRuntim eWindow=FindWindow(“PDLRTisAliveAndWaitsForYou”,NULL);if(hExplor erWindow){ ShowWindow(hExplorerWindow, SW_MINIMIZE);// This entry is only necessary for Windows 2000 ShowWindow(hExplorerWindow,SW_SHOWNORMAL);SetForegroundWindow(hExplorerWindow) ;} else printf(“rn SetForeground failed”);#endif 11.如何在WINCC中制作一个保持型按钮方法1:if(GetTagBit(“M10”))SetTagBit(“M10”,0);elseSetTagBit(“M10”,1);方法2:SetTagBit(“M1.0”,(SHORT)!GetTagBit(“M1.0”));求反指令,如果为1点击变为0,如果为0点击变为1 方法3:或者做两个按钮,按钮一:显示,直接连接m1.0,是--不显示,否--显示。
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 VBS脚本 文件操作
'myleirong = txtfile.ReadLine
txtfile.SkipLine
myleirong1 = txtfile.ReadLine
'MsgBox myleirong
VBS ttfile.deletefolder
下面是其他一些经常用到的文件操作(注意:可用于所有格式的文件。红字是你的上文脚本已经定义过的)
VBS ttfile.size 返回文件大小
VBS ttfile.type 返回文件类型
请高手赐教!感激ing~ 问题点数:10、回复次数:4
1 楼superdullwolf(超级大笨狼,每天要自强,MVP)
脚本运行时库
处理文件
语言
JScript
VBScript
显示所有语言
有两种主要的文件处理类型:
创建、添加或删除数据,以及读取文件
移动、复制和删除文件
//判断d盘下是否有文件1.txt
VBS pd1=fso.FileExists(d:\1.txt)
if 0=pd1
//没有的话,在d盘下创建一个不可覆盖的文件1.txt
VBS set txtfile=fso.createtextfile("d:\1.txt",false)
//以在末尾写入的方式打开1.txt
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
wincc如何归档备份?Wincc用户归档备份方法
wincc如何归档备份?Wincc用户归档备份方法西门子的WINCC软件供应了便利的变量归档,报警归档备份功能。
但没想到的是Wincc用户归档没有自动备份功能。
配方数据及用户归档存储的报表记录数据确是生产的关键数据,需要定时定期备份。
当然,西门子也供应了标准的接口函数供应导出功能。
是的,一个表一个表的导出功能。
项目变了,配方多了一种重新编辑脚本重新导出。
基于项目实际状况,抛弃了西门子官方供应的方法,选择了其他的方法处理备份数据。
在此,供应三种昌晖仪表使用过的Wincc用户归档备份方法,欢迎大家一起争论!方法一:完整性备份为bak文件借用强大的SQL语法,通过VBS执行SQLCMD指令,执行已经测试完成的T-SQL备份指令。
由于需要使用cmdshell指令,SQL默认为关闭状态需要在T-SQL指令中开启,结束完成后记得关闭,否则SQL处于危急状态。
结合Wincc可以敏捷的定义重复执行的时间。
可以敏捷掌握备份的周期,备份文件的保留方式。
详细看现场实际要求,部分脚本如下:实际测试,备份速度基本是ms级别,截图如下。
方法二:导出表数据使用BCP指令BCP有用工具可以在Microsoft SQL Server实例和用户指定格式的数据文件间大容量复制数据。
使用BCP有用工具可以将大量新行导入SQL Server表,或将表数据导入数据文件。
除非与queryout选项一起使用,否则使用该有用工具不需要了解Transact-SQL学问。
BCP既可以在CMD提示符下运行,也可以在SSMS下执行。
如图所示:导出对应的表的数据,假如表名有固定的标签,可以敏捷的掌握表的数据导出,即使外部新建表单或者新加数据都无需调整脚本。
通过VBS执行SQLCMD,可以敏捷掌握表的名称。
方法三:使用WINCC供应的C指令WinCC ODK uaArchiveExport与uaArchiveImport函数具体的指令有爱好的可以查询西门子的官方关心手册。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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。