产品质量检验是很多金属深加工行业的一个必要工序。部分或者全部物件都要经过一道试验工序,各项数据符合要求才可以入库。同时试验数据要求进行记录存储,并提供查询、生成报表等。
HwLib团队对于该类型项目合计承接了约有数十个,具有丰富的设计经验,这里找一个比较典型的案例分享下设计及开发流程。
订单信息
如果一个企业的信息化建设比较好,那么订单信息会由企业ERP系统或者MES系统下发到控制系统。订单信息通常会包含客户名称、产品型号、规格、材质等等。如果没有信息化系统,那么只能通过WinCC的界面手工输入。订单信息基本都是字符型数据,直接使用WinCC内部变量即可。
数据记录
数据通常有两种,一种是试验事件记录,另一种是过程数据。试验事件记录用于记录试验的开始时间、结束时间和该次试验对应的订单信息等。过程数据指的试验过程中的压力、流量和温度等数据。数据记录如果没有特殊要求最好采用WinCC的归档数据。如果有额外要求,比如客户需要修改、删除等操作,那么最好自建数据表进行存储。
试验事件我们习惯使用脚本记录,附带订单信息一起,方便后续查询和生成报表等。脚本如下,比较简单,就是开始和结束各插入一条数据。
Dim start,count
Set start=HMIRuntime.Tags("TestStart")
Set count=HMIRuntime.Tags("TestCount")s
tart.Read
count.Read
If start.Value=0 Then
start.Write 1
count.Write count.Value + 1
Dim pc,std,rank,spec,p,kt,user
Set pc=HMIRuntime.Tags("TestPipeCode")
Set std=HMIRuntime.Tags("TestStd")
Set rank=HMIRuntime.Tags("TestRank")
Set spec=HMIRuntime.Tags("TestSpec")
Set p=HMIRuntime.Tags("TestP")
Set kt=HMIRuntime.Tags("TestKT")
Set user=HMIRuntime.Tags("@CurrentUserName")
pc.Read
std.Read
rank.Read
spec.Read
p.Read
kt.Read
user.Read
Dim dbConnection
Dim dbConnectionString
Dim dbSQL
Dim dbCommand
'写数据库
dbSQL = "INSERT INTO PipeModel VALUES (' " & count.Value & " ',' " & count.Value & " ',' " & rank.Value & " ',' " & std.Value & " ',' " & spec.Value & " ',' " & pc.Value & " ',' " & p.Value & " ',' " & kt.Value & " ',' " & Now & " ',' " & user.Value & " ','1','','','','');"
dbConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False; Initial Catalog=WPDB;Data Source=.\WINCC"
Set dbConnection = CreateObject("ADODB.Connection")
dbConnection.ConnectionString = dbConnectionString
dbConnection.Open
Set dbCommand = CreateObject("ADODB.Command")
With dbCommand
.ActiveConnection = dbConnection
.CommandTexT = dbSQL
End With
dbCommand.Execute
Set dbCommand = Nothing
dbConnection.Close
Set dbConnection = Nothing
End If
上面脚本是测试时使用的脚本,还没有包含完整的产品信息。过程数据我们习惯使用归档的历史数据。如果客户需要修改,那么也可以自己归档。修改是需要权限的,并且需要记录原始值和修改后的值等。
数据库设计
因为有些数据是通过脚本记录的。所以我们需要设计表结构。
public class PipeModel
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int ID { get; set; }
public string Order { get; set; } //订单号
public string BatchCode { get; set; } //实验号/唯一
public string SteelCode { get; set; } //材料钢级
public string Std { get; set; } //产品标准
public string Spec { get; set; } //型号规格
public string PipeCode { get; set; } //管号
public double Pressure { get; set; } //压力
public double KPTime { get; set; } //保压时间
public DateTime Timestamp { get; set; }
public string Operator { get; set; }
public string Spare1 { get; set; }
public string Spare2 { get; set; }
public string Spare3 { get; set; }
public string Spare4 { get; set; }
public string Remarks { get; set; }}
数据表通过C#实体类自动生成。方便部署。
数据报表
报表功能是这种类型项目的关键。产品出厂需要附带试验报告。另外一旦产品交付后如果出现质量异议,可以根据订单信息或者试验号进行追溯。
这种报表通常具有多个筛选条件,比如可以根据订单号、客户名称、试验号、材质等条件进行筛选。符合条件的试验数据以总览的方式显示。
如果想查询某个试验的详细数据,可以直接在该记录上双击即可。
如果对数据有特殊要求,也可以进行修改。当然前提需要一定的权限。
点击打印即可生成入库或者交付给客户的最终试验记录单。
最终交付是封装成控件。拖到WinCC上是这样的。
总结
随着工业生产对制造工艺与控制系统越来越高的要求,传统SCADA的监视加控制已经难以满足。如果配合单独的信息化系统的话,开发与运营成本会比较高。这种在传统SCADA上附加高级数据处理的控件是一种低成本的解决方案。