- NAME Device::Modbus::Server::TCP -- Modbus TCP server class
- Net::Server::MultiType METHODS USED
- SEE ALSO
- GITHUB REPOSITORY
- COPYRIGHT AND LICENSE
use My::Unit; use Device::Modbus::Server::TCP; use strict; use warnings; my $unit = My::Unit->new( id => 3 ); my $server = Device::Modbus::Server::TCP->new( server_type => ['PreFork'], log_level => 2, min_servers => 10, max_servers => 30, min_spare_servers => 5, max_spare_servers => 10, max_requests => 1000, ); $server->add_server_unit($unit); $server->start;
One of the goals for Device::Modbus is to have the ability to write Modbus servers that execute arbitrary code. This class defines the Modbus TCP version of such servers. Please see the documentation in Device::Modbus::Server for a thorough description of the interface; refer to this document only for the details inherent to Modbus TCP.
Device::Modbus::Server inherits from Net::Server::MultiType, so be sure to read carefully its documentation. You can pass Net::Server::MultiType parameters via the
new constructor, via the
start method, or using a configuration file as defined by the
conf_file argument described in Net::Derver. Note that
start is just a wrapper for Net::Server's
The example in the synopsis of this document is using the PreFork personality of Net::Server. If you do not specify a personality, it will default to Single.
All the configuration possibilities found in Net::Server::MultiType are available. The default parameters for Device::Modbus::Server::TCP are:
log_level => 2, log_file => undef, port => 502, host => '*', ipv => 4, proto => 'tcp',
The methods defined by Net::Server::MultiType and used by Device::Modbus::Server::TCP are:
This is used only to pass the default parameters of the server. Note that this is the lowest priority form of configuration; these values can be overwritten by passing arguments to
new, by passing command-line arguments, by passing arguments to
start, or by using a configuration file. You can, of course, write your own
default_values method in a sub-class.
This is where the generic Modbus server method is called. It listens for requests, processes them, and returns the responses.
run method is simply wrapped by this module's
start to keep a certain symmetry with Device::Modbus::RTU::Server.
This method is used to make the underlying socket available with the
socket method of the server.
While Modbus RTU processes are single-process, this server is not. It is important to notice that, because of its forking nature, each process has its own copy of the units you defined. While there are indeed mechanisms for them to communicate (see Net::Server), in general they are completely independent. Global variables are then global by process only and not accross the whole process group. This boils down to the fact that the example server in this distribution, which keeps register values in a per-process global variable, will not work in a real world scenario. It would be necessary to persist registers outside of the server, like in a database.
Most of the functionality is described in Device::Modbus::Server.
You can find the repository of this distribution in GitHub.
Julio Fraire, <email@example.com>
Copyright (C) 2015 by Julio Fraire
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.