Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Zugriff mit ADS auf BC9000

  1. #1
    Registriert seit
    03.05.2010
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe ein Problem mit dem Zugriff über die ADS-Bibliothek im C# auf den BC9000.
    Vielleicht kann mir jemand sagen was ich falsch mache.

    Ich habe eine Standard WPF Anwendung neu erstellt( Als Vorlage dient die Beispielanwendung von beckhoff aus dem infosys). In dem Fenster habe ich zwei Buttons(button1,button2) und ein Label(label1).
    In der cs. Datei von dem Fenster Window 1 sind die unten stehenden C# Funktionen definiert.
    folgender C# Funktion erstellt die Verbindung zum BC

    Code:
    private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                try
                {
                    // Verbinden mit lokaler SPS - Laufzeit 1
                    tcClient = new TcAdsClient();
                    tcClient.Connect("192.168.178.200.1.1", 800); 
                    
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }
    Diese Funktion liesst auf Knopfdruck eine Bytevariable im BC
    Code:
    private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                try
                {
                    AdsStream dataStream;
                    BinaryReader binReader;
    
                    dataStream = new AdsStream(1);
                    binReader = new BinaryReader(dataStream);
                             
                    tcClient.Read(16416,0,dataStream);
                    dataStream.Position = 0;
                    label1.Content = binReader.ReadInt16().ToString();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    Und diese Funktion soll ein 10 an eine Variable im BC schicken:

    Code:
    private void button2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                try
                {
                    AdsStream dataStream;
                    dataStream = new AdsStream(1);
    
                    dataStream.Position = 0;
                    dataStream.WriteByte(20);
                    tcClient.Write(61488, 0, dataStream);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    IM BC9000 sind zwei Variablen deklariert:
    var1 AT %MB0:Byte;
    var2 AT %QB0:Byte;

    Ich bin zeimlich vor dem verzweifeln, da eine Beispielanwendung von Beckhoff, zwar in VB, funktioniert.
    Ich weis einfach nicht wo der Fehler steckt.
    kann mir dann mal noch jemand erklären wie statt einer byte Variable eine String und eine Real variable lesen bzw. schreiben kann?

    Ich bin Euch zum Dank verpflichtet.

    Grüße Christian
    Zitieren Zitieren Zugriff mit ADS auf BC9000  

  2. #2
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Hallo Christian,

    wo liegt denn das Problem?

    Ich habe hier nur zwei kleine Ungereimtheiten entdeckt:
    - binReader.ReadInt16().ToString();
    sollte vielleicht heissen
    binReader.ReadByte().ToString();
    - dataStream.WriteByte(20);
    sollte vielleicht heissen:
    dataStream.WriteByte(10);
    wenn eine 10 geschrieben werden soll.

    Aber das ist doch nicht das Problem, oder?

    Gruß,
    witkatz

  3. #3
    jomolungma ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2010
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    selbst mit diesen kleinen schönheitsfehlern funktioniert es einfach nicht.
    Ich bekomme keine Reaktion am BC sowie auch keine Fehlermeldung aus meinem C# Programm.

    Vielleicht hat ja jemand selber ein Beispielprogramm in C# für den Variablenaustausch mit einem BC9000.

    Gruß Christian

  4. #4
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Das Beispiel ist schon ok, zumindest was die ADS.net Aufrufe angeht, weitere C# Beipiele auch über das Handling verschiedener Detntypen wie REAL und STRING findest du in der Ads.net Doku.

    Die Aussage "Programm läuft nicht" ist nach meiner Meinung zu pauschal. Versuche bitte deine WPF-Anwendung zu debuggen um einzukreisen was läuft und was nicht, um der Fehlerursache ein Stück näher zu kommen:
    - mit ein paar Breakpoints kannst du herausfinden, ob die Methoden überhaupt aufgerufen werden. Insbesondere die Methode Window_Loaded, wird sie vom System überhaupt aufgerufen? Ist das die richtige Load-Methode bzw. das richtige Ereignis für die Initialisierungs-Sequenz in einer WPF-Anwendung? Ich habe nur das Page_Loaded Ereignis verwendet, damit funktioniert die Initialisierung bei mir.
    - In meinem Test werden die MouseLeftButtonDown-Ereignismethoden gar nicht aufgerufen. Versuch mal mit einem Click Ereignis
    Code:
           private void button2_Click(object sender, RoutedEventArgs e)
           {
               // hier dein Code aus button2_MouseLeftButtonDown
           }
    Gruß,
    witkatz
    Geändert von witkatz (05.05.2010 um 15:40 Uhr)

  5. #5
    Registriert seit
    01.03.2008
    Beiträge
    487
    Danke
    3
    Erhielt 43 Danke für 39 Beiträge

    Standard

    Hallo,

    bist du die sicher, dass man mit einem BC mittels ADS kommunizieren kann ?

    Ich glaub, das geht gar nicht.

    MfG CAS
    www.cas-solution.de

    Alles geregelt...


    Weltraumflug in den USA zu gewinnen!
    Kratze hier ▒▒▒▒▒▒▒▒▒▒▒▒ mit einer Münze,
    und finde heraus, ob Du der Gewinner bist!

  6. #6
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    bist du die sicher, dass man mit einem BC mittels ADS kommunizieren kann ?
    Das geht. Wenn man am PC die AmsNetId und die IP-Adresse angleicht, dann ist muss nur der BC in der Routing Tabelle auf dem PC eingetragen sein. Wenn die AmsNetId des PC von seiner IP Adresse abweicht, dann muss auch im BC9000 eine Route in die AMS Routing Tabelle eingetragen werden. Es gibt ein Beispiel im Information System:
    http://infosys.beckhoff.com/content/...pc.htm?id=1976

    Gruß,
    witkatz

  7. #7
    Registriert seit
    01.03.2008
    Beiträge
    487
    Danke
    3
    Erhielt 43 Danke für 39 Beiträge

    Standard

    Ist schon richtig....

    aber: Hier wird scheinbar die Kommunikation manuell ausprogrammiert.
    Dazu muß man dann diese ADSread und ADSwrite Bausteine im Programm nutzen.
    Die normale Kommuikation läuft, denke ich, nicht!

    MfG CAS
    www.cas-solution.de

    Alles geregelt...


    Weltraumflug in den USA zu gewinnen!
    Kratze hier ▒▒▒▒▒▒▒▒▒▒▒▒ mit einer Münze,
    und finde heraus, ob Du der Gewinner bist!

  8. #8
    jomolungma ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.05.2010
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK,
    hab mich mit den Breakpoint durch gewühlt.
    Es funktioniert jetzt. Danke für den Hinweis Window_Loaded evtl. nicht durchlaufen!!!

    Nur habe ich noch Probleme mit den REAL Variablen.

    Ich habe eine Real Variable var1 so im BC deklariert:
    var1 AT %MD0: REAL;

    dann lese ich mit
    tcClient.Read(16416, 0, dataStream);

    und überweise so:
    dTempTarget = binReader.ReadDouble();

    aber da wird eine ewig lange zahl *10 ^- irgendwas angezeigt obwohl in var1 nur 10.5 steht.

    Vielleicht könnt ihr mir doch noch eine Info geben.

    Gruß Christian

  9. #9
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    REAL ist eine 4 Byte Fließkommazahl, was in C# single entspricht, also wäre die ReadSingle Methode richtig.
    Natürlich muss auch der Stream entspr. größer deklariert werden und die Read-Methode muss 4 Byte lesen.

    Gruß,
    witkatz

Ähnliche Themen

  1. Beckhoff BC9000 mit VB.net
    Von paul1010 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 04.04.2015, 11:00
  2. Modbus TCP mit BC9000
    Von SteelWorker im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 01.07.2013, 16:58
  3. BC9000 IP Adressen
    Von Pockebrd im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 03.06.2011, 09:54
  4. BC9000 und SNMP
    Von TomCatShS im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 07.10.2009, 21:36
  5. BC9000 Fehlermeldung
    Von Puschel505 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.11.2007, 13:31

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •