E' possibile trasmettere segnali a Databoom utilizzando piattaforme per la supervisione ed il controllo industriali facenti uso della tecnologia software HMI/Scada, quale Premium HMI.
L'invio dei dati è implementato attraverso la stesura di uno script Visual Basic.
Riferimenti
Prima di procedere con la scrittura del codice, è necessario aggiungere al proprio script alcuni riferimenti (dal menù Modifica -> Riferimenti):
- Microsoft WinHTTP Services (5.1)
- Microsoft Scripting Runtime (1.0)
ATTENZIONE!
Su Windows CE non è possibile aggiungere riferimenti a DLL esterne, non è quindi possibile aggiungere i riferimenti necessari al funzionamento dello script. E' comunque possibile collegarsi a Databoom utilizzando Premium HMI via UNIQLOUD.
Script VB
Lo script seguente mostra un possibile approccio all'inoltro delle proprie variabili in Premium HMI a Databoom.
Sub Main()
Dim http As WinHttp.WinHttpRequest
Dim UrlToPostTo As String
Dim UrlClockGet As String
Dim sDate As String
Dim lngTimeout As Long
Dim JSONString As String
Dim canConn As Boolean
Dim oAuthToken As String
Dim FSO As FileSystemObject
Dim TS As TextStream
Set FSO = New FileSystemObject
Dim logs<SIGNAL 1>, logs<SIGNAL 2> As String
logs<SIGNAL 1> = "LOGS\<SIGNAL 1>.txt"
logs<SIGNAL 2> = "LOGS\<SIGNAL 2>.txt"
oAuthToken = "Bearer <OAUTH TOKEN DATABOOM>"
UrlClockGet = "https://api.databoom.com/v1/auth/gmtclock/plain"
UrlToPostTo = "https://api.databoom.com/v1/signals/push"
Set TS = FSO.OpenTextFile(logs<SIGNAL 1>, ForAppending, True)
TS.Close
Set TS = FSO.OpenTextFile(logs<SIGNAL 2>, ForAppending, True)
TS.Close
lngTimeout = 30000
canConn = True
Set http = New WinHttp.WinHttpRequest
http.SetTimeouts lngTimeout, lngTimeout, lngTimeout, lngTimeout
http.Open "GET", UrlClockGet, False
http.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.SetRequestHeader "Authorization", oAuthToken
On Error GoTo HandleDateRequest
http.Send
sDate = http.ResponseText
http.Open "POST", UrlToPostTo, False
http.SetRequestHeader "Content-Type", "application/json"
http.SetRequestHeader "Authorization", oAuthToken
Dim <SIGNAL 1>, <SIGNAL 2>
<SIGNAL 1> = GetVariableValue("<SIGNAL 1>")
<SIGNAL 2> = GetVariableValue("<SIGNAL 2>")
JSONString = "{""device"":""<TOKEN DEVICE>"",""date"":" + sDate + ", ""signals"":["
JSONString = JSONString + "{""name"":""<TOKEN SIGNAL 1>"",""value"":"+ <SIGNAL 1> +"},"
JSONString = JSONString + "{""name"":""<TOKEN SIGNAL 2>"",""value"":"+ <SIGNAL 2> +"}"
JSONString = JSONString + "]}"
On Error GoTo HandleFailedPost
http.Send "" + JSONString
If canConn = True Then
Dim bulk As String
Dim emptyBulk As Boolean
emptyBulk = True
bulk = "{""device"":""<TOKEN DEVICE>"",""date"":" + sDate + ", ""signals"":{"
bulk = bulk + " ""<TOKEN SIGNAL 1>"" : {""description"":""<SIGNAL 1>"", ""history"":["
addHistory logs<SIGNAL 1>, bulk
If StrComp(Right(bulk, 1),",") = 0 Then
bulk = Left(bulk, Len(bulk) - 1) + "]},"
emptyBulk = False
Else
bulk = bulk + "]},"
End If
bulk = bulk + " ""<TOKEN SIGNAL 2>"" : {""description"":""<SIGNAL 2>"", ""history"":["
addHistory logs<SIGNAL 2>, bulk
If StrComp(Right(bulk, 1),",") = 0 Then
bulk = Left(bulk, Len(bulk) - 1) + "]}}}"
emptyBulk = False
Else
bulk = bulk + "]}}}"
End If
If emptyBulk = False Then
http.Open "POST", UrlToPostTo, False
http.SetRequestHeader "Content-Type", "application/json"
http.SetRequestHeader "Authorization", oAuthToken
On Error GoTo HandleFailedConn
http.Send "" + bulk
If canConn = True Then
cleanHistory logs<SIGNAL 1>
cleanHistory logs<SIGNAL 2>
End If
End If
End If
Set http = Nothing
Set TS = Nothing
Set FSO = Nothing
Exit Sub
HandleFailedConn:
canConn = False
Resume Next
HandleDateRequest:
canConn = False
sDate = Format(Now, "YYYY-MM-DDTHH:NN:SS")
Resume Next
HandleFailedPost:
canConn = False
Set TS = FSO.OpenTextFile(logs<SIGNAL 1>, ForAppending, True)
TS.Write "{""date"":"+ sDate +",""value"":"+ <SIGNAL 1> +"}" + vbCrLf
TS.Close
Set TS = FSO.OpenTextFile(logs<SIGNAL 2>, ForAppending, True)
TS.Write "{""date"":"+ sDate +",""value"":"+ <SIGNAL 2> +"}" + vbCrLf
TS.Close
JSONString = ""
Resume Next
End Sub
Sub addHistory(ByVal logFile, ByRef bulk)
Dim FSO As FileSystemObject
Dim TS As TextStream
Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile(logFile, ForReading)
Do Until TS.AtEndOfStream
bulk = bulk + TS.ReadLine + ","
Loop
TS.Close
End Sub
Sub cleanHistory(ByVal logFile)
Dim FSO As FileSystemObject
Dim TS As TextStream
Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile(logFile, ForWriting, True)
TS.Write ""
TS.Close
End Sub
Nello script devono essere impostati correttamente i seguenti parametri:
- <
OAUTH TOKEN DATABOOM
> è un token generato in Databoom, nella sezione Impostazioni -> Credenziali. - <SIGNAL 1> e <SIGNAL 2> sono le variabili di Premium HMI che si vogliono inoltrare. Si utilizzano gli stessi valori per nominare anche i file di log. Nell'esempio sono rappresentate due variabili, è possibile aggiungerne altre seguendo la stessa procedura.
- <TOKEN DEVICE> è il token del dispositivo su Databoom.
- <TOKEN SIGNAL 1> e <TOKEN SIGNAL 2> sono i token dei segnali in Databoom. Se i segnali sono già stati creati, <TOKEN SIGNAL #> dev'essere sostituito con il token corrispondente. Al contrario, il token inserito nello script verrà utilizzato per la creazione del segnale sulla piattaforma.
Lo script inoltra i dati ad intervalli regolari, ogni volta che viene richiamato dallo schedulatore. Nel caso non fosse possibile la comunicazione, i dati registrati vengono memorizzati localmente in file di log e verranno inoltrati non appena la connessione sarà ripristinata in un'unica richiesta (bulk).
Schedulatore
Per permettere l'esecuzione permanente dello script è necessario creare un nuovo schedulatore. Nella finestra delle proprietà del nuovo schedulatore andrà infine selezionato "ogni minuto" come intervallo e il proprio script come comando da eseguire.
Configurazione completata!
Una volta completata la procedura, Databoom inizierà a registrare i dati inviati con Premium HMI. Per poter consultare i dati e avere una rappresentazione corretta, seguire le indicazioni in Modifica/validazione di un segnale.
0 Commenti