Ansteuerung für K8056

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von wallenstein.

    Ansteuerung für K8056

    Hi

    ich hab mal wieder ein Problem. Ich hab mir das K 8056 von Velleman geholt, welches man über RS 232 steueren kann.
    Ich möchte es jetzt gerne ganz einfach in ein Programm einbinden, wenn ein Button gedrückt wird soll ein Relai schalten.

    Jetzt mein Problem:
    Ich bekomm einfach nichts auf die Reihe.
    Einerseits weiß ich trotz längere Suche noch immer nicht, wie ich Daten über den Seriellen Port ausgebe und des weiter verstehe ich nicht was ich ausgeben soll.
    Ich hoffe ihr habt ein paar Ideen.
    Hier noch die Seite vom Hersteller:

    vellemanusa.com/us/enu/product/view/?id=500375
    Ich hab jetzt mal ein wenig rumprobiert.

    Ich wollte erreichen das über die rst 232 irgendwas gesendet wir und dann auch wieder empfangen und angezeit wird.
    Hab dazu folgenden Quellecode geschrieben.

    VB.NET-Quellcode

    1. Imports System.Text ' <=== !
    2. Public Class Form1
    3. Dim daten As Byte
    4. Dim t_zahl As Byte
    5. 'Codeabschnitt von Rod:
    6. Sub SendSerialData01xxxx(ByVal data As String)
    7. Dim enc As Encoding = Encoding.GetEncoding(1252)
    8. ' Send strings to a serial port.
    9. Using com1 As IO.Ports.SerialPort = _
    10. My.Computer.Ports.OpenSerialPort("COM1", 9600, IO.Ports.Parity.None, 8)
    11. com1.Encoding = enc
    12. com1.Write(data)
    13. End Using
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    16. Dim wert As String = "Next"
    17. SendSerialData01xxxx(wert)
    18. End Sub
    19. Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    20. t_zahl = t_zahl + 1
    21. If t_zahl = 100 Then t_zahl = 0
    22. TextBox2.Text = t_zahl 'hier steht nichts in der box (fremder thread)
    23. byteeinlesen()
    24. End Sub
    25. Private Sub byteeinlesen()
    26. daten = SerialPort1.ReadByte()
    27. End Sub
    28. Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    29. Label1.Text = "Empfang " & daten
    30. Label2.Text = t_zahl 'test ob etwas empfangen wird
    31. End Sub
    32. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    33. Timer2.Start()
    34. End Sub
    35. End Class


    es funktoniert aber leider nicht und ich kann auch nicht überprüfen ob was gesendet wird.
    hier:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim wert As String = "Next"
    3. SendSerialData01xxxx(wert)
    4. End Sub
    5. Sub SendSerialData01xxxx(ByVal data As String)
    6. Dim enc As Encoding = Encoding.GetEncoding(1252)
    7. ' Send strings to a serial port.
    8. Using com1 As IO.Ports.SerialPort = _
    9. My.Computer.Ports.OpenSerialPort("COM1", 9600, IO.Ports.Parity.None, 8)
    10. com1.Encoding = enc
    11. com1.Write(data)
    12. End Using
    13. End Sub


    oder ist das komplett falsch
    habs geschaft das ich "Next" sende und auch wieder empfange.

    Um jetzt die K8056 anzusteuern muss ich next durch die Sendesequenz ersetzten, wenn ich das richtig verstanden habe.

    Aber wie sieht jetzt die Sendesequenz den genau aus.
    so ich habs jetzt geschaft das an meiner Karte Relais geschalten werden.
    Hab das hier mal als Beispiel zusammengefasst.

    Es wird immer die Karte 1 angesprochen.

    VB.NET-Quellcode

    1. Imports System.Text ' <=== !
    2. Imports System
    3. Imports System.IO.Ports
    4. Imports System.Threading
    5. Dim checksum As String
    6. Dim messagestring As String
    7. Dim Befehl As String
    8. Dim Relai As String
    9. Sub SendSerialData01xxxx(ByVal data As String)
    10. Dim enc As Encoding = Encoding.GetEncoding(1252)
    11. ' Send strings to a serial port.
    12. Using com As IO.Ports.SerialPort = _
    13. My.Computer.Ports.OpenSerialPort("Com1", 2400, IO.Ports.Parity.None, 8)
    14. com.Encoding = enc
    15. com.Write(data)
    16. End Using
    17. End Sub
    18. Sub rechnen()
    19. checksum = (255 - ((((13 + 1 + Asc(Befehl) + Asc(Relai)) / 256) - Int((13 + 1 + Asc(Befehl) + Asc(Relai)) / 256)) * 256)) + 1
    20. messagestring = Chr(13) & Chr(1) & Befehl & Relai & Chr(checksum)
    21. messagestring = messagestring & messagestring
    22. messagestring = messagestring & messagestring
    23. SendSerialData01xxxx(messagestring)
    24. End Sub
    25. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    26. Befehl = "S"
    27. Relai = "8"
    28. rechnen()
    29. End Sub
    30. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    31. Befehl = "C"
    32. Relai = "8"
    33. rechnen()
    34. End Sub