Hej igen! Jag har upptäck ett nytt ini problem som jag inte lyckas lösa. En första tanke är att jag hade nog gjort så att när min applikation startas så läser den in ini-filerna och lagrar dess information i något format som är lämpligt för min applikation för snabb hämtning av data. Troligtvis är informationen i ini-filerna inte större än att det kan hanteras i en lämplig datastruktur i minnet (ingen databas eller likanande) men det är din bedömning.skapa en Larmlista med hjälp av ini-filer!
Det är så att jag ska skapa en sorts larmlista som hämtar texter från olika ini-filer. Jag jobbar mot en plc. så så fort jag får ett larm därifrån (det vill säga en siffra) kollar den i min inifil och skriver ut siffrans text.
Jag kan hämta ett värde i taget från en inifil nu. Men grejen är att jag vill att larmen ska fyllas på efter varandra med det senaste överst och inte rensas förens man trycker "larm reset"
För att försöka förklara det enkelt:
jag har 6 olika inifiler som vi kan säga heter:
iniEtt.ini
iniTvå.ini
iniTre.ini
iniFyra.ini
iniFem.ini
iniSex.ini
varje ini har två rubriker som programmet tittar efter "larmEttDrift" och "LarmEttSpik". "larmTvåDrift" och "LarmTvåSpik" osv osv och plc:n har två variabler "larmEttDriftPLC" och "LarmEttSpikPLC", "larmTvåDriftPLC" och "LarmTvåSpikPLC" som mitt program får siffror från när något blivit fel.
Alltså. ska mitt program hämta texten som stämmer med siffran från plc i ini-filen och fylla en lista när variablerna får nya värden (fel)
Väldigt svårt att förklara. Men skicka gärna frågor såfall.
tyvärr msåte jag hämta från ini så några andra alternativ behövs inte skrivas!!
Så här hämtar jag ett värde från en inifil just nu:
*GETINIFILE.vb*
Imports Microsoft.VisualBasic.Compatibility
Module GetINIFile
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal
lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal
lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Public Function GetINI(ByVal sINIFile As String, ByVal sSection As String, ByVal sKey As String, ByVal
sDefault As String) As String
Dim sTemp As String
Dim nLength As Integer
sTemp = Space$(256)
nLength = GetPrivateProfileString(sSection, sKey, sDefault, sTemp, 255, sINIFile)
GetINI = Left$(sTemp, nLength)
End Function
End Module
*skriver ut i en textbox*
'Driftlarm
VarEttDriftlarm = TcClientSync.ReadVar(larmEttDriftPLC)
txt_Alarm.Text = GetINI("iniEtt.ini", "larmEttDrift", VarEttDriftlarm , "")
Sv: skapa en Larmlista med hjälp av ini-filer!
För att sedan hålla koll på om någon ini fil ändras medan applikationen är igång kan man använda en "FileSystemWatcher" som genererar en händelse till applikationen om en ini-fil förändras och då göra en uppdatering av internt lagrad info.
På detta sätt behöver du inte läsa i ini-filen vid varje larm.
FileSystemWatcher: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher_members.aspx