SoftnetDP
Zurück Nach oben Vorwärts

SoftnetDP = Interpret + SoftnetDP-Funktionen, Beispiele

Hardware: CP5611 Siemens PCI Profibus Interface
Software:   SoftnetDP Fa. Siemens

Für Verwendung von SoftnetDP als Quelle (siehe Beispiel SoftnetDP2) sollte die Baudrate möglichst hoch gewählt sein (mind. 19.2 kBit/s).
SoftnetDP-Funktionen
int SoftnetDPSetAccess(int iAccess);
Die Zugriffsart des SoftnetDP-Masters muß vor der Initialisierung festgelegt werden. Defaulteinstellung ist 0.
iAccess 0: DPN_ROLE_CENTRAL|DPN_SYS_CENTRAL
1: DPN_ROLE_NOT_CENTRAL|DPN_SYS_CENTRAL
2: DPN_ROLE_NOT_CENTRAL|DPN_SYS_NOT_CENTRAL
Beispiel iResult = SoftnetDPSetAccess(0);
 
int SoftnetDPSetMaster(int iMaster);
Die Adresse des Masters muß vor der Initialisierung festgelegt werden.
iMaster 1, .., 4: CP5611 Siemens PCI Interface-Adresse
Beispiel iResult = SoftnetDPSetMaster(1);
 
int SoftnetDPSetSlave(int iSlave);
Die Adresse jedes Slaves muß vor der Initialisierung festgelegt werden.
iSlave 0, .., 125: Slave-Adresse (z.B. Siemens S7-200)
Beispiel iResult = SoftnetDPSetSlave(100);
 
int SoftnetDPInit();
Sollen von den Defaulteinstellungen abweichende Werte für Access, Master und Slave(s) verwendet werden, sind diese vor der Initialisierung des SoftnetDPs festzulegen (siehe oben).
Beispiel iResult = SoftnetDPInit();
 
int SoftnetDPInput(int iSlave, int iLen, int iOffset, char[] acBuffer);
iSlave 0, .., 125: gültige Slave-Adresse
iLen aktuelle Anzahl empfangener Zeichen
iOffset Startposition
acBuffer empfangene Zeichen
Beispiel char acBuffer[30]; int iLen; int iOffset;
SoftnetDPInput(100,2,0,acBuffer);
 
int SoftnetDPOutput(int iSlave, int iLen, int iOffset, char[] acBuffer);
iSlave 0, .., 125: gültige Slave-Adresse
iLen Anzahl zu sendender Zeichen
iOffset Startposition
acBuffer zu sendende Zeichen
Beispiel char acBuffer[30]; int iLen; int iOffset; int iResult;
iResult = SoftnetDPOutput(100,2,0,"ÿÿ");
 
int SoftnetDPExit();
SoftnetDP freigeben, Einstellungen rücksetzen.
Beispiel iResult = SoftnetDPExit();
 
int SoftnetDPReadSlv(int iSlave, int iLen, int iOffset, char[] acBuffer);
Mit dieser Funktion kann eine DP-Applikation die aktuellen Ausgabedaten auslesen, die in der Datenschnittstelle des DP-Masters hinterlegt sind.
Befindet sich der DP-Master in der Produktivphase, sendet er diese Daten zyklisch an den DP-Slave. Die Funktion ist nur lokal wirksam. Aus diesem Grund werden keine zusätzlichen Telegramme zwischen DP-Master und DP-Slave gesendet.
Die Funktion unterstützt vor allem die Kommunikation zwischen verschiedenen Windows-Applikationen, wenn diese auf die gleiche Kommunikationsbaugruppe zugreifen. Sie ermöglicht es, daß eine Applikation "A" ermitteln kann, welche Ausgabedaten eine andere Applikation "B" an einen DP-Slave sendet.
iSlave 0, .., 125: gültige Slave-Adresse
iLen Anzahl empfangener Zeichen
iOffset Startposition
acBuffer empfangene Zeichen
Beispiel char acBuffer[30]; int iLen; int iResult;
iResult =
SoftnetDPReadSlv(100,iLen,0,acBuffer);
 
int SoftnetDPGetMode();
Mit dieser Funktion kann die aktuelle Betriebsart des DP-Masters ermittelt werden (siehe SoftnetDPSetMode).
Beispiel int iMode = SoftnetDPGetMode();
 
int SoftnetDPSetMode(int iMode);
Mit dieser Funktion kann die Betriebsart des DP-Masters verändert werden. Die Funktion ist nur für eine übergeordnete Applikation zulässig .
Wichtig: Beim Einstellen einer neuen Betriebsart dürfen keine Betriebsarten übersprungen werden. Ausgehend von der aktuellen Betriebsart müssen die Betriebsarten in der vorgegebenen (aufsteigenden oder absteigenden) Reihenfolge OFFLINE / STOP / CLEAR / OPERATE durchlaufen werden. Der momentane Betriebszustand kann durch den Aufruf SoftnetDPGetMode() ausgelesen werden.
iMode 0=OFFLINE    Es erfolgt keine DP-Kommunikation
1=STOP        Nur Kommunikation mit DP-Master der Klasse 2 möglich.

                   Darüber hinaus erfolgt keine Kommunikation zu den DP-Slaves.
2=CLEAR      Parametrierung/Konfiguration der DP-Slaves, Datentransfer in

                   Ausgaberichtung. Senden von Null-Bytes an die DP-Slaves.
3=OPERATE  Datenaustausch mit den DP-Slaves.
Beispiel int iResult = SoftnetDPSetMode(0);
 
int SoftnetDPReadSysInfo(char[] acBuffer);
Die Funktion liefert einen Überblick der in der Datenbasis eingetragenen DP-Slaves. Zusätzlich wird für jeden DP-Slave angezeigt, ob Diagnosedaten vorhanden sind. Der Index innerhalb des Arrays acBuffer entspricht der Adresse eines DP-Slaves.
acBuffer[i] 0=Der DP-Slave ist im Offline-Zustand.
1=Der DP-Slave ist nicht aktiviert.
2=Der DP-Slave ist in der Datentransferphase.

3=Der DP-Slave ist in der Datentransferphase, zusätzlich sind Diagnosedaten vorhanden.
4=Der DP-Slave ist nicht in der Datentransferphase.
5=Der DP-Slave ist nicht in der Datentransferphase, zusätzlich sind Diagnosedaten vorhanden.
Beispiel char acBuffer[126]; int iResult = SoftnetDPReadSysInfo(acBuffer);
 
int SoftnetDPSetGlobalCtrl(int iSlave, int iFreeze, int iSync, int iGroupSelector);
Mit dieser Funktion kann eine DP-Applikation Steuerkommandos an einen einzelnen, eine Gruppe oder an alle DP-Slaves senden. Die Steuerkommandos werden durch ein Broadcast- oder ein Multicast-Telegramm an die DP-Slaves gesendet.
Ein Broadcast-Telegramm ist an alle DP-Slaves gerichtet.
Ein Multicast-Telegramm ist an eine Gruppe von DP-Slaves gerichtet.
iSlave 0, .., 125: gültige Slave-Adresse
iFreeze 0=UNFREEZE (Das Einfrieren der Eingänge wird aufgehoben)
1=FREEZE (
Die Zustände der Eingänge werden eingelesen und eingefroren)
iSync 0=UNSYNC (Das Kommando UNSYNC hebt das Kommando SYNC auf)
1=SYNC (Die Ausgabe wird eingefroren)
iGroupSelector  
Beispiel char acBuffer[30]; int iLen; int iOffset; int iResult;
iResult = SoftnetDPSetGlobalCtrl(100,0,0,0);
 
int SoftnetDPReadCfg(char[] acBuffer);
Mit dieser Funktion kann eine DP-Applikation die Gesamtkonfiguration der DP-Datenbasis ermitteln. Die Funktion gibt Auskunft über die Anzahl der projektierten DP-Slaves.
acBuffer[i] ff(-1)=kein Slave
00=Norm-Slave
1=Siemens ET 200 U
2=Siemens ET 200 K/B
3=allgemeine SPM-Station
Beispiel char acBuffer[127]; iResult = SoftnetDPReadCfg(acBuffer);

 

Beispiele
wpe1.jpg (7217 Byte)

SoftnetDP1:
input trigger I( "TYPEINFO", "TypeInfo", "SWORD[1]", "BIN" );
char a[3]; //Ausgabepuffer zur SPS
int o; int i;
init
{
SoftnetDPSetAccess(0);
SoftnetDPSetMaster(1);
SoftnetDPSetSlave(100);
SoftnetDPInit(); //Initialisierung der Profibuskarte
}
execute
{
i=I[0];
a[0]=itoc(i&255);
a[1]=itoc(iSHR(i,8)&255);
SoftnetDPOutput( 100,2,0,a);
}
done
{
SoftnetDPExit();
}

SoftnetDP2:
output O1("TYPEINFO","TypeInfo","SWORD[]","TIME_DOMAIN");
char e[20]; //Eingabepuffer von SPS
init
{
SoftnetDPSetAccess(0);
SoftnetDPSetMaster(1);
SoftnetDPSetSlave(100);
SoftnetDPInit(); //Initialisierung der Profibuskarte
}
execute
{
SoftnetDPInput ( 100,2,0,e);
O1<<ctoi(e[0]);
}
done
{
SoftnetDPExit();
}