Esempio n. 1
0
TEST(checksum, calc_16bit)
{
	uint16_t array[] = {
		0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888,
		0x9999, 0xAAAA, 0xBBBB, 0xCCCC, 0xDDDD, 0xEEEE, 0xFFFF, 0x0000
	};
	size_t len = sizeof(array) / sizeof(array[0]);
	uint16_t expects = 0xFFF8;  /* 0x7FFF8 */
	TEST_ASSERT_EQUAL_UINT16( expects, checksum_calc_16bit(array, len) );
}
void test_setEncryptionId(void) {
    msg.setEncryptionId(0x11223344);
    TEST_ASSERT_EQUAL_UINT16(0x11223344, msg.getEncryptionId());
}
Esempio n. 3
0
/** \brief test function write multiple register
 **
 ** this function test modbus master write multiple registers
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x10WriteMultipleRegisters_01(void)
{
   int32_t hModbusMaster;
   int16_t hrValue[CIAA_MODBUS_QUANTITY_OF_HOLD_REG] =
   {
      0x1234,
      0x5678,
   };
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pduRecvExp[256] =
   {
      0X10,
      (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF,
      (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF,
      CIAA_MODBUS_QUANTITY_OF_HOLD_REG * 2,
      0x12,
      0x34,
      0x56,
      0x78,
   };
   uint8_t pduSend[256] =
   {
      0X10,
      (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF,
      (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF,
   };

   uint32_t sizeRecv;
   uint32_t sizeRecvExp = 10;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x10WriteMultipleRegisters(
         hModbusMaster,
         CIAA_MODBUS_STARTING_ADDRESS,
         CIAA_MODBUS_QUANTITY_OF_HOLD_REG,
         hrValue,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pduSend,
         5);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, sizeRecvExp);

   TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv);

   TEST_ASSERT_EQUAL_UINT16(0X1234, hrValue[0]);

   TEST_ASSERT_EQUAL_UINT16(0X5678, hrValue[1]);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x10, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}

/** \brief test function read write multiple register
 **
 ** this function test modbus master read write multiple registers
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x17ReadWriteMultipleRegisters_01(void)
{
   int32_t hModbusMaster;
   int16_t hrValueR[128];
   int16_t hrValueW[] =
   {
      0x1122,
      0x3344,
      0x5566,
   };
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pduRecvExp[256] =
   {
      0X17,
      0X00,
      0X03,
      0X00,
      0X06,
      0X00,
      0X0E,
      0X00,
      0X03,
      0X06,
      0X11,
      0X22,
      0X33,
      0X44,
      0X55,
      0X66,
   };
   uint8_t pduSend[256] =
   {
      0X17,
      0X0C,
      0XFF,
      0XEE,
      0XDD,
      0XCC,
      0XBB,
      0XAA,
      0X99,
      0X88,
      0X77,
      0X66,
      0X55,
      0X44,
   };

   uint32_t sizeRecv;
   uint32_t sizeRecvExp = 16;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x17ReadWriteMultipleRegisters(
         hModbusMaster,
         0X0003,
         0X0006,
         hrValueR,
         0X000E,
         0X0003,
         hrValueW,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pduSend,
         14);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, sizeRecvExp);

   TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv);

   TEST_ASSERT_EQUAL_UINT16(0XFFEE, hrValueR[0]);

   TEST_ASSERT_EQUAL_UINT16(0XDDCC, hrValueR[1]);

   TEST_ASSERT_EQUAL_UINT16(0XBBAA, hrValueR[2]);

   TEST_ASSERT_EQUAL_UINT16(0X9988, hrValueR[3]);

   TEST_ASSERT_EQUAL_UINT16(0X7766, hrValueR[4]);

   TEST_ASSERT_EQUAL_UINT16(0X5544, hrValueR[5]);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x17, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}

/** \brief test get Response timeout
 **
 ** this function test get Response timeout
 **
 **/
void test_ciaaModbus_masterGetRespTimeout_01(void)
{
   int32_t hModbusMaster;
   uint32_t timeout;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   timeout = ciaaModbus_masterGetRespTimeout(hModbusMaster);

   /* default response timeout 300 ms */
   TEST_ASSERT_EQUAL_UINT32(300,timeout);
}
Esempio n. 4
0
/** \brief test function read holding registers
 **
 ** this function test modbus master read holding registers
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x03ReadHoldingRegisters_01(void)
{
   int32_t hModbusMaster;
   int16_t hrValue[CIAA_MODBUS_QUANTITY_OF_HOLD_REG];
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pduRecvExp[256] =
   {
      0X03,
      (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF,
      (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 8) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_HOLD_REG >> 0) & 0XFF,
   };
   uint8_t pduSend[256] =
   {
      0X03,
      CIAA_MODBUS_QUANTITY_OF_HOLD_REG * 2,
      0XAA,
      0X55,
      0X11,
      0X22,
   };

   uint32_t sizeRecv;
   uint32_t sizeRecvExp = 5;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x03ReadHoldingRegisters(
         hModbusMaster,
         CIAA_MODBUS_STARTING_ADDRESS,
         CIAA_MODBUS_QUANTITY_OF_HOLD_REG,
         hrValue,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pduSend,
         6);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5);

   TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv);

   TEST_ASSERT_EQUAL_UINT16(0XAA55, hrValue[0]);

   TEST_ASSERT_EQUAL_UINT16(0X1122, hrValue[1]);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x03, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}

/** \brief test function read input registers
 **
 ** this function test modbus master read input registers
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x04ReadInputRegisters_01(void)
{
   int32_t hModbusMaster;
   int16_t irValue[CIAA_MODBUS_QUANTITY_OF_INPUT_REG];
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pduRecvExp[256] =
   {
      0X04,
      (CIAA_MODBUS_STARTING_ADDRESS >> 8) & 0XFF,
      (CIAA_MODBUS_STARTING_ADDRESS >> 0) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_INPUT_REG >> 8) & 0XFF,
      (CIAA_MODBUS_QUANTITY_OF_INPUT_REG >> 0) & 0XFF,
   };
   uint8_t pduSend[256] =
   {
      0X04,
      CIAA_MODBUS_QUANTITY_OF_INPUT_REG * 2,
      0XAA,
      0X55,
      0X11,
      0X22,
   };

   uint32_t sizeRecv;
   uint32_t sizeRecvExp = 5;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x04ReadInputRegisters(
         hModbusMaster,
         CIAA_MODBUS_STARTING_ADDRESS,
         CIAA_MODBUS_QUANTITY_OF_INPUT_REG,
         irValue,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pduSend,
         6);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5);

   TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv);

   TEST_ASSERT_EQUAL_UINT16(0XAA55, irValue[0]);

   TEST_ASSERT_EQUAL_UINT16(0X1122, irValue[1]);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x04, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}

/** \brief test function write single coil
 **
 ** this function test modbus master write single coil
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x05WriteSingleCoil_01(void)
{
   int32_t hModbusMaster;
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pdu[256] =
   {
      0X05,
      0x00,
      0xAC,
      0XFF,
      0x00,
   };

   uint32_t sizeRecv;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x05WriteSingleCoil(
         hModbusMaster,
         0x00AC,
         true,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pdu,
         5);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pdu, pduRecv, 5);

   TEST_ASSERT_EQUAL_UINT32(5, sizeRecv);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x05, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}
Esempio n. 5
0
/** \brief test function read discrete inputs
 **
 ** this function test modbus master read discrete inputs
 ** with callback
 **
 **/
void test_ciaaModbus_masterCmd0x02ReadDiscreteInputs_01(void)
{
   int32_t hModbusMaster;
   uint8_t discreteInputsValue[256];
   uint8_t slaveIdRecv;
   uint8_t pduRecv[256];
   uint8_t pduRecvExp[256] =
   {
      0X02,
      0x12,
      0x34,
      0x00,
      0x13,
   };
   uint8_t pduSend[256] =
   {
      0X02,
      0x03,
      0XCD,
      0X6B,
      0X05,
   };

   uint32_t sizeRecv;
   uint32_t sizeRecvExp = 5;

   /* open modbus master */
   hModbusMaster = ciaaModbus_masterOpen();

   /* request read holding register */
   ciaaModbus_masterCmd0x02ReadDiscreteInputs(
         hModbusMaster,
         0X1234,
         0X0013,
         discreteInputsValue,
         SLAVE_ID,
         modbusMaster_cbEndOfComm);

   /* perform task modbus master */
   ciaaModbus_masterTask(hModbusMaster);

   /* receive pdu from master */
   ciaaModbus_masterRecvMsg(
         hModbusMaster,
         &slaveIdRecv,
         pduRecv,
         &sizeRecv);

   /* send message to master */
   ciaaModbus_masterSendMsg(
         hModbusMaster,
         SLAVE_ID,
         pduSend,
         5);

   /* verify */
   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, slaveIdRecv);

   TEST_ASSERT_EQUAL_UINT8_ARRAY(pduRecvExp, pduRecv, 5);

   TEST_ASSERT_EQUAL_UINT32(sizeRecvExp, sizeRecv);

   TEST_ASSERT_EQUAL_UINT8(0XCD, discreteInputsValue[0]);

   TEST_ASSERT_EQUAL_UINT16(0X6B, discreteInputsValue[1]);

   TEST_ASSERT_EQUAL_UINT16(0X05, discreteInputsValue[2]);

   TEST_ASSERT_EQUAL_UINT8(SLAVE_ID, callBackData_slaveId);

   TEST_ASSERT_EQUAL_UINT8(0x02, callBackData_numFunc);

   TEST_ASSERT_EQUAL_UINT8(0x00, callBackData_exceptioncode);
}