Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


påverka valt värde i combobox?

Postades av 2008-10-28 11:19:30 - Joel Alexandersson, i forum vb.net, Tråden har 31 Kommentarer och lästs av 1503 personer

Hej! jag behöver ganska mycket hjälp med att påverka ett valt värde i en combobox. så här är det. jag har en combobox som hämtar värden från en ini-fil. jämte comboboxen har jag två knappar "upp" och "ner". jag vill kunna välja ett värde från ini-filen och sedan påverka den genom att trycka de två olika knapparna "upp" och "ner" Hur får jag knapparna att veta vilket värde jag valt från ini-filen?

mycket tacksam om någon vill hjälpa mig med det här!

/Joel


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-29 11:24:01 - Daniel Eriksson

Tjena.

Har inte testat om det fungerar men gör något i stil med:

Private sub Pilupp()
Try
Combobox.SelectedItem = Combobox.Items(Combobox.SelectedIndex - 1)
Catch ex as exception
End try
End sub


Pilned får du fundera ut själv.

//Danne


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-29 13:19:34 - Joel Alexandersson

nej det här fungerar inte för mig. Hoppar bara ett värde bakåt i comboboxen sen stängs mitt program ner. inga mer idéer?


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-29 13:35:58 - Joel Alexandersson

jag får nog förtydliga vad jag menar lite.

jag har en combobox som hämtar värden från en ini-fil. Det här är en lista på motorer. Jag väljer en motor i listan som jag sedan med en koppling till en plc kör motorn "variabeln" "värdet" upp eller ner med knapparna "upp" och "ner"


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-29 14:08:45 - Daniel Eriksson

Det är lite svårt att veta vad du vill ha hjälp med och vilken kunskap du redan besitter inom vb.net språket. Det är ibland svårare att göra sig förstådd på forumet än problemet man vill få löst i tråden:-)

1. Om det är värdet i comboboxen du vil hämta så kan du göra det via Combobox.SelectedValue, Combobox.SelectedIndex, Combobox.SelectedItem eller Combobox.SelectedText.

2. Om det är hur du skickar värdet till din PLC så måste du gå via en port på PC:n, antagligen SerialPort komponenten.

/Danne


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-29 14:51:15 - Joel Alexandersson

ja det är inte så lätt att beskriva vad jag menar men jag hoppas någon förstår.

OK nu gav du mig lite saker att testa.


skicka värdet till plc är inget problem. Däremot att hämta ett värde från en ini-fil som ser ut så här:

[Motorer]
1=Motor 1
2=Motor 2
3=Motor 3
4=Motor 4


i plc:n har de värdena två variablar. motor1 ett har "motor1Upp" och "motor1Ner" osv osv
när jag väljer motor 1 i min combobox så fattar knapparna upp och ner vilken variabel den ska peka på. och när jag tväljer motor två fattar knapaprna upp och ner att den ska peka på motor2Upp och motor2Ner.Det är precis så jag vill ha det.


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-29 15:33:12 - Daniel Eriksson

Du vill alltså kunna läsa ut en Int från ComboBoxen vilken representar numret för motorn och skicka till din PLC?

Dim splitt as Array = Split(Combobox.SelectedText,"=") 'Hämtar ut motornumret som står i texten "1=Motor 1

Dim Motornummer as Integer = splitt(0)

Private Enum UppNer
Upp
Ner
End Enum

Private sub Knapp(Vart as UppNer)
'Skicka "motor" & Motornummer & Vart.tostring till PLC
End sub


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 08:04:18 - Joel Alexandersson

Får inte ditt exempel att fungera. det stänger bara ner mitt program utan något felmeddelande. Men gör det verkligen det jag vill?

så här:

väljer "motor 1"

knapp "upp" fattar att det är motor1Upp som ska användas

knapp "ner" fattar att det är motor1Ner som ska användas

väljer "motor 2"

knapp "upp" fattar att det är motor2Upp som ska användas

knapp "ner" fattar att det är motor2Ner som ska användas


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-30 11:12:13 - Daniel Eriksson

Det beror på vad du har för värde i din Combobox. Om du vill läsa ut siffran 1 ur värdet "Motor 1" då får du Splitta strängen på ett "mellanslag":

Dim splitt As Array = Split(Combobox.SelectedText," ") 'Hämtar ut motornumret som står i texten "Motor 1"

Dim Motornummer As Integer = splitt(1) 'Hämtar det andra värdet ur Array eftersom 0=Motor 1=1


Om värdet är "1=Motor 1" då får du splitta på "=":

Dim splitt As Array = Split(Combobox.SelectedText,"=") 'Hämtar ut motornumret som står i texten "1=Motor 1"

Dim Motornummer As Integer = splitt(0) 'Hämtar ut första värdet ur Array eftersom 0=1 1=Motor 1


Vilken version av Visual Studio använder du? Du borde kunna fånga ett felmmeddelande i ett:

Try
'Här kör du dina funktioner som kan bli fel och fångas upp av Exception
Catch Ex as Exception
Msgbox(Ex.message)
End Try



Mer kan jag nog inte hjälpa dig med.

/Daniel


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 14:20:12 - Joel Alexandersson

Det borde fungera. men "1=Motor 1=1" kan jag istället för den sista ettan skriva variablen jag har i plc:n som ser ut såhär: ".HMI_MotorNer"? vad skriver jag såfall där du skriver splitt(1)? eller fattar jag fel nu?


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 14:30:58 - Joel Alexandersson

eller..jag kom på nu att ajg har ju två variablar som ska gå till "motor 1" då blev det genast svårare.


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 15:02:41 - Joel Alexandersson

Hur kan jag skriva min inifil då? Så här ser min ini-fil ut nu:

[Motorer_Kap]
0=Ingen motor vald
1=motor 1=.HMI_KapMotor1Upp
2=motor 2=.HMI_KapMotor2Upp

kan ajg hämta det sista värdet ".HMI_KapMotor1Upp" och ".HMI_KapMotor1Ner" från samma på något sätt?


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-30 15:47:36 - Daniel Eriksson

Detta är riktiga baskunskaper... men jag kan försöka förklara den senaste frågan:

Du vill hämta ".HMI.KapMotor1Upp" ur strängen "1=motor 1=.HMI_KapMotor1Upp" så är lämpligast att dela upp strängen med en Split på "=" tecknet. Då kommer du få en Array som innehåller 3 värden:

Dim splitt as Array = Split("1=motor 1=.HMI_KapMotor1Upp","=")

Msgbox(Splitt(0)) 'Meddelandebox med "1" som värde
Msgbox(Splitt(1)) 'Meddelandebox med "motor 1" som värde
Msgbox(Splitt(2)) 'Meddelandebox med ".HMI_KapMotor1Upp" som värde


Kör denna kod och testa dig fram för detta borde vara riktigt enkelt.

/Daniel


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 16:55:22 - Oskar Johansson

Obs, Split med ett t


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-10-30 18:10:26 - Daniel Eriksson

Men det är ju Split med ett t. Jag kan inte deklarera Arrayen med ett t, den får heta Splitt med två t för annars blir det konflikt med Arrayens Split;-)

//Danne


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-30 21:02:49 - Oskar Johansson

Ah, såg inte det. Men då skulle jag föreslå ett annat namn än ett felstavat funktionsnamn ;)


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-10-31 08:20:20 - Joel Alexandersson

Nu tror jag att vi är nära en lösning. Jag förstår ditt script helt nu. Jag är ganska ny på det här så du får ursäkta alla frågor. Hoppas det är ok. :)

Har en liten sak kvar nu bara. Jag tror felet hänger på hur jag hämtar ini.DU kan väl se om du ser några fel på hur jag hämtar? Jag vet att det finns fel jsut nu. På knappen finns det ingen kod som hämtar ini. Jag behöver hjälp med det här.

Här har du min kod:

INI-Fil:

[Motorer_Kap]
0=Ingen motor vald
1=motor 1=.HMI_KapMotor1Upp=.HMI_KapMotor1Ner
2=motor 2=HMI_KapMotor2Upp=.HMI_KapMotor2Ner
3=motor 3=HMI_KapMotor3Upp=.HMI_KapMotor3Ner





        TcClientSync = CreateObject("TcScript.TcScriptSync")
        Call TcClientSync.ConnectTo("", 801)
        Dim objFSO As Scripting.FileSystemObject
        Dim objTxt As Scripting.TextStream
        Dim sLine As String
        objFSO = New Scripting.FileSystemObject
        objTxt = objFSO.OpenTextFile("C:\handkorning.ini")


        If GoToSection(objTxt, "[Motorer_Kap]") Then
            sLine = objTxt.ReadLine
            ComboMotorerKap.Items.Clear()
            Do While Not objTxt.AtEndOfStream And Not (VB.Left(sLine, 1) = "[")
                If sLine3 <> "" Then
                    ComboMotorerKap.Items.Add(VB.Right(sLine, Len(sLine) - InStr(1, sLine, "=", CompareMethod.Text)))
                End If
                sLine = objTxt.ReadLine
            Loop
        End If
    End Sub
    

Private Function GoToSection(ByRef filename As Scripting.TextStream, ByVal ParamArray SecName() As Object) As Boolean
        Dim i As Short
        Dim Data As String

        On Error GoTo errorHandler

        GoToSection = False
        Do While Not filename.AtEndOfStream
            Data = filename.ReadLine
            For i = 0 To UBound(SecName)
                If InStr(1, Data, UCase(SecName(i)), CompareMethod.Text) = 1 Then
                    GoToSection = True
                    Exit Do
                End If
            Next i
        Loop

        Exit Function
errorHandler:
        GoToSection = False
    End Function




'Form

    Dim splitt As Array = Split(ComboMotorerKap.SelectedText, " ")
    Dim HMIMotorUpp As String = splitt(3)
    Dim HMIMotorNer As String = splitt(4) 

    Private Sub cmdMotorUpp_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cmdMotorUpp.MouseDown
            bMotorUpp = CBool(True)
        Call TcClientSync.WriteVar(HMIMotorUpp, bMotorUpp)
    End Sub

    Private Sub cmdMotorUpp_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles cmdMotorUpp.MouseUp
        bMotorUpp = CBool(False)
        Call TcClientSync.WriteVar(HMIMotorUpp, bMotorUpp)
    End Sub



Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-03 09:56:27 - Cecilia Wirén

Jag skulle göra en klass att kapsla in värdena i, du vill antagligen inte att HMI_KAPMotor1Upp skall synas i comboboxen utan bara motor 1.

Public Class Motor
Public Upp As String
Public Ner As String
Private Namn as String

Public Sub New(motor as String, u as String, n as String)
Namn = motor
Upp = u
Ner = n
End Sub

Public Overrides Function ToString() As String
Return Namn
End Function
End Class


När du hämtar datat från ini filen skapar du en instans av klassen och lägger istället in objektet i comboboxen.

Dim s As Array = Split(sLine,"=")
ComboMotorerKap.Items.Add(new Motor(s(1), s(2), s(3) ))

ToString funktionen ser till att det visas nåt trevligt i comboBoxen. När du sen hämtar valt värde men hjälp av ComboMotorerKap.SelectedItem får du tillbaka klassen och kan kolla vad Ner resp. Upp värdet är.

Dim m as motor
m = ComboMotorerKap.SelectedItem
bMotorUpp = CBool(True)
Call TcClientSync.WriteVar(m.Upp, bMotorUpp)


Du behöver alltså inte köra split efter att användaren har valt motor. Hoppas detta hjälper.


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-05 08:56:31 - Joel Alexandersson

Jag år det inte riktigt att fungera. Men ajg förstår precis vad du menar. Det är främst mina kunskaper om hur jag skriver det här som sätter stopp. Har lite frågor:

Vart ska jag skriva det här?


        Dim s As Array = Split(sLine, "=")
        ComboMotorerKap.Items.Add(New Motor(s(1), s(2), s(3)))



får bara felmeddelande vart jag än lägger in det och programmet stängs ner.

---------------------------------

Kan jag lägga den här koden nedan i en module?


Public Class Motor
  Public Upp As String
  Public Ner As String
  Private Namn as String

  Public Sub New(motor as String, u as String, n as String)
    Namn = motor
    Upp = u
    Ner = n
  End Sub

  Public Overrides Function ToString() As String
        Return Namn
  End Function
End Class



----------------------------------------------

kan jag fortfarande hämta inivärdet så här:


    Private Sub fHandkorningKap_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TcClientSync = CreateObject("TcScript.TcScriptSync")
        Call TcClientSync.ConnectTo("", 801)
        Dim objFSO As Scripting.FileSystemObject
        Dim objTxt As Scripting.TextStream
        Dim sLine As String
        objFSO = New Scripting.FileSystemObject
        objTxt = objFSO.OpenTextFile("C:\handkorning.ini")

        If GoToSection(objTxt, "[Motorer_kap]") Then
            sLine = objTxt.ReadLine
            ComboMotorerKap.Items.Clear()
            Do While Not objTxt.AtEndOfStream And Not (VB.Left(sLine, 1) = "[")
                If sLine <> "" Then
                    ComboMotorerKap.Items.Add(VB.Right(sLine, Len(sLine) - InStr(1, sLine, "=", CompareMethod.Text)))
                End If
                sLine = objTxt.ReadLine
            Loop
        End If
    End Sub
    Private Function GoToSection(ByRef filename As Scripting.TextStream, ByVal ParamArray SecName() As Object) As Boolean
        Dim i As Short
        Dim Data As String

        On Error GoTo errorHandler

        GoToSection = False
        Do While Not filename.AtEndOfStream
            Data = filename.ReadLine
            For i = 0 To UBound(SecName)
                If InStr(1, Data, UCase(SecName(i)), CompareMethod.Text) = 1 Then
                    GoToSection = True
                    Exit Do
                End If
            Next i
        Loop
        Exit Function
errorHandler:
        GoToSection = False
    End Function





Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-05 16:43:55 - Cecilia Wirén

Här:

        If GoToSection(objTxt, "[Motorer_Kap]") Then
            sLine = objTxt.ReadLine
            ComboMotorerKap.Items.Clear()
            Do While Not objTxt.AtEndOfStream And Not (VB.Left(sLine, 1) = "[")
                If sLine3 <> "" Then
              -> 'plats för debug
              -> Dim s As Array = Split(sLine, "=")
              -> ComboMotorerKap.Items.Add(New Motor(s(1), s(2), s(3)))
                End If
                sLine = objTxt.ReadLine
            Loop
        End If


Motorklassen kan du lägga i en separat fil eller i samma fil. om du lägger den i samma se till att den inte ligger i den andra klassen (dvs läggen den efter End Class). Dock ej module som är samma sak som en statisk klass vilket vi inte gör här.

Du kan fortsätta hämta inivärdet som du gjorde förut förutsatt att det blev rätt värden som lästes in, vilket det verkade som det vara.
Du kan lägga in följande rad för att kunna kontrollera detta:
system.diagnositic.debug.write(sLine) på 'plats för debug
Du kommer då kunna se varje inläst rad från ini-filen i Output fönstret när du kör i VS. När du sedan kompilerar en Release så försvinner detta från kompilerade koden.


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 07:50:10 - Joel Alexandersson


Det borde fungera. men jag får ett error när jag kör din kod innom "try" som heter "Index was outside the bounds of the aray" Vad betyder det och hur fixar jag det?

        If GoToSection(objTxt, "[Motorer_Kap]") Then
            sLine = objTxt.ReadLine
            ComboMotorerKap.Items.Clear()
            Do While Not objTxt.AtEndOfStream And Not (VB.Left(sLine, 1) = "[")
                If sLine <> "" Then
                    Try
                        'plats för debug
                        Dim s As Array = Split(sLine, "=")
                        ComboMotorerKap.Items.Add(New Motor(s(1), s(2), s(3)))
                    Catch Ex As Exception
                        MsgBox(Ex.Message)
                    End Try
                End If
                sLine = objTxt.ReadLine
            Loop
        End If


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 08:23:13 - Joel Alexandersson

det måste ju ha något med ini-filen att göra. hur den skrivs. Eller vad tror du?


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 08:36:48 - Jan Bulér

Jag har gjort ett lite exempel där jag använt mig av bl a en Motorklass med info om motorn samt en Motorkontroll kalss som sköter styrningen. Det saknas en hel del felhantering och en del andra förreglingar och kontroller som behövs i ett skarpt projekt.

Klasser och filer,
Form1.vb
Motor.vb
MotorController.vb
MotorStatus.vb



Mitt formulär, som består av en ComboBox, Upp-, Ner-, Stopp- och Statusknapp.

Fil: Form1.vb
<code>
Public Class Form1

Private mMotorController As MotorController


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitMotorComboBox()
EnableButtons()
End Sub

'Används för att simulera en inläsning från en inifil
'Skapar ett antal instanser av klassen Motor där varje
'instans innehåller information för en specifik motor
Private Sub InitMotorComboBox()
Dim motor As Motor

motor = New Motor(1, "Motor 1")
MotorComboBox.Items.Add(motor)

motor = New Motor(2, "Motor 2")
MotorComboBox.Items.Add(motor)

motor = New Motor(3, "Motor 3")
MotorComboBox.Items.Add(motor)

motor = New Motor(4, "Motor 4")
MotorComboBox.Items.Add(motor)

MotorComboBox.SelectedIndex = 0

End Sub

'Körs när valet i ComboBoxen förändras
Private Sub MotorComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MotorComboBox.SelectedIndexChanged
Dim motor As Motor
motor = CType(sender, ComboBox).SelectedItem
SetMotorcontrol(motor)
EnableButtons()
End Sub

'Kopplar en motor till en motorkontroller som har hand om
'själva styrningen, tex signaler till PLC
Private Sub SetMotorcontrol(ByVal motor As Motor)
mMotorController = New MotorController(motor)
End Sub


Private Sub EnableButtons()
Dim enabled As Boolean

enabled = MotorComboBox.SelectedIndex >= 0
NerButton.Enabled = enabled
UppButton.Enabled = enabled
StatusRequestButton.Enabled = enabled
End Sub

'Upp-knapp
Private Sub UppButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UppButton.Click
If Not (mMotorController Is Nothing) Then
mMotorController.Upp()
End If
End Sub

'Ner-knapp
Private Sub NerButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NerButton.Click
If Not (mMotorController Is Nothing) Then
mMotorController.Ner()
End If
End Sub

'Stopp-knapp
Private Sub StopButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StopButton.Click
If Not (mMotorController Is Nothing) Then
mMotorController.Stopp()
End If
End Sub

'Visa status
Private Sub StatusRequestButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StatusRequestButton.Click
Dim msg As String
Dim motor As Motor

motor = mMotorController.Motor

msg = String.Format("Motor {0} (id={1}) status = {2}", motor.Beskrivning, motor.MotorId, motor.Status.ToString())

MsgBox(msg)
End Sub
End Class

</code>

Motorklassen
Fil: Motor.vb
<code>
Public Class Motor

'Representerar en motor

Private mBeskrivning As String
Private mStatus As MotorStatus
Private mMotorId As Integer

'Konstruktor, kör när ny instans skapas
Sub New(ByVal motorId As Integer, ByVal beskrivning As String)
mMotorId = motorId
mBeskrivning = beskrivning
End Sub

Public ReadOnly Property MotorId() As Integer
Get
MotorId = mMotorId
End Get
End Property

Public Property Beskrivning() As String
Get
Beskrivning = mBeskrivning
End Get
Set(ByVal value As String)
mBeskrivning = value
End Set
End Property

Public Property Status() As MotorStatus
Get
Status = mStatus
End Get

Set(ByVal value As MotorStatus)
mStatus = value
End Set
End Property

Public Sub Upp()
'Kör motor med mMotorId upp
End Sub

Public Sub Down()
'Kör motor med mMotorId ner
End Sub

'Detta är texten som bl.a. visas i ComboBoxen när en
'instans av klassen motor läggs till i boxen.
Public Overrides Function ToString() As String
ToString = Beskrivning
End Function
End Class
</code>

Motorkontroll klassen
Fil: MotorController.vb
<code>
Public Class MotorController

'Detta är kontrollen som handhar styrningen av motorn

Private mMotor As Motor

Sub New(ByVal motor As Motor)
mMotor = motor

'Här kan t ex en uppkoppling mot PLC ske.
'Uppkopplingen lever så länge MotorControllern lever

Debug.Print("Motor {0} (id={1}) är uppkoplad mot PLC", mMotor.Beskrivning, mMotor.MotorId)

End Sub

'Du kanske vill avläsa motorstatus.
'Om du kör OPC kan du ju läsa av ett event när motorns status ändras
'Skulle kunna se ut ungefär så här

Private Sub MotorStatus_Changed(ByVal status As Integer)
Select Case status
Case 0
mMotor.Status = MotorStatus.Off

Case 1
mMotor.Status = MotorStatus.Running

Case 3
mMotor.Status = MotorStatus.Tripped
End Select
Debug.Print("Motor {0} (id={1}) status ändrad till {2}", mMotor.Beskrivning, mMotor.MotorId, mMotor.Status.ToString())
End Sub

Public ReadOnly Property Motor() As Motor
Get
Motor = mMotor
End Get
End Property


Public Sub Upp()
'Kör motor mMotor upp
'Skicka kommando till PLC för att köra mMotor.MotorId UPP

Debug.Print("Motor {0} (id={1}) körs upp", mMotor.Beskrivning, mMotor.MotorId)

'Simulera status
mMotor.Status = MotorStatus.Running
End Sub

Public Sub Ner()
'Kör motor mMotor ner
'Skicka kommando till PLC för att köra mMotor.MotorId NED

Debug.Print("Motor {0} (id={1}) körs ner", mMotor.Beskrivning, mMotor.MotorId)

'Simulera status
mMotor.Status = MotorStatus.Running
End Sub

Public Sub Stopp()
'Stoppa motor mMotor
'Skicka kommando till PLC för att Stoppa mMotor.MotorId

Debug.Print("Motor {0} (id={1}) Stoppad", mMotor.Beskrivning, mMotor.MotorId)

'Simulera status
mMotor.Status = MotorStatus.Off

End Sub


End Class
</code>

Och en Enum för motorstatus
Fil: MotorStatus.vb
<code>
Public Enum MotorStatus

Off
Running
Tripped
End Enum
</code>



Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-06 08:44:08 - Joel Alexandersson

Men här hämtar du ju inte från en ini-fil vilket är hela grejen för min del då användaren lätt ska kunna gå in i ini-filen och lägga till en ny motor att köra.


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 09:03:23 - Joel Alexandersson

Efter att ha testat lite märker jag att när jag ändrar ettan vid pilen på höger sida i koden nedan till en högre siffra så stängs inte programmet ner. men jag kan inte välja något i comboboxen.


    Private Function GoToSection(ByRef filename As Scripting.TextStream, ByVal ParamArray SecName() As Object) As Boolean
        Dim i As Short
        Dim Data As String

        On Error GoTo errorHandler

        GoToSection = False
        Do While Not filename.AtEndOfStream
            Data = filename.ReadLine
            For i = 0 To UBound(SecName)
                If InStr(1, Data, UCase(SecName(i)), CompareMethod.Text) = 3 Then <----------------------
                    GoToSection = True
                    Exit Do
                End If
            Next i
        Loop
        Exit Function
errorHandler:
        GoToSection = False
    End Function


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-06 09:04:52 - Cecilia Wirén

Det betyder att man försöker använda sig av en position av en array som inte finns tex om arrayen har två platser och man försöker läsa den tredje.

Om din ini-fil ser ut såhär:
0=Ingen motor vald
1=motor 1=.HMI_KapMotor1Upp=.HMI_KapMotor1Ner
2=motor 2=.HMI_KapMotor2Upp=.HMI_KapMotor2Ner


så kommer första raden du kör split på se ut såhär:
s(0) = [0]
s(1) = [Ingen motor vald]

och andra:
s(0) = [1]
s(1) = [motor 1]
s(2) = [.HMI_KapMotor1Upp]
s(3) = [.HMI_KapMotor1Ner]

andra raden kommer att gå bra då vi läser de tre sista värderna (första är s(0) o ignorerar vi)
men första raden har ingen s(2) efter som den slutar efter s(1).

Testa att bara ta bort den raden från ini filen så kommer det nog att rulla


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 09:13:11 - Joel Alexandersson

nej.det fungerar ändå inte. samma felmeddelande igen..


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 09:14:01 - Jan Bulér

Joel: Ok, jag hämtar inte från en ini-fil men jag antog att det huvudsakliga problemet var hanteringen av värden i ComboBoxen.

Jag skapade metoden, Private Sub InitMotorComboBox(), där jag skapar instanser av klassen och fuller dem med hårdkodad info, där kan du byta ut hårdkodningen mot inlästa värden från din ini-fil.


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-06 09:16:12 - Cecilia Wirén

lägg in system.diagnositic.debug.write(sLine) på 'plats för debug
och se vad det står i Output fönstret


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 09:34:55 - Joel Alexandersson

Oj. jag glömde att kolla det innan. det fixade problemet. Lite pinsamt faktiskt hru dum ajg var nu. :D Jag hade skrivit min ini-fil så här:

1=motor 1=.HMI_KapMotor1Upp=.HMI_KapMotor1Ner
2=motor 2=.HMI_KapMotor2Upp=.HMI_KapMotor2Ner
3=motor 3=.HMI_KapMotor3Upp=.HMI_KapMotor3Ner
4=motor 4=.HMI_KapMotor4Upp=.HMI_KapMotor4Ner
5=motor 5
6=motor 6
7=motor 7

så fort jag bara tog bort 5,6 och 7 så fungerade det ju. dumt av mig. :D haha! Men tack så jattemycket för hjälpen. Änligen fungerar det!

Finns det något sätt jag ändå kan göra så att värdet "ingen motor vald" finns att välja? bara så ingen motor körs när man valt det.


Svara

Sv:påverka valt värde i combobox?

Postades av 2008-11-06 09:41:03 - Cecilia Wirén

självklart,
efter

ComboMotorerKap.Items.Clear()


lägg in
ComboMotorerKap.Items.add("Ingen motor vald")


sen när du skall läsa av värdet (vid Upp/Ner knapparna)
Lägg först en koll att inte första värdet är valt
If Not ComboMotorerKap.SelectedIndex = 0 then
  Dim m as motor 
  m = ComboMotorerKap.SelectedItem 
  bMotorUpp = CBool(True) 
  Call TcClientSync.WriteVar(m.Upp, bMotorUpp) 
Else
 'Ev felmeddelande
End if


Svara

Sv: påverka valt värde i combobox?

Postades av 2008-11-06 09:45:25 - Joel Alexandersson

Enormt tacksam Cecilia. Det fungerar helt perfekt! :D


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 765
27 960
271 761
674
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies