项目作者: adpuckett87

项目描述 :
Modbus TCP Client/Server
高级语言: C
项目地址: git://github.com/adpuckett87/modbus-client-server.git
创建时间: 2019-08-16T16:42:48Z
项目社区:https://github.com/adpuckett87/modbus-client-server

开源协议:BSD 3-Clause "New" or "Revised" License

下载


Modbus TCP Client/Server

Based on libmodbus

  • modbus-client is a standalone command line Modbus TCP client
  • modbus-server is a Modbus TCP server that uses mysql to store register values

Usage

  1. modbus-client ip_address slave_id r reg_type address [num_reg format]
  1. modbus-client ip_address slave_id w reg_type address value [format]

Register Type

  • 0 - Coil
  • 1 - Discrete Input
  • 3 - Input registers
  • 4 - Holding registers

Format

  • a - floating point abcd
  • b - floating point badc
  • c - floating point cdab
  • d - floating point dcba
  • (s)1 - 16-bit register. Optionally signed. Default.
  • (s)3 - 32-bit register. Optionally signed.
  • (s)6 - 64-bit register. Optionally signed.
  • (s)k - 32-bit Mod10k. Optionally signed.
  • (s)l - 48-bit Mod10k. Optionally signed.
  • (s)m - 64-bit Mod10k. Optionally signed.

Install modbus-client

Install libmodbus

From libmodbus documentation:

  1. chmod +x ./autogen.sh
  2. ./autogen.sh
  3. ./configure
  4. make install

May need to do this depending on distribution

  1. cp src/.libs/libmodbus.so* /usr/lib/
  2. ln -s -f /usr/lib/libmodbus.so.5.1.0 /usr/lib/libmodbus.so.5
  3. ln -s -f /usr/lib/libmodbus.so.5.1.0 /usr/lib/libmodbus.so

Compile modbus-client

  1. gcc modbus-client.c -o modbus-client `pkg-config --libs --cflags libmodbus`

Install modbus-server

Install libmodbus (see above) and inih

Compile modbus-server

  1. gcc inih/ini.c modbus-server.c -o modbus-server -std=gnu99 `mysql_config --cflags --libs` `pkg-config --libs --cflags libmodbus`
  2. cp modbus-server /usr/bin/

Make sure mysql is installed with libmysqlclient-dev

Choose a database and create the following table

  1. CREATE TABLE IF NOT EXISTS `modbusServer` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `regType` int(11) NOT NULL,
  4. `address` int(11) NOT NULL,
  5. `val` int(11) NOT NULL DEFAULT '0',
  6. `modifiedCount` int(11) NOT NULL DEFAULT '0',
  7. `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  8. PRIMARY KEY (`id`),
  9. KEY (`regType`),
  10. KEY (`address`),
  11. UNIQUE KEY (`regType`, `address`)
  12. ) ENGINE=InnoDB;

Copy ini to /etc and fill in mysql information. Mysql user should have read/write access

  1. cp modbus-server.ini /etc/

Run modbus-server

Optionally install modbus-server as a service

Install runit and execute the following commands

  1. mkdir -p /etc/sv/modbus-server/log
  2. mkdir /var/log/modbus-server
  3. cat > /etc/sv/modbus-server/run <<- EOM
  4. #!/bin/sh
  5. exec /usr/bin/modbus-server 2>&1
  6. EOM
  7. cat > /etc/sv/modbus-server/log/run <<- EOM
  8. #!/bin/sh
  9. exec svlogd -tt /var/log/modbus-server/
  10. EOM
  11. chmod +x /etc/sv/modbus-server/run
  12. chmod +x /etc/sv/modbus-server/log/run
  13. ln -s /etc/sv/modbus-server /etc/service/