现需用wincc v6.2实现上位调度系统,请问各位高手,大体上应该如何实现。调度功能:多个呼叫终端都可以下达任务存储在上位主机(wincc v6.2)中,然后由主机统一分配任务给下面的多个车(每个车上配一个S7-200),如果只有一个车,上位需要存储任务然后根据呼叫任务的时间先后顺序执行,如果有多个车,上位需要将多个呼叫任务分配给多个车执行,并且呼叫任务可以允许人工进行插队,将某些任务提前。请问各位大侠 如何利用wincc来实现,如何利用wincc本身的数据库来实现。不胜感激!万分感谢!急!如有此方面的资料请帮忙发往aww120@sina.com 谢谢!
最佳答案
如果你一定要用Wincc实现的话,结合数据库的功能应该可以实现,首先
1)你要知道数据库的一些操作:
Dim cnn As String
cnn = "Provider=SQLOLEDB.1;Password=3333;Persist Security Info=True;User ID=sa;Initial Catalog=dbuser" & ";Data Source=计算机名\wincc"
Set cc1 = CreateObject("adodb.connection")
cc1.ConnectionString = cnn
cc1.CursorLocation = 3
cc1.Open
Dim rst As Object
Set rst = CreateObject("adodb.recordset")
Dim ssql As String
ssql = "select * from table1 where PriorityLevel>10"
rst.Open ssql, cc1
cc1.Close
Set cc1 = Nothing
Set rst = Nothing
其中的User ID和Password是给数据库建立的一个安全访问的用户,dbuser为自己建立的一个数据,在dbuser可以自己建立数据库表格,比如建立table1存储你的一些调度的数据,需要哪些数据那就你自己定了,但你需要人工进行插队的功能就得建立一个优先级的字段,比如PriorityLevel ;以上为数据库查询,如果要写入数据库把ssql修改:
ssql="insert into table1 values( '字段一的数据','字段二的数据','字段三的数据','字段四的数据')"
2)通过以上可以实现你调度任务写入数据,但你还要查看任务和修改优先的话可以通过MSFlexGrid控件显示所有任务,然后右键修改其优先级:
Dim cnn As String
cnn = "Provider=SQLOLEDB.1;Password=3333;Persist Security Info=True;User ID=sa;Initial Catalog=dbuser" & ";Data Source=计算机名\wincc"
Set cc1 = CreateObject("adodb.connection")
cc1.ConnectionString = cnn
cc1.CursorLocation = 3
cc1.Open
Dim rst As Object
Set rst = CreateObject("adodb.recordset")
Dim ssql As String
ssql = "select * from table1 where PriorityLevel>10"
rst.Open ssql, cc1
If rst.RecordCount = 0 Then
MsgBox "查无结果"
Else
rst.MoveFirst
Do While Not rst.EOF
MSFlexGrid1.AddItem (rst.Fields(0).Value & vbTab & rst.Fields(1).Value & vbTab & rst.Fields(2).Value & vbTab & rst.Fields(3).Value)
rst.MoveNext
Loop
cc1.Close
Set cc1 = Nothing
Set rst = Nothing
3)以上可以在MSFlexGrid控件中显示所有优先级大于10的任务,然后在MSFlexGrid控件中右键修改其优先级:
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim str4 As String
Dim t As Integer
t = MSFlexGrid1.row
MSFlexGrid1.row = t
MSFlexGrid1.col = j
Select Case j
Case 0
str1 = MSFlexGrid1.TextArray(faIndex(MSFlexGrid1, t, j))
Case 1
str2 = MSFlexGrid1.TextArray(faIndex(MSFlexGrid1, t, j))
Case 2
str3 = MSFlexGrid1.TextArray(faIndex(MSFlexGrid1, t, j))
Case 3
str4 = MSFlexGrid1.TextArray(faIndex(MSFlexGrid1, t, j))
End Select
if str1<>"" then '修改数据库,把ssql改过来就可以
ssql="update table1 set PriorityLevel='2' where PriorityLevel=" & str1
end if
这样可以把选中的优先级改为2,但修改时得确定这个优先级不能重复,修改以后刷新(重新查询)一下MSFlexGrid控件;读取MSFlexGrid控件的值时使用了下面一个函数:
Public Function faIndex(GridObj As Object, ByVal row As Integer, ByVal col As Integer) As Long
If row > GridObj.Rows Or row < 0 Or col > GridObj.Cols Or col < 0 Then
MsgBox "对不起,行列设置错误!", vbOKOnly, App.Title
faIndex = -1
Exit Function
End If
faIndex = row * GridObj.Cols + col
End Function
通过以上的脚本,楼主自行整理下应该能实现你的功能。
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc264990.html