• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

libnodave in C unter FreeBSD

Vril

Well-Known Member
Themenstarter #1
wollte mal fragen ob hier schon 'mal jemand was mit libnodave in C unter FreeBSD 32Bit programmiert hat?

Wem LibNoDave nix sagt:
das ist eine freie Lib u.a. in und für C um mit Siemens S7 PLCs kommunizieren zu können. Also Daten aus der SPS zu lesen oder aber auch Daten in der SPS zu ändern.

Gruß Walter
 

das.chaos

Duracellhase 2.0
#2
Wo kriegt man die und den MC her?

Weil mich das interessiert, ob ich
mit einem FreeBSD oder mit *BSD
damit SPS "spielen" koennte?
 

Vril

Well-Known Member
Themenstarter #3
"SPS spielen" ;-)

LibNoDave ersetzt keine SPS, sondern ist vielmehr eine Bibliothek für verschiedene Hochsprachen(zB VB,C,C++,C#,Delphi etc ...) , die die notwendigen Funktionen , die zum Verbinden und Austauschen von Daten zwischen Siemens Steuerungen und der PC Welt zur Verfügung stellt.
D.h. LibNoDave ist kein OPC Server - stellt aber dessen Funktionalitäten für diverse Hochsprachen zur Verfügung.

Grundsätzlich wird nur die 32Bit Welt von Win und Linux unterstützt - ob unter 32Bit BSDs in C mit GCC oder gar mit Clang "Compilaten" erfolgreich aus S7 gelesen oder gar in DBs geschrieben werden kann - versuche ich derzeit herauszufinden

Gruß Walter
 

das.chaos

Duracellhase 2.0
#4
FreeBSD Mips ist 32Bit Welt... :D

Damit bin ich seit geraumer Zeit am
"spielen" bzw. "experimentieren".

Mich wuerde bspw. interessieren ob
ich eine SPS via dem MC per GPIO
mit einem AP135 Board (das bspw.
ein QCA955X SoC integriert) oder
Aehnlichen koppeln koennte.

Das QCA955X SoC wird bspw.
von FreeBSD unterstuetzt.
 

das.chaos

Duracellhase 2.0
#5
Habe mir geradeeben den Quellcode
bei http://libnodave.sourceforge.net/
gewladen... und uberfliege den
Quellcode... eine Portierung nach
FreeBSD Mips32 erscheint moeglich.

Nur was sollen die binaries im
tarball? Sind das Komponenten
zum Testen oder sind dass
"dependencies" die mich in einen
Software Lockin in der Gestalt
eines Linux basierten oder einer
Windows Kiste zwaengen?

FreeBSD im Kontext von
SCADA interessiert mich.
 

Vril

Well-Known Member
Themenstarter #6
...ob ich eine SPS via dem MC per GPIO
mit einem AP135 Board (das bspw.
ein QCA955X SoC integriert) oder
Aehnlichen koppeln koennte.
also via GPIO kannst Du das schon koppeln,
indem Du SPS IO Baugruppen koppelst.
Aber dazu brauchst Du dann auch kein LibNoDave,
denn mit Libnodave kannst Du z.B. via Ethernet fast alle Speicherbereiche
der SPS lesen und beschreiben - sogar Eingangsbaugruppen beschreiben,
also mindestens für einen SPS-Zyklus manipulieren;-)

Ob das mit den LibNoDave-Libraries kompilierte Programm dann letzendlich
auf einem Mips32-Board, einem AVR32, einem
Mac oder nen Chromebook läuft - ist ja völlig egal, sofern BSD drauf läuft.
Wir brauchen noch nicht mal X ;-)
 

das.chaos

Duracellhase 2.0
#7
also via GPIO kannst Du das schon koppeln,
indem Du SPS IO Baugruppen koppelst.
Schoen... das gefaellt mir! Das hat "Hackvalue". :D

Aber dazu brauchst Du dann auch kein LibNoDave,
denn mit Libnodave kannst Du z.B. via Ethernet fast alle Speicherbereiche
der SPS lesen und beschreiben - sogar Eingangsbaugruppen beschreiben,
also mindestens für einen SPS-Zyklus manipulieren;-)
D.h. die Library bietet ein sich ueber das Netzwerk
bzw. LAN transparent verhaltene Schnittstelle. Ist
mit Ethernet das "generische" Ethernet oder das
"Industrial Ethernet" gemeint? Es soll *imho*
sich vom "generischen" Ethernet unterscheiden?

Ob das mit den LibNoDave-Libraries kompilierte Programm dann letzendlich
auf einem Mips32-Board, einem AVR32, einem
Mac oder nen Chromebook läuft - ist ja völlig egal, sofern BSD drauf läuft.
Wir brauchen noch nicht mal X ;-)
*yeah* :)
 

Vril

Well-Known Member
Themenstarter #8
D.h. die Library bietet ein sich ueber das Netzwerk
bzw. LAN transparent verhaltene Schnittstelle. Ist
mit Ethernet das "generische" Ethernet oder das
"Industrial Ethernet" gemeint?
Ja, "normales Internet" ... im LibNoDave Archiv sind ein paar Beispiel-Programme enthalten.
U.a. ein in C geschriebenes Programm, dem Du nur die IP der SPS beim Aufruf als Parameter
mit gibst .. und das dann ein paar DBs ausliest und deren Inhalt mit printf auf die StdIO ausgibt.

Allerdings kann LibNodave auch MPI usw. - aber wozu ne teure MPI Karte einbauen, wenn Ethernet geht
 

sterum

Well-Known Member
#11
Ich hab mich dieses Wochenende auch mal mit der LibNoDave gespielt.
Ich hab sie auf einem Raspberry Pi 3 unter FreeBSD 12.0-CURRENT installiert. Ich verbinde mich damit auf ein Siemens LOGO! 0BA8. Mit einem kleinen Perl Skript kann ich schon mal den Status der Eingänge und Ausgänge auslesen. Das Perl Testprogramm hab ich nicht ausgeführt da ich sonst vermutlich unsere Hauskläranlage abstellen würde.
Ich verwende die libnodave-0.8.4.6 da ich mich mit der aktuellen Version 0.8.5 nicht mit dem LOGO verbinden kann.
Damit ich die libnodave kompilieren konnte msste ich sie mit -fPIC erstellen, vermutlich weil es sich beim Raspi 3 um eine arm64 Architektur handelt.

Jetzt sollte der Weg nicht mehr weit sein um im Falle einer Störung an der Anlage z.B eine E-Mail an mich zu senden.

Code:
#!/usr/local/bin/perl -w

use strict;
use warnings;
use Nodave;

my $ip_address = '192.168.0.50';
my $ip_port = '102';
my $useProto = daveProtoISOTCP;
my $localMPI = 0;
my $plcMPI = 2;
my $rack = 0;
my $slot = 0;
my ($ph, $di, $res, $dc);

$ph = Nodave::openSocket($ip_port, $ip_address);

$di = Nodave::daveNewInterface($ph, $ph, "IF1", $localMPI, $useProto, daveSpeed187k);

Nodave::daveInitAdapter($di);

$dc = Nodave::daveNewConnection($di, $plcMPI, $rack, $slot);

$res = Nodave::daveConnectPLC($dc);
if ($res == 0) {
  print "Verbindung zur PLC hergestellt\n";
  }
else {
  print "Verbindung konnte nicht hergestellt werden\n";
  }

printf("Versuche den Ausgang Q5 zu lesen\n");
my ($i, $aaa, @abuf2, $asd);
($aaa,$res) = Nodave::daveReadBits($dc, daveOutputs, 0, 4);
@abuf2 = unpack("C*",$aaa);
if ($res==0) {  
  $asd=Nodave::daveGetU8($dc);
  printf("Q5: %d\n",$asd);
}
  
$res = Nodave::daveDisconnectPLC($dc);
$res = Nodave::daveDisconnectAdapter($di);
$res = Nodave::closeSocket($ph);
Code:
uname -a
FreeBSD raspberry_pi 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r329338: Fri Feb 16 02:15:53 UTC 2018  root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC  arm64