forked from netdata-be/libnodave
-
Notifications
You must be signed in to change notification settings - Fork 0
/
readme
226 lines (183 loc) · 10.8 KB
/
readme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
THIS IS EXPERIMENTAL CODE !!!!
DON'T CONNECT TO REAL MACHINERY !!!!
IF YOU CONNECT TO PLCs, EXPECT RANDOM PLC DATA, PROGRAM INCLUDED, TO BE
**** OVERWRITTEN ****
EXPECT OUPUTS TO !!! CHANGE RANDOMLY !!!
EXPECT PLCs TO !!! STOP !!!
EXPECT PLCs TO REQIRE !!! COMPLETE ERASE PROCEDURES !!!
DO NOT run the test programs on PLCs if something is connected to their outputs.
DO NOT run the test programs on PLCs if current state must be preserved.
THE TEST PROGRAMS DO INTENTIONALLY MODIFY PLC MEMORY CONTENTS !!!
To use the test programs, you will have to adapt the name of the serial interface to
your needs.
If you test this code with devices others than those listed in the source code,
please let me know whether the code works with them.
News for release 0.8:
- The Delphi/Pascal glue unit nodave.pas should be fixed now.
- More MPI adapters should work now, among them those from Helmholz (or some of them).
If your adapter didn't work with former versions, try testMPI with options -2,-3 or -4.
Another FAT WARNING: The following new features are not as stable and well implemented as the old
ones. Expect difficulties, specially in error handling and when connections are interrupted!
- Libnodave can now use CPs and probably every other means of communicating with S7 CPUs
using already installed Siemens libraries & drivers for transport.
Of cause, this is for Win32 only.
To test this use testS7online /S7ONLINE.
/S7ONLINE is the name of an "access point", in this case the one Step7 uses. Usually,
the Siemens Software installs a control in System Controls where you can assign physical
interfaces to acces points and create new ones.
- Libnodave can now use Siemens USB-MPI-Adapters.
Under Linux, use the kernel module.
This will map the USB device to the first free USB serial port, e.g. /dev/ttyUSB0.
Then use:
testMPI -3 /dev/ttyS0
The -3 is a must. It selects the ONLY variant of "envelopes" around MPI-packets this device
can use.
If you cannot use the kernel module, because your kernel is to old or you cannot recompile it
for your kernel, try testUSB. This needs libUSB which can handle USB devices from userspace
testUSB anyNonsense. "anyNonsense" is just a placeholder, because the program prints out
the usage hints if called with no argument at all. testUSB may work or not. I had to
implement a ring buffer in usbGlue.c when I didn't have the adapter any more.
Under Win32 use testS7online together with original Siemens driver and dlls.
- Libnodave can now use the same transport protocol on serial ports Step7 uses with newer
adapters. I had to implement it for USB-MPI. You can try it with other MPI-adapters
specifying option -3 to testMPI or daveProtoMPI3 to daveNewInterface.
- Some MPI adapters that work with option -2 seem to need an STX at some place of in the
connectPLC function, others don't.
Specifying option -4 to testMPI or daveProtoMPI4 to daveNewInterface does the same as
option -2 or daveProtoMPI2, but with this extra STX. What works for your adapter is right.
If -2 and -4 work, what connects faster is right...
- Parts of the AS511 protocol for S5 PLCs have been integrated into libnodave. Beware, they
are NOT USEABLE at the moment. Don't mail me about bugs or nonsensical behaviour!!!
News for release 0.7.2:
- Visual Basic Declarations
- Visual Basic Demo courtesy of ....
- .dll has been compiled with the __stdcall directive. This was necessary for VB. I hope
it is ok for other languages also.
News for release 0.7:
- Delphi Component and demo courtesy of Axel Kinting.
- Reworked error reporting. Applications will get more detailed information. There should be less
situations where the library tries to continue current actions while it doesn't make sense any
more.
- Global variable daveDebug is no longer accessible. Use daveSetDebug, daveGetDebug instead.
- Examples how to use the Win32 .dll with C#
- Precompiled .dll generated by MSVC.
- Functions daveGetByte, daveGetWord etc. are no longer present. Use daveGetU8, daveGetS8 etc.
News for release 0.6.3:
Integration of PPI protocol for IBH-NetLink. More complete Pascal interface.
News for release 0.6.2:
Seemless integration of (MPI) protocol for IBH-NetLink. PPI over NetLink is still to do.
Pascal unit should be completely compatible with Borland Delphi now.
Users who miss the readoutXXX, runXXX, stopXXX programs: It's in the main tests now. See the options.
News for release 0.6:
Can load program blocks into CPU over MPI, ISO/TCP and PPI. See testMPIload, testPPILoad.
Can write multiple variables in a single request.
Can use single bit variables in multiple read/multiple write requests.
News for release 0.5:
Unified library for MPI, PPI and ISO over TCP.
Can read timers and counters.
Can read and write single bits.
News for release 0.4:
General:
The following applies to all versions of transport but IBH-Link, as I currently
have none to do tests :-(
Test programs now take options and the name of the serial port.
They do no longer write to your PLC unless you specify it with the -w option.
daveNewConnection has got 2 new parameters, rack and slot, to specify rack and slot for Ethernet
connections.
More of the common stuff went into daveCommon. This way, all transport variants should benefit
immediately from additional possibilities.
A few functions now return correct error codes.
New Features:
Libnodave can now use Ethernet connections to CPs 243,343,443 and both, IT and non-IT versions
of these.
Libnodave can now readout program and data blocks from a PLC. Try the readoutXXX programs.
Libnodave readout SZL Information. I don't know how this is called in English. It's diagnostic
information. SZL stands for "System Zustands-Liste", literally "System State Lists". You
will get only a sequence of bytes. See Siemens Manuals about their meanings. To try it, use
the -z option on the testXXX programs.
ISO over TCP:
Usage:
type ./testISO_TCP to get some hints.
The program assumes you use a CP 343 or 443 with a CPU on rack 0,slot 2.
If somebody has CPUs/other communicating devices on other positions, she can
specify that in daveNewConnection(). Let me know whether it works.
If you use a CP 243, you must specify the -2 option.
This makes a connection of the same kind as MicroWin does. Your CFG-LED will light.
This does not mean that libnodave changes anything in any configuration.
I saw 3rd party OPC servers using the same kind of connection and I gues they will
light your CFG led as well.
The CPs, at least the 243, begin to send a sort of keepalive packets when the connection
is idle. I don't whether LINUX answers these packets correctly. I doubt the way Siemens
implemented that is fully correct.
Anyway, the CP closes the (ISO or logical, NOT tcp) connection after 30 seconds idle. You
need to connect again with connectPLC() if this happens, or you will get no more answers.
If your application intentionally polls the PLC less often, you should consider to close
the TCP connection willingly and reconnect completely. This may save money on network
connections you pay by time or volume.
MPI:
I integrated the protocol version found by Andrew Rostovtsew, which had been in the /rostic
subdirectory. You can choose it specifying the option -2 to testMPI. See testMPI source about
how to specify the protocol version. I found that an adapter with order code
6ES7 972-0C821-0XAC (or was it 6ES7 972-0CA21-0XAC ?) worked only with that version.
News for release 0.4.1:
MPI:
Fixed a bug in initialization of TS adapter 6ES7 972-0CA33-0XAC.
Seems it didn?t work since 0.3 :-(
New Features:
Libnodave can now make your PLC stop and run.
THE READING OF MULTIPLE VARIABLES, EVEN IF ALREADY BENCHMARKED, IS NOT YET
USEABLE. YOU CANNOT YET RETRIEVE THE RESULTS !!
News for release 0.4.2:
Applied patch for variable Profibus speed from Andrew Rostovtsew.
The Profibus speed is a new parameter to daveNewInterface, so you will need to change
existing programs :-(
The parameter is only meaningful for the MPI protocol. It is meaningful for but
not yet supported by nodaveIBH. For all other protocols, any integer will do.
Cleaned up most warnings.
Bryan D. Payne compiled libnodave under Cygwin successfully, but tested only
ISO over TCP. I did not quite apply his changes, but cleaned up include directives,
provided support in the Makefile and replaced the byteswap.h he used by
conversion functions that can do without it. This will hopefully also easy porting
to other systems.
THE NEW MULTIPLE READ FEATURE:
The protocol allows to read from multiple addresses in the PLC with a single request,
minmizing overhead and time consumtion. The problem with that is that the result cannot
be returned as a continous byte array. The reason for this is that one of the addresses
might not exist, e.g. a data block that is not present in the PLC. So there is an error
information for each single address and the position the user data in the answer varies.
To use multiple read function, do:
PDU p;
daveResultSet rs; // a special structure to hold result data
davePrepareReadRequest(dc, &p); // This prepares a read request
daveAddVarToReadRequest(&p,daveInputs,0,0,1); // Adds a request to read 1 byte from IB0
daveAddVarToReadRequest(&p,daveFlags,0,0,4); // Adds a request to read 4 bytes from FB0
daveAddVarToReadRequest(&p,daveDB,6,20,2); // Adds a request to read 2 bytes from DB6:DBB20
daveAddVarToReadRequest(&p,daveFlags,0,12,2); // Adds a request to read 2 bytes from FB12
res=daveExecReadRequest(dc, &p, &rs); // Execute all these requests
/*
Now, res has the information whether the entire request succeeded.
If so, the result set contains the four results and their error states. For the exact
structure refer to nodaveCommon.h. To read the data using the conversion functions
like daveGetByte, daveGetWORD etc., you have to call daveUseResult(dc, rs, <result number>)
first. daveUseResult() also returns the error status for this particular result.
*/
res=daveUseResult(dc, rs, 0); // first result
/*
Last, you should call daveFreeResults() with the daveResultSet, to free the memory
occupied by it.
*/
News for release 0.5:
Made a unique library for MPI, PPI and ISO over TCP.
Protocol specific functions are called via pointers to these functions. The pointers
are initialized in daveNewInterface depending on the choosen protocol.
As some users reported problems using shared libraries, this is how to do it:
type make This will build statically linked test programs and the
shared libraries libnodave.so and libnodaveIBH.so.
type make install This will copy the shared libraries to /usr/local/lib and
invoke ldconfig. Now the libraries are available to both, linker
and program loading mechanism. You may need root rights to execute
this step successfully.
type make dynamic This will build dynamically linked versions of the test programs
testMPI, testPPI and testISO_TCP named testMPId, testPPId and
testISO_TCPd.
Have Fun !