A modified Arduino library to let mbed boards to behave as modbus slave. See readme. Tested on Nucleo F401RE.
Dependencies: MODSERIAL ModbusSlave232 mbed mbed-rtos millis
Example code for modified arduino modbus library.
main.cpp@4:80f3ac4b1c8b, 2016-07-28 (annotated)
- Committer:
- AfdhalAtiffTan
- Date:
- Thu Jul 28 14:59:54 2016 +0000
- Revision:
- 4:80f3ac4b1c8b
- Parent:
- 1:77e7cf856fae
Reverting back to working version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AfdhalAtiffTan | 4:80f3ac4b1c8b | 1 | #include "mbed.h" |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 2 | #include "rtos.h" |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 3 | #include "ModbusSlave232.h" //see readme |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 4 | #include "millis.h" //see readme |
AfdhalAtiffTan | 0:74eb078d4846 | 5 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 6 | ModbusSlave232 mbs; // Create new mbs instance |
AfdhalAtiffTan | 0:74eb078d4846 | 7 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 8 | // Slave registers |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 9 | enum { |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 10 | MB_0, // Register 0 |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 11 | MB_1, // Register 1 |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 12 | MB_2, // Register 2 |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 13 | MB_3, // Register 3 |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 14 | MB_4, // Register 4 |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 15 | MB_REGS // Dummy register. using 0 offset to keep size of array |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 16 | }; |
AfdhalAtiffTan | 0:74eb078d4846 | 17 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 18 | DigitalOut led1(LED1); |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 19 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 20 | int regs[MB_REGS]; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 21 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 22 | void another_thread(void const *argument) // do stuff |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 23 | { |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 24 | while (true) { |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 25 | Thread::wait(100); |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 26 | led1 = !led1; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 27 | } |
AfdhalAtiffTan | 0:74eb078d4846 | 28 | } |
AfdhalAtiffTan | 0:74eb078d4846 | 29 | |
AfdhalAtiffTan | 0:74eb078d4846 | 30 | int main() |
AfdhalAtiffTan | 0:74eb078d4846 | 31 | { |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 32 | const unsigned char SLAVE = 1; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 33 | const long BAUD = 9600; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 34 | const unsigned PARITY = 'n'; |
AfdhalAtiffTan | 0:74eb078d4846 | 35 | |
AfdhalAtiffTan | 0:74eb078d4846 | 36 | startMillis(); // milliseconds (arduino like) |
AfdhalAtiffTan | 0:74eb078d4846 | 37 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 38 | mbs.configure(SLAVE, BAUD, PARITY); |
AfdhalAtiffTan | 0:74eb078d4846 | 39 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 40 | Thread thread(another_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE); |
AfdhalAtiffTan | 0:74eb078d4846 | 41 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 42 | //test values (updatable) |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 43 | regs[MB_0] = 0xCA1F; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 44 | regs[MB_1] = 0xFACE; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 45 | regs[MB_2] = 0xC0DE; |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 46 | regs[MB_3] = 0x1234; |
AfdhalAtiffTan | 0:74eb078d4846 | 47 | |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 48 | while (true) //main thread |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 49 | { |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 50 | mbs.update(regs, MB_REGS); // Pass current register values to mbs |
AfdhalAtiffTan | 4:80f3ac4b1c8b | 51 | Thread::wait(10); // not too sure if this is needed |
AfdhalAtiffTan | 0:74eb078d4846 | 52 | } |
AfdhalAtiffTan | 0:74eb078d4846 | 53 | } |