Hay zusammen, ich habe ein Programm das ich mit einer Alarmzentrale verbinden über TCP-IP.
connecten kann ich, wird in der Alarmzentrale auch angezeigt, allerdings kann ich einige Meldungen nicht so absetzen wie ich möchte.
Zum Beispiel, soll diese Meldung über TCP-IP geschickt werden.
local $sString1 = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
'<LISA>' & @CRLF & _
@TAB & '<VERSION>5.8</VERSION>' & @CRLF & _
@TAB & '<MEDIUM>12</MEDIUM>' & @CRLF & _
@TAB & '<KANAL>610</KANAL>' & @CRLF & _
@TAB & '<SENDER>' & @IPAddress1 & '</SENDER>' & @CRLF & _
@TAB & '<ENTSTEHUNG>' & _NowDate() & ' ' & _NowTime(3) & 'Uhr</ENTSTEHUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>'&$id&'</Identnummer>'& @CRLF & _
@TAB & @TAB & '<Ereignis>Connect</Ereignis>'& @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>'&$id&'</Identnummer>'& @CRLF & _
@TAB & @TAB & '<Ereignis>ROUTINE</Ereignis>'& @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
'</LISA>
Alles anzeigen
Was er aber nach Programm Start nicht tut.
Und es gibt auch keine Fehlerinterpretation.
Wenn ich nun allerdings den selben String per Button los schicke funktioniert auch nur 1x, kommt dieser in der Alarmzentrale an,
Allerdings so :
<?xml VERSION="1.0" ENCODING="UTF-8"?>
<LISA>
<VERSION>5.8</VERSION>
<MEDIUM>12</MEDIUM>
<KANAL>610</KANAL>
<SENDER>***.**.**.**</SENDER>
<ENTSTEHUNG>04.04.2023 14:02:53UHR</ENTSTEHUNG>
<VERBINDUNGSMELDUNG>
<IDENTNUMMER>1111</IDENTNUMMER>
<EREIGNIS>CONNECT</EREIGNIS>
</VERBINDUNGSMELDUNG>
<VERBINDUNGSMELDUNG>
<IDENTNUMMER>1111</IDENTNUMMER>
<EREIGNIS>ROUTINE</EREIGNIS>
</VERBINDUNGSMELDUNG>
</LISA><?xml VERSION="1.0" ENCODING="UTF-8"?>
Alles anzeigen
statt so :
<?xml VERSION="1.0" ENCODING="UTF-8"?>
<LISA>
<VERSION>5.8</VERSION>
<MEDIUM>12</MEDIUM>
<KANAL>610</KANAL>
<SENDER>***.**.**.**</SENDER>
<ENTSTEHUNG>04.04.2023 14:02:53UHR</ENTSTEHUNG>
<VERBINDUNGSMELDUNG>
<IDENTNUMMER>1111</IDENTNUMMER>
<EREIGNIS>CONNECT</EREIGNIS>
</VERBINDUNGSMELDUNG>
<VERBINDUNGSMELDUNG>
<IDENTNUMMER>1111</IDENTNUMMER>
<EREIGNIS>ROUTINE</EREIGNIS>
</VERBINDUNGSMELDUNG>
</LISA>
Alles anzeigen
Ist es möglich das ich mein gesendeten String irgendwie mit einer TCP-Funktion abschließen muss?
Ohne die Verbindung zum Server zu kappen.
Habe das Gefühl das er mit jedem String den alten String erweitert, da bin ich mir aber nicht sicher.
mein bisheriger Code :
Global $LisaIP, $LisaPORT, $socket
TCP_connect($socket, '1111') ;steht am Anfang des Scripts
testmeldung_xml() ; wird durch einen Button aktiviert.
TCP_Disconnect($id = '1111') ; soll nur aktiviert werden wenn Verbindungschließen oder beenden gedrückt wird.
Func TCP_connect(ByRef $socket, $id = '')
TCPStartup()
$socket = TCPConnect($LisaIP, $LisaPORT)
If $socket = -1 Then
MsgBox(0, "Error", "Unable to connect to server.")
Return
Else
Sleep(3000)
Local $sString = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
'<LISA>' & @CRLF & _
@TAB & '<VERSION>5.8</VERSION>' & @CRLF & _
@TAB & '<MEDIUM>12</MEDIUM>' & @CRLF & _
@TAB & '<KANAL>610</KANAL>' & @CRLF & _
@TAB & '<SENDER>' & @IPAddress1 & '</SENDER>' & @CRLF & _
@TAB & '<ENTSTEHUNG>' & _NowDate() & ' ' & _NowTime(3) & 'Uhr</ENTSTEHUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>' & $id & '</Identnummer>' & @CRLF & _
@TAB & @TAB & '<Ereignis>Connect</Ereignis>' & @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>' & $id & '</Identnummer>' & @CRLF & _
@TAB & @TAB & '<Ereignis>ROUTINE</Ereignis>' & @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
'</LISA>'
TCPsend_($sString)
ConsoleWrite(sString & @CRLF)
EndIf
EndFunc ;==>TCP_connect
Func testmeldung_xml()
Local $idroutine = InputBox('Routine Test', 'Trage die ID mit der dem Endgerät IP-XML ein.')
Local $sString = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
'<LISA>' & @CRLF & _
@TAB & '<VERSION>5.8</VERSION>' & @CRLF & _
@TAB & '<MEDIUM>12</MEDIUM>' & @CRLF & _
@TAB & '<KANAL>610</KANAL>' & @CRLF & _
@TAB & '<SENDER>' & @IPAddress1 & '</SENDER>' & @CRLF & _
@TAB & '<ENTSTEHUNG>' & _NowDate() & ' ' & _NowTime(3) & 'Uhr</ENTSTEHUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>' & $idroutine & '</Identnummer>' & @CRLF & _
@TAB & @TAB & '<Ereignis>Connect</Ereignis>' & @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>' & $idroutine & '</Identnummer>' & @CRLF & _
@TAB & @TAB & '<Ereignis>ROUTINE</Ereignis>' & @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
'</LISA>'
Local $aXMLTESTDATA[1] = [$sString]
For $i = 0 To UBound($aXMLTESTDATA) - 1 Step 1
Sleep(250)
If $aXMLTESTDATA[$i] = '' Then ContinueLoop
TCPsend_($aXMLTESTDATA[$i])
Next
EndFunc ;==>testmeldung_xml
Func TCPsend_($sString)
TCPSend($socket, $sString)
ConsoleWrite($sString & @CRLF)
EndFunc ;==>TCPsend_
Func TCP_Disconnect($id = '') ; soll nur bei Exitbtn greifen.
Local $sString = '<?xml version="1.0" encoding="utf-8"?>' & @CRLF & _
'<LISA>' & @CRLF & _
@TAB & '<VERSION>5.8</VERSION>' & @CRLF & _
@TAB & '<MEDIUM>12</MEDIUM>' & @CRLF & _
@TAB & '<KANAL>610</KANAL>' & @CRLF & _
@TAB & '<SENDER>' & @IPAddress1 & '</SENDER>' & @CRLF & _
@TAB & '<ENTSTEHUNG>' & _NowDate() & ' ' & _NowTime(3) & 'Uhr</ENTSTEHUNG>' & @CRLF & _
@TAB & '<VERBINDUNGSMELDUNG>' & @CRLF & _
@TAB & @TAB & '<Identnummer>' & $id & '</Identnummer>' & @CRLF & _
@TAB & @TAB & '<Ereignis>Disconnect</Ereignis>' & @CRLF & _
@TAB & '</VERBINDUNGSMELDUNG>' & @CRLF & _
'</LISA>'
TCPsend_($sString)
TCPCloseSocket($socket)
TCPShutdown()
EndFunc ;==>TCP_Disconnect
Alles anzeigen
Ich habe die GUI im Code weggelassen, mich interessiert nur ob der Aufbau richtig wäre oder ob ich grundlegend etwas falsches mit TCP mache, da ich davor noch nie mit gearbeitet habe.
Sobald mein Programm/Script geöffnet wurde zeigt es in der Leitstelle an das mein Programm per IP verbunden ist sobald ich es schließe wird gezeigt das mein Programm ausgefallen ist.
Also habe ich ja eine Verbindung wärend mein Programm läuft aber warum kann ich dann nicht mehrere Meldungen hinter einander absetzten erst nach Neustart des Scripts/programmes funktioniert es wieder.
Deswegen glaube ich das TCPSend bei einer bestehenden Verbindung einfach den letzten geschickten String erweitert, ich kann mir auch nicht erklären warum er die Meldung dann so beendet: </LISA><?xml VERSION="1.0" ENCODING="UTF-8"?>
hoffe ihr seit schlauer als ich und könnt mir dabei helfen.
Gruß Mojoe