Modbus VB2010

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Hey,
ich will mit Visual Basic 2010 Express eine Modbus verbindung über rs232 aufbauen. Was muss ich dafür machen bzw. hat jemand ein Beispiel für mich ^^

Hier das was ich schon habe:

Code: Alles auswählen

Imports VB = Microsoft.VisualBasic
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Msg(6) As Byte

        Msg(0) = 1     'red-y Adresse 
        Msg(1) = 3     'ModBus-Funktion: Lesen 
        Msg(2) = 0     'Speicherstelle: 0xFF00 
        Msg(3) = 0     'Speicherstelle: 0x00FF 
        Msg(4) = 0
        Msg(5) = 2     'Anzahl Register (= Byte / 2) 
        chkSum = Crc_(Msg(), 5)
        MsgBox("chkSum")
        'T_checksum.Text = chkSum

        For i = 0 To 5
            sendestring = sendestring & Msg(i)
        Next i

        For j = 1 To Len(sendestring)   'Befehl Senden an MFC  
            sendCHR = Mid$(sendestring, j, 1)
            For i = 1 To 100
                Debug.Print(sendCHR)
                MSComm1.

                Output = Chr(sendCHR)
                If MSComm1.OutBufferCount = 0 Then Exit For
            Next i
        Next j

        For j = 0 To 2 Step 2    'ChkSumme senden  
            sendCHR = Mid$(chkSum, j + 1, 2)
            sendCHR = CInt("&H" & sendCHR)
            For i = 1 To 100
                MSComm1.Output = Chr$(sendCHR)
                If MSComm1.OutBufferCount = 0 Then Exit For
            Next i
        Next j
    End Sub

    '****************************************************************
    '* 4 Byte-Array aus red-y smart in 32 bit Fliesskomma umwandeln *
    '****************************************************************
    Function Float32(ByVal Msg() As Byte) As Double
        Dim Exponent, Mantisse As Double
        Dim Binaer, tmp As String
        '*** 4 Byte-Array in 32 bit-String wandeln ***
        Binaer = ""
        For i = 0 To 3
            tmp = CStr(Msg(i)) 'Asc(Zeichen)
            For j = 0 To 7
                Binaer = (tmp Mod 2) & Binaer 'Ist bit = 0 oder = 1?
                tmp = Int(tmp / 2) 'Restliche bits rechts schieben
            Next j
        Next i
        '*** Exponent extrahieren ***
        Exponent = 0
        For i = 0 To 7
            Exponent = Exponent + 2 ^ (Val(Mid(Binaer, 9 - i, 1)) * i)
        Next i
        Exponent = Exponent - 127
        '*** Mantisse extrahieren ***
        Mantisse = 0
        For i = 10 To 32
            Mantisse = Mantisse + 0.5 ^ (Val(Mid(Binaer, i, 1)) * i)
        Next i
        Float32 = (-1) ^ (Val(VB.Left(Binaer, 1)) * 2 ^ Exponent * (1 + Mantisse))
    End Function
    'CRC berechnen
    '*******************************
    '* CRC-Prüfsumme bereitstellen *
    '*******************************
    Function Crc_(ByVal Msg() As Byte, ByVal n As Byte) As Long
        Dim i, j As Byte
        Dim crc As Long
        Dim CRC_String As String
        crc = 65535 '&HFFFF
        For j = 0 To n
            crc = crc Xor Msg(j)
            For i = 1 To 8
                If (crc And 1) = 1 Then '&H0001
                    crc = Int(crc / 2) Xor 40961 '&HA001
                Else
                    crc = Int(crc / 2)
                End If
            Next i
        Next j
        'Achtung: Die folgenden beiden Zeilen tauschen hi- und lo-Byte
        CRC_String = "000" + Hex(crc)
        Crc_ = VB.Right(CRC_String, 2) & VB.Right(VB.Left(CRC_String, Len(CRC_String) - 2), 2)
    End Function


End Class
Ich denke mal dass das für VB 6 ist ?

Gruß Zim
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Okey hab das nu hingewurstet.

Wie kann ich daten über RS232 empfangen habe im Momment das hier:

Code: Alles auswählen

    Sub DataReceived_Event(ByVal sender As Object, ByVal e As EventArgs) Handles RS232Port.DataReceived

        MsgBox("sd")
        Debug.Print("tua")
        Debug.Print(RS232Port.ReadByte)

    End Sub
Das geht aber nicht ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Modbus VB2010

Beitrag von Kiffi »

The_Dark_Zim-.- hat geschrieben:Ich denke mal dass das für VB 6 ist ?
nein. Ist VB.Net.
The_Dark_Zim-.- hat geschrieben:Das geht aber nicht ?
Was geht nicht? Fehlermeldung?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Sooo
Also ich hab gedacht das er es nicht mitbekommt wenn ich eine Nachricht erhalte...
Aber das Problem ist viel mehr das ich falsch gesendet hab und deswegen keine Antwort erhalten habe.
Nun hab ich mir eine DLL in PB gemacht welche eine Verbindung aufbauen soll und dann die Daten schicken sollte. Blos bekomme ich die im Momment nicht eingebunden.

Also Frage: wie binde bzw. wie greife ich auf die Befehle der DLL zu ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Modbus VB2010

Beitrag von Kiffi »

.NET bringt alles mit, was Du für die Kommunikation via RS232 benötigst. Ist
also eigentlich eher kontraproduktiv, Dir jetzt eine PB-DLL dafür zu schreiben
(angefangen bei umständlichen Debugging-Möglichkeiten, über unterschiedliche
Encodings bis hin zur klassischen String-Übergabe-Problematik).
The_Dark_Zim-.- hat geschrieben:Also Frage: wie binde bzw. wie greife ich auf die Befehle der DLL zu ?
mit DllImport() bzw. Declare.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Naja wenn es das Senden würde was ich will wäre es mir auch lieber.
Ich will nur Zahlen zwischen 0 und 255 versenden aber irgentwie schickt der immer was falsches. Denke mal weil er das als String versendet ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Hier mal als Beispiel.

Code: Alles auswählen

RS232Port.WriteLine(sendCHR)
und in sendCHR steht 2
Aber senden tut er DEZ: 050 010

Mit nur Wirtre schickt er nur eine 050
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Modbus VB2010

Beitrag von Kiffi »

ich denke, hier hast Du zwei Baustellen. Zum einen musst Du
im richtigen Format senden; zum anderen musst Du im richtigen
Format empfangen.

Besorg Dir mal einen COM-Port - Monitor(*) und lass protokollieren,
was Du via RS232 versendest. Erst wenn Du das richtige schickst,
kümmerst Du Dich darum, das Versendete auch richtig zu empfangen.

(*) Beispielsweise: Free Serial Port Monitor

Btw: Wenn Du WriteLine() ausführst, dann ist klar, dass
das letzte Zeichen ein Chr(10) ist, oder?

Mehr kann ich leider nicht sagen, weil meine Kristallkugel in der Reparatur ist.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: Modbus VB2010

Beitrag von The_Dark_Zim-.- »

Ich hab den fehler schongefunden ...
Der affe schickt ASCCI zeichen ...
Also schickt er ASCII 002 und nicht DEZ 2 ...

Zum empfangen nutze ich Docklight auf einem 2. Laptop.

Jetzt habe ich aber das Problem das ich auch 2stellige Zahlen versenden muss aber er immer ein Zeichen nach dem anderen schickt -.-
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Modbus VB2010

Beitrag von Kiffi »

The_Dark_Zim-.- hat geschrieben:Jetzt habe ich aber das Problem das ich auch 2stellige Zahlen versenden muss aber er immer ein Zeichen nach dem anderen schickt -.-
natürlich schickt er ein Zeichen nach dem anderen. Meinst Du etwa, die kommen parallel?

Irgendwie fehlt mir langsam die Motivation, Deinen unklaren Ausführungen
folgen zu wollen und zu verstehen, was Du überhaupt willst.

Grüße ... Kiffi
a²+b²=mc²
Antworten