A modified Arduino library to let mbed boards to behave as modbus slave. See readme. Tested on Nucleo F401RE.

Dependencies:   mbed mbed-rtos ModbusSlave232 MODSERIAL max6675 millis

Committer:
AfdhalAtiffTan
Date:
Thu Jul 28 14:59:54 2016 +0000
Revision:
4:80f3ac4b1c8b
Parent:
1:77e7cf856fae
Child:
5:cc12e1f4daf1
Reverting back to working version.

Who changed what in which revision?

UserRevisionLine numberNew 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 }