Hallo. Ich habe mich gestern mit SQLite beschäftigt. Jetzt schreibe ich Daten, die ich aus einer SPS auslese in eine Datenbank. Nun will ich die Werte wieder ordentlich in einem Trend-Modul anzeigen lassen. Das funktioniert auch so einigermaßen, aber ich will noch ein paar Extras einbauen. Zum Beispiel will ich den Zeitbereich dynamisch ändern können und mit einem Klick auf den Trend soll der aktuelle Wert für diesen Zeitbereich angezeigt werden.
Vllt kann mir jemand helfen, da ich derzeit wenig Zeit habe, um mich darum zu kümmern. Raupi hatte mir schon mal mit einem ähnlichen Projekt geholfen, bei dem ich eine vertikale Scrollbar im Trendfenster eingebaut hatte.
Das ganze ist nicht dringend, ich will es nur irgendwann perfektionieren. Also vielen Dank für jede Anregung und jedes Stück Code
Anbei ist auch eine Test-Datenbank mit einer Stunde Analogwerten.
Spoiler anzeigen
#include <SQLite.au3>
#include <SQLite.dll.au3>
#Include <Date.au3>
#Include <Array.au3>
#Include <Misc.au3>
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]_SQLite_Startup ()
If @error > 0 Then
MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!")
Exit - 1
EndIf
Global $Titel = 'Trend-Viewer'
Global $aResult, $iAnzahl, $hGraphic, $iSchritt, $iMax
Global $hGui = GUICreate($Titel, 300, 300, -1, 20)
GUISetOnEvent(-3, '_Ende')
$hMenu = GUICtrlCreateMenu('&Datenbank')
GUICtrlCreateMenuItem('Ö&ffnen', $hMenu)
GUICtrlSetOnEvent(-1, '_OpenDB')
GUICtrlCreateMenuItem('B&eenden', $hMenu)
GUICtrlSetOnEvent(-1, '_Ende')
$hInfo = GUICtrlCreateMenu('&Info')
GUICtrlCreateMenuItem('Ü&ber', $hInfo)
GUICtrlSetOnEvent(-1, '_Ende')
Global $hLabelInfo = GUICtrlCreateLabel("", 10, 60, 280, 20, 0x201)
[/autoit] [autoit][/autoit] [autoit]Global $hLabelTrend = GUICtrlCreateLabel("Trend wählen", 10, 110, 90, 20, 0x200)
Global $hComboTrend = GUICtrlCreateCombo("", 110, 110, 180, 50, 0x0003)
Global $hLabelZeit = GUICtrlCreateLabel("Zeitbereich wählen", 10, 140, 90, 20, 0x200)
Global $hComboZeit = GUICtrlCreateCombo("", 110, 140, 180, 50, 0x0003)
GUICtrlSetData(-1, "5 min|15 min|30 min|60 min", "5 min")
Global $hBtn = GUICtrlCreateButton('Trend anzeigen', 50, 200, 200, 40)
GUICtrlSetOnEvent(-1, '_OpenTrend')
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()
_OpenDB()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(10000)
WEnd
Func _OpenDB()
Local $sFileDB = FileOpenDialog('Trend-Datenbank auswählen', '', 'Datenbank (*.db)', 3, "", $hGui)
If @error Then Return
Local $dbName = StringTrimLeft($sFileDB, StringInStr($sFileDB, '\', 0, -1))
_SQLite_Close ()
_SQLite_Open ($sFileDB) ; Öffne die gewählte Datenbank
If @error > 0 Then
MsgBox(16, "SQLite Error", "Can't Load Database!")
Return
EndIf
WinSetTitle($Titel, "", $Titel & ' - '&$dbName)
_UpDateTrendCombo()
GUICtrlSetState(-1, $GUI_ENABLE)
_SetDBInfos()
EndFunc
Func _UpDateTrendCombo()
Local $hQuery, $aTrendNames, $sMsg = '|'
_SQlite_Query (-1, "SELECT * FROM TrendDaten;", $hQuery)
_SQLite_FetchNames ($hQuery, $aTrendNames)
_SQLite_QueryFinalize($hQuery)
For $i = 0 To UBound($aTrendNames) -1
$sMsg &= $aTrendNames[$i] & '|'
Next
GUICtrlSetData($hComboTrend, $sMsg, $aTrendNames[0])
EndFunc
Func _SetDBInfos()
Local $aResult, $iRows, $iColumns, $hQuery, $aDatum, $aZeit, $aRows
_SQlite_Query (-1, "SELECT COUNT(*) FROM TrendDaten;", $hQuery)
_SQLite_FetchData($hQuery, $aRows)
_SQLite_QueryFinalize($hQuery)
$iAnzahl = $aRows[0]
GUICtrlSetData($hLabelInfo, $aRows[0] & ' Einträge / ' & StringFormat('%.1f', $aRows[0]/30) & ' Minuten in der Datenbank')
EndFunc
Func _OpenTrend()
If WinGetTitle($Titel) = $Titel Then
MsgBox(48, 'Fehler', 'Bitte wählen Sie zuerst eine Datenbank aus')
Return
EndIf
Local $iRows, $iColumns, $iMaxFaktor, $iStart = 0, $iBereich
GUICtrlSetState($hBtn, $GUI_DISABLE)
$iBereich = StringTrimRight(GUICtrlRead($hComboZeit),4) * 30
_SQLite_GetTable(-1, "SELECT "&GUICtrlRead($hComboTrend)&" FROM TrendDaten WHERE ROWID > "&$iStart&" AND ROWID < "&$iBereich + 1 + $iStart&";", $aResult, $iRows, $iColumns)
$iMax = _ArrayMax($aResult, 1, 2)
$iMaxFaktor = 500/$iMax * 0.99
GUICreate('Trend '& GUICtrlRead($hComboTrend), 956, 540)
GUISetOnEvent(-3, '_CloseTrend')
GUICtrlCreateLabel(GUICtrlRead($hComboTrend), 52, 2, 200, 34, 0x200)
$hGraphic = GUICtrlCreateGraphic(52, 38, 902, 500)
GUICtrlSetOnEvent(-1, '_ShowValue')
GUICtrlSetBkColor(-1, 0xffffff)
;~ GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xFF0000)
$iSchritt = 900/$iBereich
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 1, 497 - $aResult[2]*$iMaxFaktor)
For $i = 3 To $aResult[0]
GUICtrlSetGraphic(-1, $GUI_GR_LINE, ($i-1)*$iSchritt, 497 - $aResult[$i]*$iMaxFaktor)
Next
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000FF)
For $i = 100 To 400 Step 100
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, $i)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 902, $i)
Next
For $i = 100 To 400 Step 100
GUICtrlCreateLabel(StringFormat('%.1f', $iMax/500 * $i), 2, 530 - $i, 50, 16, 0x201)
Next
GUISetState()
GUISetState(@SW_HIDE, $hGui)
EndFunc
Func _ShowValue()
Local $Opt_Save = Opt('MouseCoordMode', 2)
While _IsPressed(01)
ToolTip($aResult[MouseGetPos(0)/$iSchritt])
Sleep(10)
WEnd
ToolTip('')
Opt('MouseCoordMode', $Opt_Save)
EndFunc
Func _CloseTrend()
GUIDelete(@GUI_WinHandle)
GUICtrlSetState($hBtn, $GUI_ENABLE)
GUISetState(@SW_SHOW, $hGui)
EndFunc
Func _Ende()
_SQLite_Close ()
_SQLite_Shutdown ()
Exit
EndFunc