contents · 2 contents. chapter 1 introduction python-snap7 is a python wrapper for thesnap7...
TRANSCRIPT
![Page 1: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/1.jpg)
python-snap7 DocumentationRelease 0.1
Gijs Molenaar, Stephan Preeker
February 28, 2014
![Page 2: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/2.jpg)
![Page 3: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/3.jpg)
Contents
i
![Page 4: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/4.jpg)
ii
![Page 5: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/5.jpg)
python-snap7 Documentation, Release 0.1
Contents:
Contents 1
![Page 6: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/6.jpg)
python-snap7 Documentation, Release 0.1
2 Contents
![Page 7: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/7.jpg)
CHAPTER 1
Introduction
python-snap7 is a Python wrapper for the Snap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernetcommunication suite for interfacing natively with Siemens S7 PLCs.
Currently only Linux and Python 2.7 are supported, but support for Windows, Python 2.7 and Python 3+ is not faraway.
The project development is centralized on github.
3
![Page 8: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/8.jpg)
python-snap7 Documentation, Release 0.1
4 Chapter 1. Introduction
![Page 9: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/9.jpg)
CHAPTER 2
Installation
here you can find out how to install python-snap7 on your system.
2.1 Snap7
To use python-snap7 you need to have the snap7 library installed.
2.1.1 Ubuntu
If you are using Ubuntu you can use the Ubuntu packages from our launchpad PPA. To install:
$ sudo sudo add-apt-repository ppa:gijzelaar/snap7$ sudo apt-get update$ sudo apt-get install snap71 snap7-dev
2.1.2 Compile from source
If you are not using Ubuntu or if you want to have more control you can download the latest source from the sourceforcepage and do a manual compile. Download the file and run:
$ p7zip -d snap7-full-1.0.0.7z # requires the p7 program$ cd build/<platform> # where platform is unix or windows$ make -f <arch>.mk # where arch is your architecture, for example x86_64_linux
For more information about or help with compilation please check out the documentation on the snap7 website.
2.2 snap7-python
python-snap7 is available on PyPI. You can install it by using pip:
$ pip install python-snap7
You can also install it from the git repository or from a source tarball:
$ python ./setup.py install
5
![Page 10: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/10.jpg)
python-snap7 Documentation, Release 0.1
6 Chapter 2. Installation
![Page 11: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/11.jpg)
CHAPTER 3
development
3.1 Github
We develop python-snap7 on github. If you have any problems with python-snap7 please raise an issue in the issuetracker. Even better is if you have a solution to problem! In that case you can make our live easier by following thesesteps:
• fork our repository on github
• Add a tests that will fail because of the problem
• Fix the problem
• Run the test suite again
• Commit to your repository
• Issue a github pullrequest.
Also we try to be as much pep8 compatible as possible, where possible and reasonable.
3.2 Test suite
python-snap7 comes with a test suite with 100% coverage. This test suite verifies that the code actually works andmakes development much easier. For now the client tests require a running fake server. Due to the design of the snap7library the server needs to run on TCP port 102. On unix all ports in the range from 0 to 1023 need to as root, so alsothis process needs to as root. Also the server tests need to run as root. To run all tests please run:
$ sudo python test/test_partner.py$ sudo python test/test_server.py$ nohup sudo snap7/bin/snap7-server.py & # this runs a snap7 in the background$ python test/test_client.py # the client tests don’t need to run as root
If the test complain about missing Python modules make sure the source directory is in your PYTHONPATH environ-ment variable, or the python-snap7 module is installed.
3.3 Credits
python-snap7 is created by Gijs Molenaar and Stephan Preeker.
7
![Page 12: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/12.jpg)
python-snap7 Documentation, Release 0.1
Special thanks to go to Davide Nardella for creating snap7, Thomas Hergenhahn for his libnodave and Thomas W forhis S7comm wireshark plugin.
8 Chapter 3. development
![Page 13: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/13.jpg)
CHAPTER 4
Client
Snap7 client used for connection to a siemens7 server.
class snap7.client.ClientA snap7 client
db_full_upload(_type, block_num)Uploads a full block body from AG
db_get(db_number)Uploads a DB from AG.
db_read(db_number, start, size)This is a lean function of Cli_ReadArea() to read PLC DB.
Returns user buffer.
db_upload(block_num)Uploads a block body from AG
Parameters data – bytearray
destroy()destroy a client.
list_blocks()Returns the AG blocks amount divided by type.
Returns a snap7.types.BlocksList object.
list_blocks_of_type(blocktype, size)This function returns the AG list of a specified block type.
read_area(area, dbnumber, start, amount)This is the main function to read data from a PLC. With it you can read DB, Inputs, Outputs, Merkers,Timers and Counters.
snap7.client.bytearray_to_buffer(data)Convert a byte arra to a ctypes / snap7 type
snap7.client.error_wrap(func)Parses a s7 error code returned the decorated function.
9
![Page 14: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/14.jpg)
python-snap7 Documentation, Release 0.1
10 Chapter 4. Client
![Page 15: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/15.jpg)
CHAPTER 5
Server
Snap7 server used for mimicking a siemens 7 server.
class snap7.server.Server(log=True)A fake S7 server.
create()create the server.
destroy()destroy the server.
event_text(event)Returns a textual explanation of a given event object
Parameters event – an PSrvEvent struct object
Returns the error string
get_mask(kind)Reads the specified filter mask.
get_param(number)Reads an internal Server object parameter.
get_status()Reads the server status, the Virtual CPU status and the number of the clients connected.
Returns server status, cpu status, client count
pick_event()Extracts an event (if available) from the Events queue.
snap7.server.error_wrap(func)Parses a s7 error code returned the decorated function.
11
![Page 16: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/16.jpg)
python-snap7 Documentation, Release 0.1
12 Chapter 5. Server
![Page 17: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/17.jpg)
CHAPTER 6
Partner
Snap7 code for partnering with a siemens 7 server.
This allows you to create a S7 peer to peer communication. Unlike the client-server model, where the client makes arequest and the server replies to it, the peer to peer model sees two components with same rights, each of them cansend data asynchronously. The only difference between them is the one who is requesting the connection.
class snap7.partner.Partner(active=False)A snap7 partner.
as_b_send()Sends a data packet to the partner. This function is asynchronous, i.e. it terminates immediately, a com-pletion method is needed to know when the transfer is complete.
b_recv()Receives a data packet from the partner. This function is synchronous, it waits until a packet is received orthe timeout supplied expires.
b_send()Sends a data packet to the partner. This function is synchronous, i.e. it terminates when the transfer job(send+ack) is complete.
check_as_b_recv_completion()Checks if a packed received was received.
check_as_b_send_completion()Checks if the current asynchronous send job was completed and terminates immediately.
create(active=False)Creates a Partner and returns its handle, which is the reference that you have to use every time you refer tothat Partner.
Parameters active – 0
Returns a pointer to the partner object
destroy()Destroy a Partner of given handle. Before destruction the Partner is stopped, all clients disconnected andall shared memory blocks released.
get_last_error()Returns the last job result.
get_param()Reads an internal Partner object parameter.
13
![Page 18: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/18.jpg)
python-snap7 Documentation, Release 0.1
get_stats()Returns some statistics.
Returns a tuple containing bytes send, received, send errors, recv errors
get_status()Returns the Partner status.
get_times()Returns the last send and recv jobs execution time in milliseconds.
set_param()Sets an internal Partner object parameter.
set_recv_callback()Sets the user callback that the Partner object has to call when a data packet is incoming.
set_send_callback()Sets the user callback that the Partner object has to call when the asynchronous data sent is complete.
stop()Stops the Partner, disconnects gracefully the remote partner.
wait_as_b_send_completion()Waits until the current asynchronous send job is done or the timeout expires.
snap7.partner.error_wrap(func)Parses a s7 error code returned the decorated function.
14 Chapter 6. Partner
![Page 19: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/19.jpg)
CHAPTER 7
Indices and tables
• genindex
• modindex
• search
15
![Page 20: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/20.jpg)
python-snap7 Documentation, Release 0.1
16 Chapter 7. Indices and tables
![Page 21: Contents · 2 Contents. CHAPTER 1 Introduction python-snap7 is a Python wrapper for theSnap7 library. Snap7 i san open source, 32/64 bit, multi-platform Ethernet ... his S7comm wireshark](https://reader030.vdocuments.net/reader030/viewer/2022040720/5e2be20edc17374dd320020c/html5/thumbnails/21.jpg)
Python Module Index
ssnap7.client, ??snap7.partner, ??snap7.server, ??
17