WinCC Flexible 2005 Indirekte Adressierung

Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal die 2 benutzten Funktionen:

Function Get_Data( Datenbaustein , Start )

Dim offset,temp, bahn

Select Case Datenbaustein
Case 100
bahn="Bahn 4"
Case 101
bahn="Bahn 3"
Case 102
bahn="Bahn 2"
Case 103
bahn="Bahn 1"
Case 104
bahn="Bahn 0"
End Select

bahn=bahn & " Wagen " & Start
SetValue SmartTags("txt_bahn_platte"), bahn

offset=(Start-1)*22
SetValue SmartTags("Index_DB"), Datenbaustein
SetValue SmartTags("Index_DW_Nummer"), offset
SetValue SmartTags("Index_DW_Zugelegt"), offset+2
SetValue SmartTags("Index_DW_Abgegossen"), offset+10
SetValue SmartTags("Index_DW_Gewicht"), offset+18
SetValue SmartTags("Index_DW_Bits"), offset+20
HmiRuntime.Trace SmartTags("Wagen Nummer Index")
Get_Ident (SmartTags("Wagen Nummer Index"))
Get_Data="OK"
ActivateScreen "Dateneingabe Button", 0

---------------------------------------------------------------------------------------

Function Get_Ident( Number )

Dim objConnection
Dim objCommand
Dim objRecordset
Dim strConnectionString
Dim strSQL
Dim lngValue
Dim lngCount
Dim nummer

strConnectionString = "Provider=MSDASQL;DSN=test;UID=;PWD=;"
strSQL="SELECT Gewichte.Ident, Gewichte.Hersteller FROM Gewichte WHERE (((Gewichte.Nummer)= " & Number & "));"
HmiRuntime.Trace strSQL
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objConnection.Open
Set objRecordset = CreateObject("ADODB.Recordset")
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSQL
Set objRecordset = objCommand.Execute

If Not objRecordset.EOF Then
SmartTags("datafound_txt") = objRecordset.Fields.Count
objRecordset.movefirst
SmartTags("intern_Ident")= objRecordset.Fields(0).Value
SmartTags("intern_Hersteller")= objRecordset.Fields(1).Value
Get_Ident="OK"
Else
SmartTags("datafound_txt") = "Datensatz wurde nicht gefunden"
Get_Ident="Fehler"
End If
Set objCommand = Nothing
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing

Das werde ich mal testen Kai

pylades
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, ich würde meinen ursprünglichen Vorschlag noch einmal anbieten wollen - falls keine neuen Erkenntnisse vorliegen.

Schreib doch deinen errechneten Index irgendwo in die SPS und lies ihn über eine andere Variable wieder aus. Wenn du den Wert zurück hast, dann sind für deine anderen Daten die Chancen auch nicht so schlecht.

An deinem Script würde mir im Augenblick keine Option einfallen. Es nutzt ja lediglich den Weg, auf den Kai allerdings erst gekommen ist. Auf die Idee mit der ind. Adressierung bin ich nicht gekommen ...
 
Hier noch einmal zur Verdeutlichung, was ich machen würde:

1. Beim Anklicken der Schaltfläche Wagen_1 wird ein Script Wagen_1 aufgerufen.

2. In dem Script Wagen_1 werden den Variablen Index_DB und Index_DW_Nummer entsprechende Werte zugewiesen.

3. Die Variable Wagen_Nummer_Index holt sich aus der SPS den entsprechenden Wert.

4. Die Variable Wagen_Nummer_Index wird auf eine Wertänderung überwacht. Wenn sich die Variablen Index_DB und Index_DW_Nummer ändern, bekommt die Variable Wagen_Nummer_Index einen neuen Wert.

5. Bei einer Wertänderung der Variablen Wagen_Nummer_Index wird das Script Wagen_Werte_lesen aufgerufen.

6. In dem Script Wagen_Werte_lesen holt sich WinCC flexible alle Werte aus der SPS (Struktur) und über SQL aus dem Access-DB.

Gruß Kai
 

Anhänge

  • RUNTIME_Schalter_Wagen_1.jpg
    RUNTIME_Schalter_Wagen_1.jpg
    520,8 KB · Aufrufe: 18
  • RUNTIME_Script_Wagen_1.jpg
    RUNTIME_Script_Wagen_1.jpg
    542,5 KB · Aufrufe: 22
  • RUNTIME_Variablen_Script.jpg
    RUNTIME_Variablen_Script.jpg
    405,8 KB · Aufrufe: 19
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Wie ist dein DB aufgebaut? Wenn es eine Struktur ist mit lauter gleichen Variablen kannst du dir den kompletten DB in einem Rutsch holen (ist dann auch nur ein SmartTag). Dann kannst du in der Hmi damit weiterarbeiten...
 
Hallo.

Wie ist dein DB aufgebaut? Wenn es eine Struktur ist mit lauter gleichen Variablen kannst du dir den kompletten DB in einem Rutsch holen (ist dann auch nur ein SmartTag). Dann kannst du in der Hmi damit weiterarbeiten...

Ich glaube, das ist nicht Sinn der Übung ...
Außerdem lösst das auch nicht das Problem ...:twisted:
 
Wieso nicht? Das Array holst du dir auf Anforderung. Das Entlastet schon mal deinen Hauptprozess. Und dann weisst du dass deine Daten konsistent sind. Ich hab damit gute Erfahrungen gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So,

gestern kein Bock gehabt zum testen (zu warm) :)

Heute mal den Vorschlag von Kai getestet und es sieht bis dato gut aus *freu*

Schönen Dank euch beiden nochmal

pylades
 
Zurück
Oben