Lydia - Printhead
Loading...
Searching...
No Matches
Modbus Function Codes for Holding/Input Registers

Functions

void Modbus::get_FC1 ()
 
void Modbus::get_FC3 ()
 
int8_t Modbus::process_FC16 (uint16_t *regs, uint8_t u8size)
 This method processes function 16 This method writes a word array assigned by the master.
 
int8_t Modbus::process_FC3 (uint16_t *regs, uint8_t u8size)
 This method processes functions 3 & 4 This method reads a word array and transfers it to the master.
 
int8_t Modbus::process_FC6 (uint16_t *regs, uint8_t u8size)
 This method processes function 6 This method writes a value assigned by the master to a single word.
 

Detailed Description

Function Documentation

◆ get_FC1()

void Modbus::get_FC1 ( )
private

This method processes functions 1 & 2 (for master) This method puts the slave answer into master data buffer

TODO: finish its implementation

Definition at line 1261 of file ModbusRtu.h.

1262{
1263 uint8_t u8byte, i;
1264 u8byte = 0;
1265
1266 // for (i=0; i< au8Buffer[ 2 ] /2; i++) {
1267 // au16regs[ i ] = word(
1268 // au8Buffer[ u8byte ],
1269 // au8Buffer[ u8byte +1 ]);
1270 // u8byte += 2;
1271 // }
1272}
Definition xtimer.h:21

◆ get_FC3()

void Modbus::get_FC3 ( )
private

This method processes functions 3 & 4 (for master) This method puts the slave answer into master data buffer

Definition at line 1280 of file ModbusRtu.h.

1281{
1282 uint8_t u8byte, i;
1283 u8byte = 3;
1284
1285 for (i = 0; i < au8Buffer[2] / 2; i++)
1286 {
1287 au16regs[i] = word(
1289 au8Buffer[u8byte + 1]);
1290 u8byte += 2;
1291 }
1292}
uint16_t * au16regs
Definition ModbusRtu.h:165
uint8_t au8Buffer[MAX_BUFFER]
Definition ModbusRtu.h:162

◆ process_FC16()

int8_t Modbus::process_FC16 ( uint16_t * regs,
uint8_t u8size )
private

This method processes function 16 This method writes a word array assigned by the master.

Returns
u8BufferSize Response to master length

Definition at line 1502 of file ModbusRtu.h.

1503{
1504 uint8_t u8func = au8Buffer[FUNC]; // get the original FUNC code
1508 uint8_t i;
1509 uint16_t temp;
1510
1511 // build header
1512 au8Buffer[NB_HI] = 0;
1515
1516 // write registers
1517 for (i = 0; i < u8regsno; i++)
1518 {
1519 temp = word(
1520 au8Buffer[(BYTE_CNT + 1) + i * 2],
1521 au8Buffer[(BYTE_CNT + 2) + i * 2]);
1522
1523 regs[u8StartAdd + i] = temp;
1524 }
1526 sendTxBuffer();
1527
1528 return u8CopyBufferSize;
1529}
@ RESPONSE_SIZE
Definition ModbusRtu.h:81
@ NB_LO
Number of coils or registers low byte.
Definition ModbusRtu.h:98
@ ADD_LO
Address low byte.
Definition ModbusRtu.h:96
@ FUNC
Function code position.
Definition ModbusRtu.h:94
@ NB_HI
Number of coils or registers high byte.
Definition ModbusRtu.h:97
@ ADD_HI
Address high byte.
Definition ModbusRtu.h:95
@ BYTE_CNT
byte counter
Definition ModbusRtu.h:99
uint8_t u8BufferSize
Definition ModbusRtu.h:163
void sendTxBuffer()
This method transmits au8Buffer to Serial line. Only if u8txenpin != 0, there is a flow handling in o...
Definition ModbusRtu.h:962

◆ process_FC3()

int8_t Modbus::process_FC3 ( uint16_t * regs,
uint8_t u8size )
private

This method processes functions 3 & 4 This method reads a word array and transfers it to the master.

Returns
u8BufferSize Response to master length

Definition at line 1357 of file ModbusRtu.h.

1358{
1359
1363 uint8_t i;
1364
1365 au8Buffer[2] = u8regsno * 2;
1366 u8BufferSize = 3;
1367
1368 for (i = u8StartAdd; i < u8StartAdd + u8regsno; i++)
1369 {
1371 u8BufferSize++;
1373 u8BufferSize++;
1374 }
1376 sendTxBuffer();
1377
1378 return u8CopyBufferSize;
1379}

◆ process_FC6()

int8_t Modbus::process_FC6 ( uint16_t * regs,
uint8_t u8size )
private

This method processes function 6 This method writes a value assigned by the master to a single word.

Returns
u8BufferSize Response to master length

Definition at line 1421 of file ModbusRtu.h.

1422{
1423
1427
1428 regs[u8add] = u16val;
1429
1430 // keep the same header
1432
1434 sendTxBuffer();
1435
1436 return u8CopyBufferSize;
1437}