diff --git a/tests/unit-test-master.c b/tests/unit-test-master.c index df6da7b..2ec3bcc 100644 --- a/tests/unit-test-master.c +++ b/tests/unit-test-master.c @@ -65,12 +65,57 @@ int main(void) printf("** UNIT TESTING **\n"); - printf("TEST READ FUNCTIONS:\n"); + printf("\nTEST WRITE/READ:\n"); /** COIL STATUS **/ + + /* Single */ + ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON); + printf("1/2 force_single_coil: "); + if (ret == 1) { + printf("OK\n"); + } else { + printf("FAILED\n"); + goto close; + } + + ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, 1, + tab_rp_status); + printf("2/2 read_coil_status: "); + if (ret != 1) { + printf("FAILED (nb points %d)\n", ret); + goto close; + } + + if (tab_rp_status[0] != ON) { + printf("FAILED (%0X = != %0X)\n", tab_rp_status[0], ON); + goto close; + } + printf("OK\n"); + /* End single */ + + /* Multiple coils */ + { + uint8_t tab_value[UT_COIL_STATUS_NB_POINTS]; + + set_bits_from_bytes(tab_value, 0, UT_COIL_STATUS_NB_POINTS, + UT_COIL_STATUS_TAB); + ret = force_multiple_coils(&mb_param, SLAVE, + UT_COIL_STATUS_ADDRESS, + UT_COIL_STATUS_NB_POINTS, + tab_value); + printf("1/2 force_multiple_coils: "); + if (ret == UT_COIL_STATUS_NB_POINTS) { + printf("OK\n"); + } else { + printf("FAILED\n"); + goto close; + } + } + ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, UT_COIL_STATUS_NB_POINTS, tab_rp_status); - printf("* coil status: "); + printf("2/2 read_coil_status: "); if (ret != UT_COIL_STATUS_NB_POINTS) { printf("FAILED (nb points %d)\n", ret); goto close; @@ -93,11 +138,12 @@ int main(void) i++; } printf("OK\n"); + /* End of multiple coils */ /** INPUT STATUS **/ ret = read_input_status(&mb_param, SLAVE, UT_INPUT_STATUS_ADDRESS, UT_INPUT_STATUS_NB_POINTS, tab_rp_status); - printf("* read_input_status: "); + printf("1/1 read_input_status: "); if (ret != UT_INPUT_STATUS_NB_POINTS) { printf("FAILED (nb points %d)\n", ret); @@ -123,11 +169,53 @@ int main(void) printf("OK\n"); /** HOLDING REGISTERS **/ + + /* Single register */ + ret = preset_single_register(&mb_param, SLAVE, + UT_HOLDING_REGISTERS_ADDRESS, 0x1234); + printf("1/2 preset_single_register: "); + if (ret == 1) { + printf("OK\n"); + } else { + printf("FAILED\n"); + goto close; + } + + ret = read_holding_registers(&mb_param, SLAVE, + UT_HOLDING_REGISTERS_ADDRESS, + 1, tab_rp_registers); + printf("2/2 read_holding_registers: "); + if (ret != 1) { + printf("FAILED (nb points %d)\n", ret); + goto close; + } + + if (tab_rp_registers[0] != 0x1234) { + printf("FAILED (%0X != %0X)\n", + tab_rp_registers[0], 0x1234); + goto close; + } + printf("OK\n"); + /* End of single register */ + + /* Many registers */ + ret = preset_multiple_registers(&mb_param, SLAVE, + UT_HOLDING_REGISTERS_ADDRESS, + UT_HOLDING_REGISTERS_NB_POINTS, + UT_HOLDING_REGISTERS_TAB); + printf("1/2 preset_multiple_registers: "); + if (ret == UT_HOLDING_REGISTERS_NB_POINTS) { + printf("OK\n"); + } else { + printf("FAILED\n"); + goto close; + } + ret = read_holding_registers(&mb_param, SLAVE, UT_HOLDING_REGISTERS_ADDRESS, UT_HOLDING_REGISTERS_NB_POINTS, tab_rp_registers); - printf("* read_holding_registers: "); + printf("2/2 read_holding_registers: "); if (ret != UT_HOLDING_REGISTERS_NB_POINTS) { printf("FAILED (nb points %d)\n", ret); goto close; @@ -142,13 +230,15 @@ int main(void) } } printf("OK\n"); + /* End of many registers */ + /** INPUT REGISTERS **/ ret = read_input_registers(&mb_param, SLAVE, UT_INPUT_REGISTERS_ADDRESS, UT_INPUT_REGISTERS_NB_POINTS, tab_rp_registers); - printf("* read_input_registers: "); + printf("1/1 read_input_registers: "); if (ret != UT_INPUT_REGISTERS_NB_POINTS) { printf("FAILED (nb points %d)\n", ret); goto close; @@ -162,57 +252,7 @@ int main(void) } } printf("OK\n"); - - /** WRITE FUNCTIONS **/ - printf("\nTEST WRITE FUNCTIONS:\n"); - ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON); - printf("* force_single_coil: "); - if (ret == 1) { - printf("OK\n"); - } else { - printf("FAILED\n"); - goto close; - } - - ret = preset_single_register(&mb_param, SLAVE, 0x01, 0x03); - printf("* preset_single_register: "); - if (ret == 1) { - printf("OK\n"); - } else { - printf("FAILED\n"); - goto close; - } - - { - int nb_points = 0x0A; - uint8_t tab_value[] = { ON, OFF, ON, ON, - OFF, OFF, ON, ON, - ON, OFF }; - ret = force_multiple_coils(&mb_param, SLAVE, 0x13, - nb_points, tab_value); - printf("* force_multiple_coils: "); - if (ret == nb_points) { - printf("OK\n"); - } else { - printf("FAILED\n"); - goto close; - } - } - - { - int nb_points = 2; - uint16_t tab_value[] = { 0x000A, 0x0102 }; - ret = preset_multiple_registers(&mb_param, SLAVE, - 0x01, nb_points, tab_value); - printf("* preset_multiple_registers: "); - if (ret == nb_points) { - printf("OK\n"); - } else { - printf("FAILED\n"); - goto close; - } - } /** ILLEGAL DATA ADDRESS */ printf("\nTEST ILLEGAL DATA ADDRESS:\n"); diff --git a/tests/unit-test-slave.c b/tests/unit-test-slave.c index 7e1b096..99fe622 100644 --- a/tests/unit-test-slave.c +++ b/tests/unit-test-slave.c @@ -45,24 +45,14 @@ int main(void) exit(1); } - /* Examples from PI_MODBUS_300.pdf */ - - /** COIL STATUS **/ - set_bits_from_bytes(mb_mapping.tab_coil_status, - UT_COIL_STATUS_ADDRESS, UT_COIL_STATUS_NB_POINTS, - UT_COIL_STATUS_TAB); - + /* Examples from PI_MODBUS_300.pdf. + Only the read-only input values are assigned. */ + /** INPUT STATUS **/ set_bits_from_bytes(mb_mapping.tab_input_status, UT_INPUT_STATUS_ADDRESS, UT_INPUT_STATUS_NB_POINTS, UT_INPUT_STATUS_TAB); - /** HOLDING REGISTERS **/ - for (i=0; i < UT_HOLDING_REGISTERS_NB_POINTS; i++) { - mb_mapping.tab_holding_registers[UT_HOLDING_REGISTERS_ADDRESS+i] = - UT_HOLDING_REGISTERS_TAB[i];; - } - /** INPUT REGISTERS **/ for (i=0; i < UT_INPUT_REGISTERS_NB_POINTS; i++) { mb_mapping.tab_input_registers[UT_INPUT_REGISTERS_ADDRESS+i] =