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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 42

Thema: S7 <> PC über Ethernet

  1. #11
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von joker76
    Hallo,
    das mit den Include Einweisungen hatte ich schon versucht in der geklammerten Form zu schreiben. Nur bekommen ich dann ein anderen Fehler.
    Welchen? Und warum geklammert (also <nodave.h>)? Dann müßte nodave.h im Standard-Includeverzeichnis des Compilers stehen.

  2. #12
    Registriert seit
    17.06.2003
    Beiträge
    42
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hi,

    ich bin das ganze mal Schrittweise angegangen und habe nach und nach die Headerdateien in mein Projekt importiert. Und vom der C-Datei Schritt für Schritt die einzelnen Funktionen.

    Der erste Fehler (Warnung) ist die nicht benutzte, aber Definierte Variabel "c", in der Funktion "wait".
    Kann man ja ausklammern oder löschen.

    Der letzte Schritt war das Einfügen der Main, bis dahin hatte ich keine Fehlermeldungen beim kompilieren.

    Nun kommt eine Fehlermeldung:

    -> error C2440: '=' : 'int' kann nicht in 'void *' konvertiert werden

    an dieser Stelle:

    " fds.rfd=openSocket(102, argv[adrPos]);"

    >Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat<

    Das letzte ist wieder eine Warnung:

    "warning C4244: 'argument' : Konvertierung von 'double' in 'float', moeglicher Datenverlust"


    an dieser Stelle:

    "d=toPLCfloat(d+1.1);"


    Liegt es vielleicht an meinen Compiler (Microsoft Visual ?


    Schönen Gruß
    Joker

  3. #13
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von joker76
    Der erste Fehler (Warnung) ist die nicht benutzte, aber Definierte Variabel "c", in der Funktion "wait".
    Kann man ja ausklammern oder löschen.
    Kann man ebensogut stehen lasse, Warnungen sind keine Fehler, nur Hinweise des Compiler, daß er da etwas "Ungewöhnliches" gefunden hat. In diesem Fall ist es einfach so:
    Die Funktion wait() wurde für LINUX geschrieben. Als sie sich nicht genauso unter Windows verwenden ließ, habe ich mir nicht die Mühe gemacht, das "in Ordnung zu bringen", sondern habe den Code einfach durch #ifdef ausgelassen. Wait() tut auch nichts wichtiges; es wartet einfach auf einen Tastendruck, damit man Zeit hat, die Bildschirmausgabe zu lesen.
    -> error C2440: '=' : 'int' kann nicht in 'void *' konvertiert werden
    an dieser Stelle:
    " fds.rfd=openSocket(102, argv[adrPos]);"
    >Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat<

    Das letzte ist wieder eine Warnung:
    Ja das ist ein echter Fehler. Aber er wird eben von BorlandC nicht bemeckert. Grund ist: Unter Linux wird eine Datei oder ein Socket gleichermaßen mit einem file descriptor angesprochen. Unter Windows gibt es dafür 2 verschiedene Datentypen: Ein Datentyp "handle" für Dateien oder "socket" für Sockets (TCP-Verbindungen). Beides soll an dem gleichen Speicherplatz in daveOSserialType abgelegt werden. Der Platz reicht auch (sonst könnte es auch unter BorlandC nicht gehen). Aber die C-Compiler werden immer kritischer bezüglich der Prüfung von Datentypen...
    Eine "saubere" Lösung wäre es, eine union der 2 Datentypen zu verwenden. Das kann ich für die nächste Version vorsehen, aber es erfordert eine Neuübersetzung der DLL.
    Eine schnelle Lösung sollte folgendes sein:

    fds.rfd=(void*)openSocket(102, argv[adrPos]);
    "warning C4244: 'argument' : Konvertierung von 'double' in 'float', moeglicher Datenverlust"
    an dieser Stelle:
    "d=toPLCfloat(d+1.1);"
    Wenn du willst, kannst du die Variable d als float statt als double deklarieren.

  4. #14
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Zottel
    "warning C4244: 'argument' : Konvertierung von 'double' in 'float', moeglicher Datenverlust"
    an dieser Stelle:
    "d=toPLCfloat(d+1.1);"
    Wenn du willst, kannst du die Variable d als float statt als double deklarieren.
    Habe gerade gesehen, daß die Variable bereits float ist. Was hier passiert ist:
    Der Compiler kodiert eine Multiplikation der float-Variablen d mit der Konstante 1.1, die er als double auffaßt. Das Ergebnis ist double, daher"Konvertierung 'double' in 'float', moeglicher Datenverlust" Dem kannst du abhelfen, indem du die Konstante als 1.1f schreibst. Dann soltte sie float sein.

  5. #15
    Registriert seit
    17.06.2003
    Beiträge
    42
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hi,

    so nun das kleine Problem mit dem Float hatte ich behoben und auch sonst gab es keine Schwierigkeiten.

    Nun kann ich zwar mein Projekt kompilieren, bekomme aber beim erstellen der Datei einen Link-Fehler: LNK1136 Ungültige oder beschädigte Datei.


    Kann es sein das mein VC6.0 die Borland-DLL nicht versteht ?


    P.S. Ich habe mal versucht mit einen einfachen Link befehl die Datei libnodave.lib zu öffnen. Auch das führte zum Ergebnis das die Datei beschädigt ist.
    Joker

  6. #16
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von joker76
    Hi,

    so nun das kleine Problem mit dem Float hatte ich behoben und auch sonst gab es keine Schwierigkeiten.

    Nun kann ich zwar mein Projekt kompilieren, bekomme aber beim erstellen der Datei einen Link-Fehler: LNK1136 Ungültige oder beschädigte Datei.


    Kann es sein das mein VC6.0 die Borland-DLL nicht versteht ?
    Das habe ich heute schon einmal gelesen,
    Linking...
    libnodave.lib : fatal error LNK1136: invalid or corrupt file
    Error executing link.exe.
    (Beitrag von johannlinner von heute auf
    http://sourceforge.net/forum/forum.p...orum_id=205657
    )
    Hier aber mit dem wesentlichen Hinweis auf libnodave.lib.
    Insgesamt allerdings zum ersten Mal. Ok, andere Leute haben Delphi genommen...
    Ich glaube, es ist kein Problem mit der DLL, eher eines von:
    1. VC6.0 versteht die datei libnodave.lib nicht (wahrscheinlich).
    2. VC6.0 versteht irgendetwas in nodave.h so, daß es etwas anderes in der .lib oder .dll erwartet als drin ist.
    Da kann ich dir jetzt wahrscheinlich nicht helfen. Mein Rat an den anderen Benutzer war:

    Im file MAKEFILE.MAK kannst du sehen, daß libnodave.lib erzeugt wird durch:
    ($BCCPATH)implib libnodave.lib libnodave.dll
    "implib" ist ein Werkzeugprogramm. Was es genau tut weiß der Teufel. Ich bin kein Experte für Windows. Vermutlich erzeugt es eine Liste der Funktionsnamen (und der Einsprungadressen?).
    Es sollte ein zu VC gehöriges Tool geben, was dasselbe leistet. Damit libnodave.lib neu erzeugen und schauen, was passiert.

    Das kanst du auch probieren.
    Oder du probierst, die ganze DLL mit VC neu zu erzeugen.
    Oder du probierst, nodave.c und openSocketw.c zu Objetdateien zu kompilieren und diese statisch in dein Programm einzubinden
    Oder du besorgst dir die Borland-Werkzeuge.
    Ansonsten muß du warten, bis sich einer meldet, der es mit VC zum Laufen bekommt und mir sagt, was dazu verändert werden muß.

  7. #17
    Registriert seit
    17.06.2003
    Beiträge
    42
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    >> Hätten die Borländer denn eine
    > Einstelloption die lib so erstellen, daß man sie in VC++ ohne Umwege
    > statisch laden kann ? (Für die Zukunft)

    Nein, Borland und MS verwenden unterschiedliche Formate für ihre
    Bibliotheken (OMF und COFF).
    Du könntest dein Makefile im C++ Builder so anpassen, daß lib.exe
    automatisch nach dem Erstellen aufgerufen wird.
    Eine andere Möglichkeit ist, eine entsprechende Batchdatei zu schreiben und
    diese als neues Projekt hinzuzufügen.
    Die Batch wird dann automatisch gestartet wenn du 'Alle Projekte neu
    erzeugen' auswählst.

    Das habe ich bei meiner Suche für eine Lösung gefunden.

    Scheinbar liegt es an den beiden unterschiedlichen Kompilern.

    Als Lösung ist das dynamische Laden der DLL vorgeschlagen worden, aber ich habe es bis jetzt noch nicht geschaft.
    Joker

  8. #18
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    [quote="joker76"]
    >> Hätten die Borländer denn eine
    > Einstelloption die lib so erstellen, daß man sie in VC++ ohne Umwege
    > statisch laden kann ? (Für die Zukunft)

    Nein, Borland und MS verwenden unterschiedliche Formate für ihre
    Bibliotheken (OMF und COFF).
    Ist mir neu,aber kann wohl sein.
    Du könntest dein Makefile im C++ Builder so anpassen, daß lib.exe
    automatisch nach dem Erstellen aufgerufen wird.
    Ich hätte vermutet, daß es eben lib.exe
    Eine andere Möglichkeit ist, eine entsprechende Batchdatei zu schreiben und
    diese als neues Projekt hinzuzufügen.
    Die Batch wird dann automatisch gestartet wenn du 'Alle Projekte neu
    erzeugen' auswählst.
    Na ja, was du mit einer Batchdatei tust, kannst du auch von Hand auf der Kommandozeile tun. Kenne leider die MS-Tools nicht.
    Das habe ich bei meiner Suche für eine Lösung gefunden.
    Scheinbar liegt es an den beiden unterschiedlichen Kompilern.
    Als Lösung ist das dynamische Laden der DLL vorgeschlagen worden, aber ich habe es bis jetzt noch nicht geschaft.
    Ich hatte es so verstanden, daß eben für das dynamische Laden die .lib-Datei gebraucht wird...
    Dynamisches Laden an sich bedeutet, daß der Inhalt von libnodave.dll nicht Bestandteil deines Programms wird. Der Linker sollte die Verweise auf die .dll in dein Programm intergrieren. Beim Start deines Programms wird dann (vom Windows-Programmlader) libnodave.dll in den Speicher geladen und die Verweise durch Sprungbefehle in den Specherbereich ersetzt, wo der Code von libnodave hingeladen wurde.
    Mir scheint, daß der Linker eben aus libnodave.lib die Verweise entnehmen soll. Die Frage ist nun, ob lib.exe das Tool ist, was eine Liste der Verweise aus libnodave.dll erstellen kann.
    Ansonsten gibt es noch ein freies Tool namens dlltool vom GNU Projekt.
    Es gibt

  9. #19
    Registriert seit
    20.10.2003
    Ort
    Biberach
    Beiträge
    5.068
    Danke
    959
    Erhielt 1.459 Danke für 922 Beiträge

    Standard

    Zitat Zitat von joker76
    1. Wir wollen beweisen das mit Open-Source Software eine Kommunikation
    zu einer Siemens-Steuerung möglich ist, ohne auf teuere Lizenzsoftware
    zurückgreifen zu müssen.

    2. Wir wollen beweisen das Open-Source Software Plattform unabhängig arbeiten kann, und nicht wie die teure Lizenzsoftware hauptsächlich für
    Windows geschrieben ist.
    Mahlzeit,

    beides ist mit endlichem Aufwand sicher technisch machbar.

    Wird in Ihrem Projekt auch die Wirtschaftlichkeit
    betrachtet? Die 'teuren' Lizenzkosten sind ja oft nur
    ein kleiner Teil am Gesamtprojekt.

    Viele Grüße

    Gerhard Bäurle

    Edit: -h
    Beste Grüße Gerhard Bäurle
    _________________________________________________________________
    Hardware: the parts of a computer that can be kicked. – Jeff Pesis

  10. #20
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nun kann ich's nicht lassen:
    Zitat Zitat von joker76
    1. Wir wollen beweisen das mit Open-Source Software eine Kommunikation
    zu einer Siemens-Steuerung möglich ist, ohne auf teuere Lizenzsoftware
    zurückgreifen zu müssen.
    Das IST bewiesen. Habe ich 2*365*24 Stunden laufen.
    2. Wir wollen beweisen das Open-Source Software Plattform unabhängig arbeiten kann, und nicht wie die teure Lizenzsoftware hauptsächlich für
    Windows geschrieben ist.
    Warum quält ihr euch dann so, etwas, daß auf Linux entwickelt und mit Borlands Tools auf Windows portiert wurde, zuerst unter MSVC zum Laufen zu bringen?
    Aber wenn es um die Demonstration a la 1 geht, und ihr wie ihr anderswo geschrieben habt, ihr immer nur einen DB oder einen Bereich daraus lesen wollt, kann ich euch auch das fertige Programm geben (mit BorlandC kompiliert).
    Zitat Zitat von deltalogic
    Mahlzeit,
    beides ist mit endlichem Aufwand sicher technisch machbar.
    Kostet mich nur 10 Minuten.
    Wird ihn Ihrem Projekt auch die Wirtschaftlichkeit
    betrachtet? Die 'teuren' Lizenzkosten sind ja oft nur
    ein kleiner Teil am Gesamtprojekt.
    Die Probleme, die hier bis jetzt behandelt wurden, entstehen durch 3 Teilaspekte:
    1. joker76 ist mit seinem Werkzeugkasten unzureichend vertraut. Dies dominierte den Thread über die ersten 2/3 und er würde mit AGLink vermutlich nicht besser darstehen (ok, AgLink braucht keine conditional defines, da es nur für Windows ist. Wenn 64bit-Windows kommt, hat Deltalogic die Wahl, ebenfalls diesen Weg zu gehen oder eine getrennte Version auszuliefern und getrennt zu pflegen).
    2. Die Benutzung fremder Bibliotheken bedeutet immer, sich in die entsprechende Programmierschnittstelle einzuarbeiten; das ist bei AgLink nicht anders. Für die Wirtschaftlichkeit bedeutet das, daß man immer die Einarbeitungszeit für das erste Projekt mit ansetzen muß.
    3. Nun ist aufgetaucht, daß es eine Inkompatibilität zwischen Borland und MSVC zu geben scheint. Ein versierter C-Programmierer würde einfach die .DLL mit seinem MSVC neu erstellen und mir die nötigen Änderungen zur Verfügung stellen. Dafür wird er sicher nicht mehr als eine Stunde brauchen.

Ähnliche Themen

  1. S7 über Ethernet an MP
    Von Nadya im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.04.2011, 08:03
  2. Antworten: 0
    Letzter Beitrag: 08.01.2010, 16:34
  3. Antworten: 33
    Letzter Beitrag: 10.02.2009, 21:14
  4. Antworten: 2
    Letzter Beitrag: 25.09.2008, 10:34
  5. DMX über Ethernet
    Von maxi im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 18.06.2006, 16:29

Lesezeichen

Berechtigungen

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