Lydia - Printhead
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. More...
 
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. More...
 
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. More...
 

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 }

◆ 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(
1288  au8Buffer[u8byte],
1289  au8Buffer[u8byte + 1]);
1290  u8byte += 2;
1291  }
1292 }

◆ 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
1505  uint8_t u8StartAdd = au8Buffer[ADD_HI] << 8 | au8Buffer[ADD_LO];
1506  uint8_t u8regsno = au8Buffer[NB_HI] << 8 | au8Buffer[NB_LO];
1507  uint8_t u8CopyBufferSize;
1508  uint8_t i;
1509  uint16_t temp;
1510 
1511  // build header
1512  au8Buffer[NB_HI] = 0;
1513  au8Buffer[NB_LO] = u8regsno;
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  }
1525  u8CopyBufferSize = u8BufferSize + 2;
1526  sendTxBuffer();
1527 
1528  return u8CopyBufferSize;
1529 }

◆ 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 
1360  uint8_t u8StartAdd = word(au8Buffer[ADD_HI], au8Buffer[ADD_LO]);
1361  uint8_t u8regsno = word(au8Buffer[NB_HI], au8Buffer[NB_LO]);
1362  uint8_t u8CopyBufferSize;
1363  uint8_t i;
1364 
1365  au8Buffer[2] = u8regsno * 2;
1366  u8BufferSize = 3;
1367 
1368  for (i = u8StartAdd; i < u8StartAdd + u8regsno; i++)
1369  {
1370  au8Buffer[u8BufferSize] = highByte(regs[i]);
1371  u8BufferSize++;
1372  au8Buffer[u8BufferSize] = lowByte(regs[i]);
1373  u8BufferSize++;
1374  }
1375  u8CopyBufferSize = u8BufferSize + 2;
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 
1424  uint8_t u8add = word(au8Buffer[ADD_HI], au8Buffer[ADD_LO]);
1425  uint8_t u8CopyBufferSize;
1426  uint16_t u16val = word(au8Buffer[NB_HI], au8Buffer[NB_LO]);
1427 
1428  regs[u8add] = u16val;
1429 
1430  // keep the same header
1432 
1433  u8CopyBufferSize = u8BufferSize + 2;
1434  sendTxBuffer();
1435 
1436  return u8CopyBufferSize;
1437 }
Modbus::u8BufferSize
uint8_t u8BufferSize
Definition: ModbusRtu.h:163
NB_HI
@ NB_HI
Number of coils or registers high byte.
Definition: ModbusRtu.h:97
Modbus::au16regs
uint16_t * au16regs
Definition: ModbusRtu.h:165
Modbus::sendTxBuffer
void sendTxBuffer()
This method transmits au8Buffer to Serial line. Only if u8txenpin != 0, there is a flow handling in o...
Definition: ModbusRtu.h:962
RESPONSE_SIZE
@ RESPONSE_SIZE
Definition: ModbusRtu.h:81
Modbus::au8Buffer
uint8_t au8Buffer[MAX_BUFFER]
Definition: ModbusRtu.h:162
FUNC
@ FUNC
Function code position.
Definition: ModbusRtu.h:94
ADD_HI
@ ADD_HI
Address high byte.
Definition: ModbusRtu.h:95
BYTE_CNT
@ BYTE_CNT
byte counter
Definition: ModbusRtu.h:99
ADD_LO
@ ADD_LO
Address low byte.
Definition: ModbusRtu.h:96
NB_LO
@ NB_LO
Number of coils or registers low byte.
Definition: ModbusRtu.h:98