# Probleme mit Libnodave und Visual Basic



## Donnerkeil (3 April 2006)

Liebe Leute!
Ich probiere gerade die LibNoDave 0.81 mit Visual Basic 6 aus. Nutze Field PG mit CP5611 an einer S7-315. Zugangspunkt ist S7ONLINE. Alles funktioniert wunderbar bis ich die SPS ausschalte oder Kabel trenne. Dann kommt beim Lesen natürlich eine Fehlermeldung. Daraufhin trenne ich die Verbindung softwareseitig (cleanup), schalte SPS wieder ein, initialisiere Verbindung softwareseitig wieder (funktioniert auch) doch dann bekomme ich beim Lesen (daveReadBytes) Fehler "-128".
Frage:
Was bedeutet dies, bzw. was kann ich tun damit mein VB-Programm nach aus- und einschalten der SPS wieder von selber läuft?

Habe eine universelle Betriebsdatenerfassung programmiert, kann dieses aber nicht an Kunden weitergeben, wenn ich dieses Problem nicht in den Griff bekomme.

Wenn mir Jemand helfen könnte, wäre das echt toll.

Danke im voraus
Donnerkeil


----------



## Zottel (3 April 2006)

Probier mal, im Sub cleanup an Stelle von

closePort(ph)

closeS7online(ph)

aufzurufen.


----------



## Ralle (3 April 2006)

Hier noch etwas zu den Fehlern aus dem Code:

.h-Datei:


```
/*
    Result codes. Genarally, 0 means ok, 
    >0 are results (also errors) reported by the PLC
    <0 means error reported by library code.
*/
#define daveResOK 0    /* means all ok */
#define daveResNoPeripheralAtAddress 1  /* CPU tells there is no peripheral at address */
#define daveResMultipleBitsNotSupported 6  /* CPU tells it does not support to read a bit block with a */
      /* length other than 1 bit. */
#define daveResItemNotAvailable200 3  /* means a a piece of data is not available in the CPU, e.g. */
      /* when trying to read a non existing DB or bit bloc of length<>1 */
      /* This code seems to be specific to 200 family. */
 
#define daveResItemNotAvailable 10  /* means a a piece of data is not available in the CPU, e.g. */
      /* when trying to read a non existing DB */
#define daveAddressOutOfRange 5   /* means the data address is beyond the CPUs address range */
#define daveWriteDataSizeMismatch 7  /* means the write data size doesn't fit item size */
#define daveResCannotEvaluatePDU -123     /* PDU is not understood by libnodave */
#define daveResCPUNoData -124 
#define daveUnknownError -125 
#define daveEmptyResultError -126 
#define daveEmptyResultSetError -127 
#define daveResUnexpectedFunc -128 
#define daveResUnknownDataUnitSize -129
#define daveResNoBuffer -130
#define daveNotAvailableInS5 -131
#define daveResShortPacket -1024 
#define daveResTimeout -1025
```
 
.c-Datei

```
/*
    error code to message string conversion:
*/
char * DECL2 daveStrerror(int code) {
    switch (code) {
 case daveResOK: return "ok";
 case daveResMultipleBitsNotSupported:return "the CPU does not support reading a bit block of length<>1";
 case daveResItemNotAvailable: return "the desired item is not available in the PLC";
 case daveResItemNotAvailable200: return "the desired item is not available in the PLC (200 family)";
 case daveAddressOutOfRange: return "the desired address is beyond limit for this PLC";
 case daveResCPUNoData : return "the PLC returned a packet with no result data";
 case daveUnknownError : return "the PLC returned an error code not understood by this library";
 case daveEmptyResultError : return "this result contains no data";
 case daveEmptyResultSetError: return "cannot work with an undefined result set";
 case daveResCannotEvaluatePDU: return "cannot evaluate the received PDU";
 case daveWriteDataSizeMismatch: return "Write data size error";
 case daveResNoPeripheralAtAddress: return "No data from I/O module";
 case daveResUnexpectedFunc: return "Unexpected function code in answer";
 case daveResUnknownDataUnitSize: return "PLC responds with an unknown data type";
 
 case daveResShortPacket: return "Short packet from PLC";
 case daveResTimeout: return "Timeout when waiting for PLC response";
 case daveResNoBuffer: return "No buffer provided";
 case daveNotAvailableInS5: return "Function not supported for S5";
 
 case 0x8000: return "function already occupied.";
 case 0x8001: return "not allowed in current operating status.";
 case 0x8101: return "hardware fault.";
 case 0x8103: return "object access not allowed.";
 case 0x8104: return "context is not supported. Step7 says:Function not implemented or error in telgram.";
 case 0x8105: return "invalid address.";
 case 0x8106: return "data type not supported.";
 case 0x8107: return "data type not consistent.";
 case 0x810A: return "object does not exist.";
 case 0x8301: return "insufficient CPU memory ?";
 case 0x8402: return "CPU already in RUN or already in STOP ?";
 case 0x8404: return "severe error ?";
 case 0x8500: return "incorrect PDU size.";
 case 0x8702: return "address invalid."; ;
 case 0xd002: return "Step7:variant of command is illegal.";
 case 0xd004: return "Step7:status for this command is illegal.";
 case 0xd0A1: return "Step7:function is not allowed in the current protection level.";
 case 0xd201: return "block name syntax error.";
 case 0xd202: return "syntax error function parameter.";
 case 0xd203: return "syntax error block type.";
 case 0xd204: return "no linked block in storage medium.";
 case 0xd205: return "object already exists.";
 case 0xd206: return "object already exists.";
 case 0xd207: return "block exists in EPROM.";
 case 0xd209: return "block does not exist/could not be found.";
 case 0xd20e: return "no block present.";
 case 0xd210: return "block number too big.";
// case 0xd240: return "unfinished block transfer in progress?";  // my guess
 case 0xd240: return "Coordination rules were violated.";
/*  Multiple functions tried to manipulate the same object.
    Example: a block could not be copied,because it is already present in the target system
    and
*/    
 case 0xd241: return "Operation not permitted in current protection level.";
/**/ case 0xd242: return "protection violation while processing F-blocks. F-blocks can only be processed after password input.";
 case 0xd401: return "invalid SZL ID.";
 case 0xd402: return "invalid SZL index.";
 case 0xd406: return "diagnosis: info not available.";
 case 0xd409: return "diagnosis: DP error.";
 case 0xdc01: return "invalid BCD code or Invalid time format?";
 default: return "no message defined!";
    }
}
```


----------



## Donnerkeil (3 April 2006)

Hallo Zottel!

Ich habe schon closeS7online(ph) ausprobiert, hat aber nichts geholfen.


----------



## Zottel (3 April 2006)

S7-online ist die jüngste und daher am wenigsten ausgereifte Möglichkeit, die Libnodave bietet :-(

Eine *Notlösung* könnte sein, daß du dein VB-Programm ganz beendest und aus einer Batch-Datei neu startest.


----------



## Donnerkeil (3 April 2006)

Hallo Zottel!

Genau das habe ich schon probiert und es funktioniert auch. Ist aber natürlich nur eine Notlösung. S7Online wollte ich nur benutzen, da ein möglicher Kunde schon einen PC mit Siemens PB-PCI-Karte hat (für Visu) und wenn ich diese nutzen will, muss ich doch S7-Online nehmen, oder?

Aber trotzdem Danke
Donnerkeil


----------



## Ralle (3 April 2006)

Wenn gleichzeitig die Visu läuft könnte es Probleme geben, wie Zottel schon sagte, s7Online hat noch einige Probleme. Eine weitere Möglichkeit wäre Prodave-Mini von Siemens (man kann nur Datenbausteine lesen und beschreiben, dafür aber recht preiswert).


----------



## Donnerkeil (3 April 2006)

Hallo Ralle!

Wenn ich nicht S7-Online verwende soll, aber trotzdem MPI oder Profibus nutzen möchte , was brauche ich dann PC-seitig für die Libnodave?

Gruß
Donnerkeil


----------



## seeba (3 April 2006)

Donnerkeil schrieb:
			
		

> Hallo Ralle!
> 
> Wenn ich nicht S7-Online verwende soll, aber trotzdem MPI oder Profibus nutzen möchte , was brauche ich dann PC-seitig für die Libnodave?
> 
> ...


Für MPI einen RS232<->MPI Adapter! Ob PROFIBUS ohne S7online geht, ist fraglich. Sollte man mal testen!


----------



## Donnerkeil (3 April 2006)

Hallo seeba!

Funktionieren alle RS232-MPI Adapter oder sind bestimmte Hersteller zu empfehlen?

Gruß Donnerkeil


----------



## seeba (3 April 2006)

Tests where done using:
MPI adapter 6ES7 972-0CA22-0XAC.
 MPI adapter 6ES7 972-0CA23-0XAC.

Teleservice adapter 6ES7 972-0CA33-0XAC.
 
MPI adapter 6ES7 972-0CA11-0XAC.
 
CPU 315-2DP.


----------



## Gerhard Bäurle (3 April 2006)

Donnerkeil schrieb:
			
		

> Funktionieren alle RS232-MPI Adapter oder sind bestimmte Hersteller zu empfehlen?


 
Hallo,

die Geräte der Hersteller Siemens, DELTALOGIC/Helmholz 
und PI/Träger sollten funktionieren.

Weiter unterstützt libnodave auch die NetLink-Geräte:

http://www.deltalogic.de/pbhw/netlink/netlink.htm

Sind teurer als die seriellen Geräte, können aber
PROFIBUS-seitig bis 12 MBits/s. 

Viele Grüße

Gerhard Bäurle


----------

