Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
modbus_mapping_new_start_address()	      modbus_mapping_new_start_address()

Name
     modbus_mapping_new_start_address  - allocate four arrays of bits and regis-
     ters accessible from their starting addresses

Synopsis
     modbus_mapping_t* modbus_mapping_new_start_address(
	 unsigned int start_bits, unsigned int nb_bits,
	 unsigned int start_input_bits, unsigned int nb_input_bits,
	 unsigned int start_registers, unsigned int nb_registers,
	 unsigned int start_input_registers, unsigned int nb_input_registers);

Description
     The modbus_mapping_new_start_address() function shall allocate four  arrays
     to store bits, input bits, registers and inputs registers. The pointers are
     stored in modbus_mapping_t structure. All values of the arrays are initial-
     ized to zero.

     The  different  starting addresses make it possible to place the mapping at
     any address in each address space. This way, you can give access to clients
     to values stored at high addresses without allocating memory from	the  ad-
     dress  zero,  for	example to make available registers from 340 to 349, you
     can use:

     mb_mapping = modbus_mapping_new_start_address(0, 0, 0, 0, 340, 10, 0, 0);

     The newly created mb_mapping will have the following arrays:

     * tab_bits set to NULL

     * tab_input_bits set to NULL

     * tab_registers allocated to store 10 registers (uint16_t)

     * tab_input_registers set to NULL

     The clients can read the first register by using the address 340 in its re-
     quest.  On the server side, you should use the first index of the array  to
     set the value at this client address:

     mb_mapping->tab_registers[0] = 42;

     If it isn't necessary to allocate an array for a specific type of data, you
     can pass the zero value in argument, the associated pointer will be NULL.

     This function is convenient to handle requests in a Modbus server/slave.

Return value
     The  modbus_mapping_new_start_address() function shall return the new allo-
     cated structure if successful. Otherwise it shall return NULL and	set  er-
     rno.

Errors
     * ENOMEM, not enough memory.

Example
     /* The first value of each array is accessible at the defined address.
     The end address is ADDRESS + NB - 1. */
     mb_mapping = modbus_mapping_new_start_address(
	 BITS_ADDRESS, BITS_NB,
	 INPUT_BITS_ADDRESS, INPUT_BITS_NB,
	 REGISTERS_ADDRESS, REGISTERS_NB,
	 INPUT_REGISTERS_ADDRESS, INPUT_REGISTERS_NB
     );
     if (mb_mapping == NULL) {
	 fprintf(
	     stderr, "Failed to allocate the mapping: %s\n",
	     modbus_strerror(errno)
	 );
	 modbus_free(ctx);
	 return -1;
     }

See also
     * modbus_mapping_new <modbus_mapping_new.md>

     * modbus_mapping_free <modbus_mapping_free.md>

					      modbus_mapping_new_start_address()

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=modbus_mapping_new_start_address&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help