rfid-controller mit c# - treiber

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von klassenfeind.

    rfid-controller mit c# - treiber

    hallo,

    ich hab eine in c# geschriebenen treiber, den ich mit visual studio 2015 in ein .exe übersetzen kann.
    den binde ich in die verweise eines vb - projekts ein.
    nun möchte ich ein objekt erzeugen und die attribute (z.b. ip) beschreiben .... es klappt nicht.
    (ein klassendiagramm habe ich angehängt)
    mehrtägige suche hier und bei google haben mir seit mehreren tagen nichts gebracht.

    wie müssen die entscheidenden zeilen in vb aussehen ??

    keine antworten .... ich erweitere mal die frage :

    in c# schaut das so aus :

    using System.Text;
    using DTE104_Driver;
    using System.Net;
    using System.Net.Sockets;
    using System.Runtime.InteropServices;
    namespace DTE104_Driver
    {
    class Program
    {
    /* applied ip address of DTE104 */
    const String ipAddress = "192.168.0.79";



    ----

    mein unbrauchbarer vb-ansatz :

    Imports DTE104_Driver

    Public Class Form1

    Dim ipAddr As String = "62.245.200.166"
    Dim port As Integer = 90
    Dim a As RFIDController

    --> ich kann damit die ip-adresse nicht zuweisen. im klartext hab ich nicht verstanden worum es hier geht, ich habe bisher immer nur .ddl-formate eingebunden, das hat prima funktioniert.

    Bilder
    • Class_Diagram_of_Public_Interfaces.jpg

      81,4 kB, 775×500, 142 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „klassenfeind“ ()

    Musst dann noch den String in eine Ip Adresse parsen, bzw ein entsprechendes Objekt erstellen. Einfach per IPAdress adress = IPAdress.Parse()
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    wie müssen die entscheidenden zeilen in vb aussehen ??


    Das ist doch keine vernünftige Frage. Du scheinst ja vorsichtig gesagt wenig Erfahrung zu haben. Da ist es nicht so leicht eine gute Antwort zu finden außer.. befass dich mit den Grundlagen.

    im klartext hab ich nicht verstanden worum es hier geht,


    Das hast du ja erkannt. Nun ist die Frage was du möchtest. Lernen wie es geht oder einen fertigen Code der macht was du willst?
    Das ist meine Signatur und sie wird wunderbar sein!
    ertappt ;)
    es geht also darum, einem private-attribut einen wert zuzuweisen in vb. (in c# wohl sowas : rfidCtrl = RFIDController.getObject(ipAddr);).
    das attribut parsen schreibt radinator. brauch ich das auch, wenn ich stets einen statischen wert für die ip habe ? kann ich nicht mit einem "setter" die ip übergeben ?
    Der Grund warum ich parsen erwähnt habe ist folgender: in deinem Programm verwendest du einen String, der Controller aber eine Property vom Typen IPAddress, nicht String
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    .. weil ipdadress in vb .net eine eigene klasse ist (mit adress als attribut zum beispiel). und die parse-methode wandelt den string geeignet, oder ?

    (ich war auf dem völlig falschen dampfer, weil ich bei "parsen" sofort an die auswertung eines xml-strings gedacht habe)

    es fällt mir schwer, hier im web einfach lesbare doku (mir beispielen) zu finden. die msdn-literatur find ich sperrig.
    also so :

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim address As IPAddress = IPAddress.Parse(ipAddr)
    rfid = RFIDController.getObject(address)
    End Sub

    klappt prima.


    eine weitere hürde, dann gebe ich ruhe ;) :

    in c# schaut ein methodenaufruf mit parametern so aus : status = rfidCtrl.readUID(out uid, channel);

    status ist der rückgabewert (true/false), uid die ausgabe, channel ein eingabeparameter.

    -> wie geht das mit dem out-parameter in vb ??? ich find ein fach nix ...

    klassenfeind schrieb:

    out-parameter in vb
    C# unterscheidet out TYPE param und ref TYPE param. Der Unterschied besteht darin, dass bei ref der Parameter vor dem Aufruf initialisiert sein muss, bei out muss er in der Prozedur zugewiesen werden. out bzw. ref müssen bei der Prozedur und deren Aufruf explizit hingeschrieben werden.

    C#-Quellcode

    1. void CallTest()
    2. {
    3. int index;
    4. int value = 0;
    5. Test(out index, ref value);
    6. }
    7. void Test(out int index, ref int value)
    8. {
    9. index = 0;
    10. }

    In VB.NET gibt es nur den Aufruf ByRef, hier genügt die entsprechende Deklaration:

    VB.NET-Quellcode

    1. Sub CallTest()
    2. Dim index As Integer
    3. Test(index)
    4. End Sub
    5. Sub Test(ByRef index As Integer)
    6. index = 7
    7. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wieder muß ich gestehen, daß ich offenbar nicht durchblicke.

    in vb geschrieben :

    status = rfid.readUID(uid, kanal)
    If (status = RFIDController.STATE_E.NO_ERROR) Then
    'TextBox4.Text = System.Text.Encoding.Default.GetString(uid)
    'TextBox4.Text = uid.ToString

    ..usw bringt zwar keinen compilerfehler, aber es kommen auch keine daten. vielleicht liegts auch an der mangelhaften auswertung von uid, welches ein byte-array ist (beide varianten funktionieren nicht)

    (nebenbei gefragt : ist die angabe von kanal (byte: 1..3) dann auch ein call by reference ?)

    klassenfeind schrieb:

    Dim uid As Byte()
    Die Deklaration der Prozedur readUID().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hat er doch oben geschrieben @RodFromGermany.
    Die ist auch aus der Lib die er da hat, das passt von der Deklaration her. Nur ist die Frage was ist rfidCtrl?
    Ist das richtig initialisiert usw, so das readUID() überhaupt funktionieren kann und was zurück gibt?

    Am besten lernst du erstmal richtig zu debuggen. Gibts iein Tutorial hier im Forum
    Das ist meine Signatur und sie wird wunderbar sein!
    vielen dank für den guten tipp.
    in uid steht in einem array mit 16 feldern komischerweise ab feld 12 irgendwas drin. das scheint vernünftig.
    also geht der aufruf, nur die wandlung macht probleme.

    wenn ich das mit dem holzhammer mache, gehts. so sieht mein code jetzt aus :

    For kanal = 0 To 3
    status = rfid.readUID(uid, kanal)
    If (status = RFIDController.STATE_E.NO_ERROR) Then
    TextBox4.Text = uid(12) & ":" & uid(13) & ":" & uid(14) & ":" & uid(15)
    My.Application.DoEvents()
    Else
    TextBox4.Text = "fuck !"
    End If
    System.Threading.Thread.Sleep(1000)
    Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „klassenfeind“ ()