Hej! Jag försöker lösa en sak med en timer. Det är så att timern ligger och kollar om en variabel har ett värde. Har timern fått ett värde så ska den skriva ut det värdets text i textboxen. Skriver du += så ökas strängen på varje gång den körs. Om du i stället skriver textbox1.text = .... så kommer du inte att öka på textsträngen. Jo det förstår jag. Men det är ju så att ajg har flera stycken variabler som ska skrivas ut i samma textbox när de får värde. Antingen nej. funkar inte. får bara ut första värdet. drift1 alltså. och det upprepas precis som innan. så här: Förutom att du nog bör fundera på lite mer kodestetiska detaljer (kanske lägga hela "GetINI"-harangen i en "GetAlarm"-funktion istället), så borde din lösning bara vara: jag vet att det är ltie onödigt skrivet just nu. Men jag försöker främst bara lösa problemet och först sen snygga till det. Men såg att jag glömt ta bort plusset där. så nu fungerar det. Men som du säger så när jag itne har något larm så töms ju inte textboxen helt. utan skriver ut en nolla. Vad beror det på? När vi ändå håller på. Hur gör jag så att jag bryter raden efter varje variabels text som skrivs ut? Ingen bra lösning så som jg har nu för om några har larm men vissa inte så blir det ju bara ett "hål" istället. bryter ju rad i alla fall. <b>>Men jag försöker främst bara lösa problemet och först sen snygga till det.</b> ok! jag förstår hur du menar. ska testa detta. Några saker jag undrar över är dock hur jag skriver GetAlarmString() och AnyAlarm() Vad är "GetINI"? getINI? jo det är ju så att jag har en inifil som jag hämtar texter ifrån som är knutna till en siffra. Genom getINI hämtar jag texten helt enkelt. Dim AnyPrevious = False får: Object reference not set to an instance of an object. ---> System.NullReferenceException: Object reference not set to an instance of an object. Joel, jag menar inget illa, men du kanske borde kolla på lite mer grundläggande grejer, eller åtminstone ta ett steg tillbaka och fundera på exakt vad din kod ska göra. Träna lite mer på debuggning. jag tar inte illa upp. Men jag vet precis hur det ska fungera. Jag råkar bara ha bristande kunnighet i .net Det jag menar med "exakt hur det ska funka" är mer på nivån "vilka funktioner ska finnas, vad ska de göra". Nu får jag vissa sker att fungera. när jag skriver som koden nedan. <code> Nu du! NU fungerar det faktistk! Jag gjorde om så som du sa och sen flyttade jag nerProblem med timer!
Hur kan jag göra för att texten inte ska skrivas ut igen varje gång timern startas om?
Jag antar att det beror på att jag skriver så här med ett plustecken:
textbox.Text += GetINI(HMI_Drift, "driftVarde", VarDrift, "")
+ tecknet skriver jag bara för att jag har flera variabler som hämtar värden till samma textbox.
Har någon en fundering på hur man kan göra?
mycket tacksam för hjälp!Sv: Problem med timer!
Sv:Problem med timer!
typ:
textbox.Text += GetINI(HMI_Drift1, "driftVarde1", VarDrift1, "")
textbox.Text += GetINI(HMI_Drift2, "driftVarde2", VarDrift2, "")
textbox.Text += GetINI(HMI_Drift3, "driftVarde3", VarDrift3, "")
textbox.Text += GetINI(HMI_Drift4, "driftVarde4", VarDrift4, "")
och då fungerar det inte. Har du ett bra exempel på hur man kan skriva?Sv: Problem med timer!
textbox.Text = GetINI(HMI_Drift1, "driftVarde1", VarDrift1, "")
textbox.Text += GetINI(HMI_Drift2, "driftVarde2", VarDrift2, "")
textbox.Text += GetINI(HMI_Drift3, "driftVarde3", VarDrift3, "")
textbox.Text += GetINI(HMI_Drift4, "driftVarde4", VarDrift4, "")
eller
textbox.Text = GetINI(HMI_Drift1, "driftVarde1", VarDrift1, "") _
+ GetINI(HMI_Drift2, "driftVarde2", VarDrift2, "") _
+ GetINI(HMI_Drift3, "driftVarde3", VarDrift3, "") _
+ GetINI(HMI_Drift4, "driftVarde4", VarDrift4, "")Sv:Problem med timer!
Sv:Problem med timer!
VarKapDriftlarm = TcClientSync.ReadVar(HMI_KAP_Driftlarm)
VarKlossDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_KDS_Driftlarm)
VarKlossDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_KDS_Spiklarm)
VarDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_DS_Driftlarm)
VarDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_DS_Spiklarm)
VarMedmaskinDriftlarm = TcClientSync.ReadVar(HMI_MS_Driftlarm)
VarMedmaskinSpiklarm = TcClientSync.ReadVar(HMI_MS_Spiklarm)
If VarKapDriftlarm Or VarKlossDackmaskinDriftlarm Or VarKlossDackmaskinSpiklarm Or VarDackmaskinDriftlarm Or VarDackmaskinSpiklarm Or VarMedmaskinDriftlarm Or VarMedmaskinSpiklarm > 0 Then
txt_Alarm.Text += GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & vbCrLf + GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "") & vbCrLf
Sv: Problem med timer!
<code>
If VarKapDriftlarm Or VarKlossDackmaskinDriftlarm Or VarKlossDackmaskinSpiklarm Or VarDackmaskinDriftlarm Or VarDackmaskinSpiklarm Or VarMedmaskinDriftlarm Or VarMedmaskinSpiklarm > 0 Then
txt_Alarm.Text = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & VbCrLf + GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & VbCrLf + GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") & VbCrLf + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") & VbCrLf + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") & VbCrLf + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") & VbCrLf + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") & VbCrLf + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "") & VbCrLf
</code>
Sen har du förstås ett problem om inget av larmen sker, för då töms inte texten.Sv:Problem med timer!
Sv:Problem med timer!
Sv: Problem med timer!
Hade du haft en funktion GetAlarmString() så hade nog problemet inte uppstått.
Då hade det ju blivit:
<code>
If VarKapDriftlarm Or VarKlossDackmaskinDriftlarm Or VarKlossDackmaskinSpiklarm Or VarDackmaskinDriftlarm Or VarDackmaskinSpiklarm Or VarMedmaskinDriftlarm Or VarMedmaskinSpiklarm > 0 Then
txt_Alarm.Text += GetAlarmString()
</code>
Och då hade du sett det direkt. Ett tips bara.
Sen är det frågan vad ">0" gör där?
Allra helst hade du velat ha:
<code>
If AnyAlarm() Then
txt_Alarm.Text = GetAlarmString()
</code>
Och lösningen blir då:
If AnyAlarm() Then
txt_Alarm.Text = GetAlarmString()
Else
txt_Alarm.Text = ""
End If
Anledningen till att du får just 0 skulle kunna vara att du använder + och att allt tolkas som tal (även om det känns osannolikt.
<b>>Hur gör jag så att jag bryter raden efter varje variabels text som skrivs ut? Ingen bra lösning så som jg har nu för om några har larm men vissa inte så blir det ju bara ett "hål" istället. bryter ju rad i alla fall.</b>
Det är bl a därför du bör ha det i en separat funktion. Det finns massor av sätt att göra det, snyggast med någon typ av inbyggd funktion, men en ganska ful variant som är enkel och enkel att förstå är något i stil med:
Dim AnyPrevious = False
Dim str1 = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "")
Dim str2 = ...
...
dim str as string
If str1 <> "" then
str = str1
AnyPrevious = True
end if
If str2 <> "" then
if anyprevious then str += vbcrlf
str += str2
AnyPrevious = True
end if
If str3 <> "" then
if anyprevious then str += vbcrlf
str += str3
AnyPrevious = True
end if
...Sv:Problem med timer!
det här blir ju fel:
Public Function GetAlarmString()
GetINI(GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "") & vbCrLf
End Function
jag är inte så duktig på.net ska jag säga. :)
Sv: Problem med timer!
I princip kan ju första steget vara:
Public Function GetAlarmString()
return GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") & vbCrLf + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") & vbCrLf + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "") & vbCrLf
End Function
Sen skulle jag även skriva om den här lite snyggare
Sv:Problem med timer!
vad är str? i:
If str1 <> "" Then
------> Str = str1
AnyPrevious = TrueSv: Problem med timer!
Dim str1 = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "")
Dim str2 = ...
...
dim <b>str</b> as string
If str1 <> "" then
str = str1
AnyPrevious = True
end if
If str2 <> "" then
if anyprevious then str += vbcrlf
str += str2
AnyPrevious = True
end if
If str3 <> "" then
if anyprevious then str += vbcrlf
str += str3
AnyPrevious = True
end if
...Sv:Problem med timer!
så här är min kod, Ser du något fel?:
Public TcClientSync As TCSCRIPTLib.TcScriptSync
Dim VarKapDriftlarm = TcClientSync.ReadVar(HMI_KAP_Driftlarm)
Dim VarKlossDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_KDS_Driftlarm)
Dim VarKlossDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_KDS_Spiklarm)
Dim VarDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_DS_Driftlarm)
Dim VarDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_DS_Spiklarm)
Dim VarMedmaskinDriftlarm = TcClientSync.ReadVar(HMI_MS_Driftlarm)
Dim VarMedmaskinSpiklarm = TcClientSync.ReadVar(HMI_MS_Spiklarm)
Dim AnyPrevious = False
Dim str As String
Dim str1 = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "")
Dim str2 = GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "")
Dim str3 = GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "")
Dim str4 = GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "")
Dim str5 = GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "")
Dim str6 = GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "")
Dim str7 = GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "")
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If str1 <> "" Then
str = str1
AnyPrevious = True
End If
If str2 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str2
AnyPrevious = True
End If
If str3 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str3
AnyPrevious = True
End If
If str4 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str4
AnyPrevious = True
End If
If str5 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str5
AnyPrevious = True
End If
If str6 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str6
AnyPrevious = True
End If
If str7 <> "" Then
If AnyPrevious Then Str += vbCrLf
Str += str7
AnyPrevious = True
End If
If AnyAlarm() Then
txt_Alarm.Text = GetAlarmString()
Else
txt_Alarm.Text = ""
End If
Timer1.Start()
end sub
Public Function GetAlarmString()
Return GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") + GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "")
End Function
Public Function AnyAlarm()
Return VarKapDriftlarm Or VarKlossDackmaskinDriftlarm Or VarKlossDackmaskinSpiklarm Or VarDackmaskinDriftlarm Or VarDackmaskinSpiklarm Or VarMedmaskinDriftlarm Or VarMedmaskinSpiklarm
End Function
Sv: Problem med timer!
Det stämmer nog att den koden du har lagt i början fungerar eftersom det då bara blir klassvariabler som initieras, men det är inte där de bör ligga. Mitt förslag är:
1. Gör en liten enkel funktion GetAlarmString. Den ska returnera den sträng du ska lägga i textboxen. Skippa timer, och testa _bara_ den funktionen. Funktionen ska alltså inte göra något annat, och ingen annanstans ska det finnas någonting som rör den strängen - allt ska ligga i funktionen.
2. När strängen ser ut som den ska kan du skriva in den till textboxen ifrån timern.Sv:Problem med timer!
Som jag förstår det så ska det här forumet hjälpa folk fram till en lösning?
Men dumförklara mig inte.
Jag kan förklara från början helt enkelt.
Jag har en PLC
en inifil
och ett .net program.
när det blir ett larm i plc:n får variablen där en siffra
mitt program ska ligga och kolla om den variablen får ett larm hela tiden. får den det! (det vills äga en siffra) kollar programmet efter den i inifilen och skriver ut siffrans text i en textbox.
det är allt.Sv: Problem med timer!
<b>>när det blir ett larm i plc:n får variablen där en siffra
mitt program ska ligga och kolla om den variablen får ett larm hela tiden.</b>
Ok, och detta hade du ju mer eller mindre löst. Så vi struntar i det nu.
<b>>får den det! (det vills äga en siffra) kollar programmet efter den i inifilen och skriver ut siffrans text i en textbox.
det är allt.</b>
Ok. Då skulle jag börja med att säga:
sub Timer ...
textbox.text = GetAlarmString()
End sub
Function GetAlarmString() As String
return "test"
End Function
Funkar detta som det ska?
Då går vi vidare till ett enda värde:
Function GetAlarmString() As String
Return GetINI(...)
End Function
Bygg sen vidare detta med två värden:
Function GetAlarmString() As String
Return GetINI(...) & GetINI(...)
End Function
Se sen till att de hamnar på olika rader, och att det inte blir tomrum. Detta gör du helt och hållet oberoende av timern. Det är alltså i "GetAlarmString", som allt krafs med "AnyPrevious", alla strängdeklarationer, osv. ska ligga, för det är där vi bygger ihop strängen.Sv:Problem med timer!
det som inte fungerar är radbrytning och uppdatering men jag får ut texten. all variabler efter varandra.
Dim AnyPrevious = False
Dim str As String
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim str4 As String
Dim str5 As String
Dim str6 As String
Dim str7 As String
'Dim VarAmneDriftlarm
Dim VarKapDriftlarm
Dim VarKlossDackmaskinDriftlarm
Dim VarKlossDackmaskinSpiklarm
Dim VarDackmaskinDriftlarm
Dim VarDackmaskinSpiklarm
Dim VarMedmaskinDriftlarm
Dim VarMedmaskinSpiklarm
'Dim VarUttransportDriftlarm
Public Function GetAlarmString()
If str1 <> "" Then
str = str1
AnyPrevious = True
End If
If str2 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str2
AnyPrevious = True
End If
If str3 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str3
AnyPrevious = True
End If
If str4 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str4
AnyPrevious = True
End If
If str5 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str5
AnyPrevious = True
End If
If str6 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str6
AnyPrevious = True
End If
If str7 <> "" Then
If AnyPrevious Then str += vbCrLf
str += str7
AnyPrevious = True
End If
Return GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") ' + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "")
End Function
Public Function AnyAlarm()
Return VarKapDriftlarm Or VarKlossDackmaskinDriftlarm Or VarKlossDackmaskinSpiklarm Or VarDackmaskinDriftlarm Or VarDackmaskinSpiklarm Or VarMedmaskinDriftlarm Or VarMedmaskinSpiklarm
End Function
Public Sub FKloss_Dackmaskin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TcClientSync = CreateObject("TcScript.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)
'VarAmneDriftlarm = TcClientSync.ReadVar(HMI_AP_Driftlarm)
VarKapDriftlarm = TcClientSync.ReadVar(HMI_KAP_Driftlarm)
VarKlossDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_KDS_Driftlarm)
VarKlossDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_KDS_Spiklarm)
VarDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_DS_Driftlarm)
VarDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_DS_Spiklarm)
VarMedmaskinDriftlarm = TcClientSync.ReadVar(HMI_MS_Driftlarm)
VarMedmaskinSpiklarm = TcClientSync.ReadVar(HMI_MS_Spiklarm)
'VarUttransportDriftlarm = TcClientSync.ReadVar(HMI_UT_Driftlarm)
str1 = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "")
str2 = GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "")
str3 = GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "")
str4 = GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "")
str5 = GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "")
str6 = GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "")
str7 = GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "")
'Sätter(timerintervall)
Timer1.Interval = 500
Timer1.Start()
Timer2.Interval = 500
Timer2.Start()
End Sub
Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If AnyAlarm() Then
txt_Alarm.Text = GetAlarmString()
Else
txt_Alarm.Text = ""
End If
Timer1.Start()
End Sub
Sv: Problem med timer!
Dim AnyPrevious = False
Dim str As String
Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim str4 As String
Dim str5 As String
Dim str6 As String
Dim str7 As String
'Dim VarAmneDriftlarm
Dim VarKapDriftlarm
Dim VarKlossDackmaskinDriftlarm
Dim VarKlossDackmaskinSpiklarm
Dim VarDackmaskinDriftlarm
Dim VarDackmaskinSpiklarm
Dim VarMedmaskinDriftlarm
Dim VarMedmaskinSpiklarm
'Dim VarUttransportDriftlarm
Public Function GetAlarmString()
If str1 <> "" Then
str = str1
AnyPrevious = True
End If
If str2 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str2
AnyPrevious = True
End If
If str3 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str3
AnyPrevious = True
End If
If str4 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str4
AnyPrevious = True
End If
If str5 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str5
AnyPrevious = True
End If
If str6 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str6
AnyPrevious = True
End If
If str7 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str7
AnyPrevious = True
End If
Return GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "") & GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "") ' + GetINI(HMI_KDS_SpiklarmSokvag, "Spiklarm_Kloss/Dackmaskin", VarKlossDackmaskinSpiklarm, "") + GetINI(HMI_DS_DriftlarmSokvag, "Driftlarm_Dackmaskin", VarDackmaskinDriftlarm, "") + GetINI(HMI_DS_SpiklarmSokvag, "Spiklarm_Dackmaskin", VarDackmaskinSpiklarm, "") + GetINI(HMI_MS_DriftlarmSokvag, "Driftlarm_Medmaskin", VarMedmaskinDriftlarm, "") + GetINI(HMI_MS_SpiklarmSokvag, "Spiklarm_Medmaskin", VarMedmaskinSpiklarm, "")
End Function
</code>
Vad använder du str till här?
Skriv istället något i stil med:
<code>
'Dim VarAmneDriftlarm
Dim VarKapDriftlarm
Dim VarKlossDackmaskinDriftlarm
Dim VarKlossDackmaskinSpiklarm
Dim VarDackmaskinDriftlarm
Dim VarDackmaskinSpiklarm
Dim VarMedmaskinDriftlarm
Dim VarMedmaskinSpiklarm
'Dim VarUttransportDriftlarm
Public Function GetAlarmString()
Dim AnyPrevious = False
Dim str As String = ""
Dim str1 As String = GetINI(HMI_KAP_DriftlarmSokvag, "Driftlarm_Kap", VarKapDriftlarm, "")
Dim str2 As String = GetINI(HMI_KDS_DriftlarmSokvag, "Driftlarm_Kloss/Dackmaskin", VarKlossDackmaskinDriftlarm, "")
Dim str3 As String = ...
Dim str4 As String
Dim str5 As String
Dim str6 As String
Dim str7 As String
If str1 <> "" Then
str = str1
AnyPrevious = True
End If
If str2 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str2
AnyPrevious = True
End If
If str3 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str3
AnyPrevious = True
End If
If str4 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str4
AnyPrevious = True
End If
If str5 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str5
AnyPrevious = True
End If
If str6 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str6
AnyPrevious = True
End If
If str7 <> "" Then
If AnyPrevious Then str += VbCrLf
str += str7
AnyPrevious = True
End If
Return str
End Function
</code>
Här kan du då kontrollera vad det står i varje sträng str1, str2 osv. under tiden du debuggar funktionen, och då ser du i detalj vad som händer.Sv:Problem med timer!
'VarAmneDriftlarm = TcClientSync.ReadVar(HMI_AP_Driftlarm)
VarKapDriftlarm = TcClientSync.ReadVar(HMI_KAP_Driftlarm)
VarKlossDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_KDS_Driftlarm)
VarKlossDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_KDS_Spiklarm)
VarDackmaskinDriftlarm = TcClientSync.ReadVar(HMI_DS_Driftlarm)
VarDackmaskinSpiklarm = TcClientSync.ReadVar(HMI_DS_Spiklarm)
VarMedmaskinDriftlarm = TcClientSync.ReadVar(HMI_MS_Driftlarm)
VarMedmaskinSpiklarm = TcClientSync.ReadVar(HMI_MS_Spiklarm)
'VarUttransportDriftlarm = TcClientSync.ReadVar(HMI_UT_Driftlarm)
som läser från plc till timern och nu fungerar allt perfekt.
Jag får tacka så sjukt mycket för hjälpen! Sorry om jag var irriterande. :)