Soweit, so gut...
Hallo Jens,
habe deinen Code um ein Sub ergänzt, Request und Response funktionieren jetzt soweit.
Mein bisheriger Code:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
Allerdings klappt das mit dem Parsen irgendwie noch nicht bzw. kann ich mir die Ergebnisse nicht anzeigen lassen. Habe ich hier irgendwo einen Fehler oder dergleichen. Kann auch gerne mal die zip-Datei anhängen.
Noch kurz eine andere Frage. Um immer aktuelle Werte zu erhalten, wäre es sinnvoll, den Request jede Sekunde abzusenden. Sind hier Probleme bezüglich der Performance zu erwarten, da die Daten ja immer erst gespeichert und wieder geöffent werden. Oder habe ich das falsch verstanden?
Schöne Grüße
Daniel
			
			Hallo Jens,
habe deinen Code um ein Sub ergänzt, Request und Response funktionieren jetzt soweit.
Mein bisheriger Code:
			
				B4X:
			
		
		
		'Activity module
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    
    Dim HC As HttpClient
    Dim PARSER As SaxParser
End Sub
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim TxtList As List
    Dim SPSDataTypes As Map
End Sub
Sub Activity_Create(FirstTime As Boolean)
   
   Activity.LoadLayout("layout1")
    If FirstTime Then
        HC.Initialize("HC")
        
    End If
   PARSER.Initialize 
   'Laden von layout1
   
End Sub
Sub Activity_Resume
Dim Query As String 
Dim PDD_CSV As String
TxtList.Initialize
SPSDataTypes.Initialize 
' ** Initialisiere Vars
Load_Defaults
PDD_CSV = XMLString
Query = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>" & _
"<body><version>1.0</version><client>IMasterPhoenix5_14_05" & _
"</client><client_ver>5.14.0501</client_ver><item_list_size>" & PDD_CSV
Send2SPS(Query,1)
End Sub
Sub Load_Defaults
'SPSDataTypes = File.ReadMap (File.DirDefaultExternal,"pdd.csv")
SPSDataTypes = File.ReadMap (File.DirAssets,"pdd.csv")
' Format eg. ONBOARD_INPUT:WORD
'**Manuelles Laden der MAP
'SPSDataTypes.Put("ONBOARD_INPUT","WORD")
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub HC_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int )
    Log("Error: " & Reason & ", StatusCode: " & StatusCode)
    If Response <> Null Then
        Log(Response.GetString("UTF8"))
        Response.Release
    End If
End Sub
Sub Send2SPS(Query As String, TaskId As Int)
    Dim Req As HttpRequest
    ProgressDialogShow("connecting...")
    Req.InitializePost2("http://192.168.3.150/cgi-bin/ILRReadValues.exe", Query.GetBytes("UTF8"))
    HC.Execute(Req,TaskId)
    ProgressDialogHide
End Sub
Sub HC_ResponseSuccess (Response As HttpResponse, TaskId As Int)
    Dim Res As String
    Dim In As InputStream
   Res = Response.GetString("UTF8")
    Log("Response from server: " & Res)
   'Msgbox(Res,"Result")
    Select TaskId
    Case 1
'        Msgbox(Res,"Result") ' fail = -1
'    Response.GetAsynchronously("XMLResponse", File.OpenOutput(File.DirInternalCache, "Rss.txt", False), True, TaskId)
    Response.GetAsynchronously("XMLResponse", File.OpenOutput(File.DirDefaultExternal , "sps.xml", False), True, TaskId)
   'Response.GetAsynchronously("XMLResponse", File.OpenOutput(File.DirInternalCache , "sps.xml", False), True, TaskId)
'Response von der SPS:
'<?xml version="1.0"encoding="UTF-8"?>
'<body>
'<version>1.0</version>
'<client>IMasterPhoenix5_14_05</client><client_ver>5.14.0501</client_ver>
'<item_list_size>11</item_list_size>
'   <item_list>
      '<i><n>@GV.Input_Analog</n><v>914</v></i>
      '<i><n>@GV.Output_Analog</n><v>1992</v></i>
      '<i><n>@GV.TestOutputs</n><v>0</v></i>
      '<i><n>@GV.PLCMODE_ON</n><v>0</v></i>
      '<i><n>@GV.ONBOARD_INPUT_BIT1</n><v>0</v></i>
      '<i><n>@GV.Test_BOOL</n><v>0</v></i>
      '<i><n>Main.Q_Bool</n><v>0</v></i>
      '<i><n>Main.V001</n><v>0</v></i>
      '<i><n>Main.Test1</n><v>0</v></i>
      '<i><n>Main.V005</n><v>0.000000</v></i>
      '<i><n>Main.V004</n><v></v></i>
   '</item_list>
'</body>
    End Select    
End Sub
Sub XMLResponse_StreamFinish (Success As Boolean, TaskId As Int)
    Dim In As InputStream
    
    If Success = False Then
        Msgbox(LastException.Message, "Error")
        Return
    End If
'   parse the xml file
    In = File.OpenInput(File.DirDefaultExternal, "sps.xml")
   'In = File.OpenInput(File.DirInternalCache, "sps.xml")
    PARSER.Parse(In, "Parser")
    In.Close
End Sub 
Sub Parser_StartElement (Uri As String, Name As String, Attributes As Attributes)
End Sub
Sub Parser_EndElement (Uri As String, Name As String, Text As StringBuilder)
'*** Hole die Anzahl der Werte 
    If PARSER.Parents.IndexOf("body") > -1 Then
        If Name = "item_list_size" Then
            TxtList.add(Text.ToString)
        End If
    End If
'    If PARSER.Parents.IndexOf("item_list") > -1 Then
'        If Name = "b" Then
'        TxtList.add(Text.ToString)
'        End If
'    End If
' *** Abschnitt item_list
' *** wenn das �bergeordnete Element item_list ist
If PARSER.Parents.IndexOf("item_list") > -1 Then
    
' *** wenn das �bergeordnete Element n ist
    If PARSER.Parents.IndexOf("n") > -1 Then
' *** wenn das aktuelle Element b ist
       ' If Name = "b" Then
        '    TxtList.add(Text.ToString)
        'End If
    End If
    
' *** wenn das �bergeordnete Element v ist
    If PARSER.Parents.IndexOf("v") > -1 Then
' *** wenn das aktuelle Element i ist
        If Name = "i" Then
            TxtList.add(Text.ToString)
      End If
End If
    
End If
End Sub
Sub XMLString As String
   
   Dim su As StringUtils
   Dim i, j, ColCount, RowCount, AnzV As Int
   Dim Table, CSV As List
   Dim XMLString As String
   Dim sb As StringBuilder
   Dim sbXML2 As StringBuilder
   
    Table = su.LoadCSV(File.DirAssets, "pdd.csv", ",")
   
   'pdd.csv:
   'Name,Data Type
   '@GV.Input_Analog,WORD
   '@GV.Output_Analog,WORD
   '@GV.TestOutputs,BOOL
   '@GV.PLCMODE_ON,BOOL
   '@GV.ONBOARD_INPUT_BIT1,BOOL
   '@GV.Test_BOOL,BOOL
   'Main.Q_Bool,BOOL
   'Main.V001,BOOL
   'Main.Test1,BOOL
   'Main.V005,REAL
   'Main.V004,String(80)
      
    RowCount=Table.Size
   AnzV = RowCount-1 
    ColCount=2
    Dim MyArray(RowCount, ColCount), aRow() As String
    For i=0 To RowCount-1
        aRow=Table.Get(i)
        For j=0 To ColCount-1
            MyArray(i, j)=aRow(j)
         Next
         'Log(MyArray(i, 0))
    Next
       
   sb.Initialize
   For i = 1 To RowCount-1
    sb.Append("<i><n>").Append(MyArray(i, 0)).Append("</n></i>")
   Next
      
   sbXML2.Initialize
   sbXML2.Append(AnzV).Append("</item_list_size><item_list>").Append(sb).Append("</item_list></body>")
   
   Return sbXML2
End SubAllerdings klappt das mit dem Parsen irgendwie noch nicht bzw. kann ich mir die Ergebnisse nicht anzeigen lassen. Habe ich hier irgendwo einen Fehler oder dergleichen. Kann auch gerne mal die zip-Datei anhängen.
Noch kurz eine andere Frage. Um immer aktuelle Werte zu erhalten, wäre es sinnvoll, den Request jede Sekunde abzusenden. Sind hier Probleme bezüglich der Performance zu erwarten, da die Daten ja immer erst gespeichert und wieder geöffent werden. Oder habe ich das falsch verstanden?
Schöne Grüße
Daniel