Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
becki:linux:modbus [2010-10-29 13:56] becki |
becki:linux:modbus [2013-06-13 13:56] (aktuell) becki |
||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
===== Modbus Command Overview == | ===== Modbus Command Overview == | ||
- | ^ Code ^ Bits ^ Target ^ Count ^ Direction ^ Name in Spec ^ libmodbus Function Name ^ | + | ^ Code ^ Target ^ Count ^ Direction ^ Name in Spec ^ Libmodbus 3 fkt name ^ libmodbus 2 fkt name ^ |
- | | 01 | 1 | DO | many | read | Read Coils | ''read_coil_status'' | | + | | ''01 0x01'' | DO | many | read | Read Coils | ''modbus_read_bits'' | ''read_coil_status'' | |
- | | 02 | 1 | DI | many | read | Read Discrete Inputs | ''read_input_status'' | | + | | ''02 0x02'' | DI | many | read | Read Discrete Inputs | ''modbus_read_input_bits'' | ''read_input_status'' | |
- | | 03 | 16 | AO | many | read | Read Holding Registers | ''read_holding_registers'' | | + | | ''03 0x03'' | AO | many | read | Read Holding Registers | ''modbus_read_registers'' | ''read_holding_registers'' | |
- | | 04 | 16 | AI | many | read | Read Input Register | ''read_input_registers'' | | + | | ''04 0x04'' | AI | many | read | Read Input Register | ''modbus_read_input_registers'' | ''read_input_registers'' | |
- | | 05 | 1 | DO | one | write | Write Single Coil | ''force_single_coil'' | | + | | ''05 0x05'' | DO | one | write | Write Single Coil | ''modbus_write_bit'' | ''force_single_coil'' | |
- | | 06 | 16 | AO | one | write | Write Single Register | ''preset_single_register'' | | + | | ''06 0x06'' | AO | one | write | Write Single Register | ''modbus_write_register'' | ''preset_single_register'' | |
- | | 15 | 1 | DO | many | write | Write Multiple Coils | ''force_multiple_coils'' | | + | | ''15 0x0f'' | DO | many | write | Write Multiple Coils | ''modbus_write_bits'' | ''force_multiple_coils'' | |
- | | 16 | 16 | AO | many | write | Write Multiple registers | ''preset_multiple_registers'' | | + | | ''16 0x10'' | AO | many | write | Write Multiple registers | ''modbus_write_registers'' | ''preset_multiple_registers'' | |
+ | | ''23 0x17'' | AI/AO | many | both | Wrt/Rd Multiple registers | ''modbus_write_and_read_registers'' | :?: | | ||
- | [[http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf|Source]] | + | Sources [[http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf|Spec]] [[http://libmodbus.org/site_media/html/libmodbus.html|Manpage]] |
More information sources: | More information sources: | ||
Zeile 52: | Zeile 53: | ||
===== Libmodbus == | ===== Libmodbus == | ||
+ | ==== Usage / Doc == | ||
+ | |||
+ | See http://libmodbus.org/site_media/html/libmodbus.html | ||
+ | |||
==== Installation == | ==== Installation == | ||
+ | |||
+ | Download the [[http://github.com/downloads/stephane/libmodbus/libmodbus-3.0.2.tar.gz|source]] and use the [[http://think-deep.com/becki/slackbuilds/pack.php?n=libmodbus|Slack build script]]. | ||
+ | |||
+ | <note warning>The rest of this section is obsolete</note> | ||
Note: You could get the latest devel release with ''git clone http://github.com/stephane/libmodbus.git'', but this has no ''configure'' script, so we use the lataest stable release instead. | Note: You could get the latest devel release with ''git clone http://github.com/stephane/libmodbus.git'', but this has no ''configure'' script, so we use the lataest stable release instead. | ||
- | Download v 2.0.3 from [[http://copyleft.free.fr/wordpress/index.php/libmodbus/|here]] and do the usual ''./confiure; make; su; make install;''. This installs the following objects to ''/usr/local/'': | + | Download v 2.0.3 from [[http://libmodbus.org/download/|here]] |
+ | |||
+ | Libmodbus has the unpleasant behaviour, that it prints error messages to ''stdout'' instead of ''stderr''. If you plan to build your application like a filter which commuicates over ''stdin / stdout'' to the world, than you will get problems, in that libmodbus may interfere your protocoll or whatever with error messages. Therfore we patch the source a little bit and are writing error messages to ''stderr'' instead of ''stdout''. Look for the function ''error_treat'' in ''modbus/modbus.c'' and replace the ''printf'' function with ''fprintf'': | ||
+ | |||
+ | <code c> | ||
+ | static void error_treat(modbus_param_t *mb_param, int code, const char *string) | ||
+ | { | ||
+ | printf("\nERROR %s (%d)\n", string, code); | ||
+ | </code> | ||
+ | |||
+ | <code c> | ||
+ | static void error_treat(modbus_param_t *mb_param, int code, const char *string) | ||
+ | { | ||
+ | fprintf(stderr, "\nERROR %s (%d)\n", string, code); | ||
+ | </code> | ||
+ | |||
+ | Now do the usual ''./confiure; make; su; make install;''. This installs the following objects to ''/usr/local/'': | ||
lib/libmodbus.so | lib/libmodbus.so | ||
Zeile 65: | Zeile 90: | ||
include/modbus/modbus.h | include/modbus/modbus.h | ||
- | Then do ''ldconfig'' to update the library system info. | + | Then do ''ldconfig'' to update the library system info. |
===== Wago Adressing in Libmodbus == | ===== Wago Adressing in Libmodbus == |