用wincc实现上位调度系统

现需用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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日
下一篇 2019年6月11日

相关推荐