# VS2010, C# - SPS Steuerung mit Ethernet



## ThomasAdler (25 September 2012)

http://msdn.microsoft.com/de-de/library/system.net.sockets.udpclient(v=vs.90).aspx
http://www.sps-magazin.de/?inc=artikel/article_show&nr=69314

Hallo!

Ich suche Beispielcode, wie ich unter C# Ausgänge setzen kann, Eingänge (pos./neg. Flanke) überprüfen kann.

UDP
Socket
Assembly, Library

Grüße Thomas


----------



## mogel (6 Oktober 2012)

Moin,

Hersteller nach einer API fragen. Im Prospekt werden nur Protokolle angeben die entsprechende Übertragung über das Netzwerkkabel realisieren. Damit Du aber entsprechend Eingäng und Ausgänge nutzen kannst wird ein Protkoll benötigt, welche auf TCP bzw. UDP aufsetzt. Und das hat definitiv der Hersteller.

hand, mogel


----------



## ThomasAdler (7 Oktober 2012)

> welche auf TCP bzw. UDP aufsetzt



Hallo!
Danke für die Antwort.
Ich muss aberr dann die Events selber programmieren, sprich Flanke.

0 -> 1 - Event 

1 -> 0 - Event
Für n Eingänge.

Kennst du kostengünstige SPS'en und Beispielcode in C#.
Grüße Thomas


----------



## mogel (7 Oktober 2012)

Moin,



ThomasAdler schrieb:


> Ich muss aberr dann die Events selber programmieren, sprich Flanke.
> 
> 0 -> 1 - Event
> 
> ...



jain - das kommt an der Stelle jetzt wirklich auf die API die der Hersteller anbietet. Im besten Fall bietet Dir die API entsprechende Events bei steigender bzw. fallender Flanke. Meistens ist eine API aber auf das nötigste gekürzt, also nur lesen und schreiben. In dem Fall musst Du pollen, in etwa so:


```
public class IrgendwasAbfragen {

    private bool laststate = false;

    public bool steigendeFlanke() {
        bool current = getIOFromSPS(); // was auch immer die API für Aufrufe benötigt
        if (current == laststate) return false;
        if (current == false) return false;
        laststate = current;
        return true;
    }

    public bool fallendeFlanke() {
        bool current = getIOFromSPS(); // was auch immer die API für Aufrufe benötigt
        if (current == laststate) return false;
        if (current == true) return false;
        laststate = current;
        return true;
    }

}
```

kostengünstige SPS kenne ich nicht - das überlasse ich lieber den Profis

hand, mogel


----------



## ThomasAdler (8 Oktober 2012)

```
this.btnBitVariante02.Click += new System.EventHandler(this.btnBitVariante02_Click);

  private void btnBitVariante02_Click(object sender, EventArgs e)
  {
```

Hallo,
ich dachte so an einen Mausklick.

steigendeFlanke
fallendeFlanke

Wie setze ich einen Ausgang? Wie setze ich diesen zurück?
Wie prüfe ich, ob Eingang 9, gesetzt ist oder nicht.

Du kennst ja eine SPS.
Wie sieht da das Telegramm zum setzen aus?
Wie sieht da das Telegramm zum prüfen des Eingangs  aus?

Einfach dass ich es mal sehe?
Was muss ich via TCP/IP senden?

Grüße Thomas


----------



## mogel (11 Oktober 2012)

ThomasAdler schrieb:


> Wie setze ich einen Ausgang? Wie setze ich diesen zurück?
> Wie prüfe ich, ob Eingang 9, gesetzt ist oder nicht.
> 
> Du kennst ja eine SPS.
> ...



Du brauchst die API des Herstellers - ohne geht es nicht. Z.B. ist LibNoDave auch eine API. Das setze ich immer ein - ich habe Null Ahnung was auf TCP/IP-Eben passiert.


----------



## ThomasAdler (11 Oktober 2012)

Hallo,
OK. Welche SPS nimmst du denn?
Wenn du Null Ahnung hast, zeige mir doch wie du *Ausgänge setzen tust, Eingänge abprüfst.
   Wie du die Flankenänderung als Event mitbekommst.*
D.h. du musst eigentlich in der Tat nicht wissen, wie die SPS funktioniert.
Dann ist es doch einfacher als Siemens S7 oder Codesys.
Sehe ich das richtig?
Grüße Thomas


----------



## ronnie.b (12 Oktober 2012)

Falls es dir um das TCP-Protokoll geht dann schau mal hier http://www.bj-ig.de/140.html 

Flankenänderung musst du ggf. selbst auswerten. Sprich, du pollst das entsprechende Bit und reagierst auf Änderung.
Manche API´s haben das, glaub ich zumindest, schon implementiert.
Aber das hat mogel im Post#4 ja schon erwähnt.

Du kannst auch ohne Treiber arbeiten, dazu musst du dann allerdings sowohl auf pc-Seite als auch auf SPS-Seite eine offene TCP/IP-Schnittstelle programmieren.

SPS und kostengünstig?? Zumindest bei Siemens nicht der fall *g*.
Evtl. findest du was kostengünstiges in der eBucht.


----------



## ThomasAdler (12 Oktober 2012)

Hallo,
>Pollen
Ja ich wollte was geprüftes, fertiges haben. Oder hast Du Beispielcode?

Welche kostengünstige SPS kannst du empfehlen, rein für Hobby.
'nur max. 20Eingänge, 20 Ausgänge, 24V" --- keine analoge Eingänge, Ausgänge.
Grüße Thomas


----------



## mogel (12 Oktober 2012)

Moin,



ThomasAdler schrieb:


> OK. Welche SPS nimmst du denn?


die, die der Kunde verbaut hat (meistens Siemens)



> Wenn du Null Ahnung hast, zeige mir doch wie du *Ausgänge setzen tust, Eingänge abprüfst.*


das ist 100% von der API bzw. dem Hersteller abhängig*

*


> *Wie du die Flankenänderung als Event mitbekommst.*


das hatte ich schon oben im Quelltext angedeutet (der funktioniert übrigens nicht 100%, ist ein Fehler drinnen). Du musst nur _getIOFromSPS()_ durch den entsprechenden API-Aufruf des Herstellers ersetzen. Mehr mache ich auch nicht, dann habe ich zumindest schon mal eine steigende bzw. fallende Flanke. Der Rest ist wie schon beschrieben vom Hersteller bzw der API abhängig.



> D.h. du musst eigentlich in der Tat nicht wissen, wie die SPS funktioniert.


setzt (unterm Strich) Eingänge und Ausgänge 



> Dann ist es doch einfacher als Siemens S7 oder Codesys.
> Sehe ich das richtig?


Da sehe ich keinen Unterschied - das ist mir egal. Für mich ist nur wichtig welche SPS da am anderen Ende (im Netzwerk) steckt, damit ich die entsprechende API rauskramen/anfordern kann.



ThomasAdler schrieb:


> Ja ich wollte was geprüftes, fertiges haben.


Also das wirst Du nicht finden, da wirst Du schon selber was machen dürfen.

Wenn es dir nur um das Lesen/Setzen von Ein-/Ausgängen geht und Du den Rest auf dem PC programmieren willst, dann ist evt. folgendes eine Alternative

http://www.quancom.de/quancom/quanc...ww.quancom.de/qprod01/deu/pb/USBOPTOREL16.htm
http://www.advantech.com/products/USB-4750/mod_43DFAAF0-A44C-4437-A8C8-0F7460C30B26.aspx
hand, mogel


----------



## ronnie.b (13 Oktober 2012)

Erzähl doch mal was du damit machen möchtest. Dann fällt vielleicht auch die Auswahl der Komponenten etwas leichter...
Was willst du denn für die Hardware ausgeben? Was ist schon vorhanden? Wenn du was von Siemens(oder kompatibel z.B. VIPA) willst brauchst du natürlich auch die entsprechende Software (Step7 o.ä.) die auch nicht grad billig ist. Dazu noch einen Adapter zum programmieren...usw.
Wie es bei anderen Systemen aussieht kann ich nicht sagen da ich nur Siemens benutze.

Erst wenn du die Hardware ausgewählt hast kannst du dich mit der Software beschäftigen da dies eben Herstellerabhängig ist.


----------

