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.
- 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。