modbus for modular2_dio10

Revision:
0:998a68b8defc
Child:
1:8fcbafe2ca98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Sep 17 01:59:40 2019 +0000
@@ -0,0 +1,173 @@
+#include "mbed.h"
+#include "modbus.h"
+DigitalOut led1(PC_6);
+
+DigitalIn DI0(PF_5);
+DigitalIn DI1(PF_3);
+DigitalIn DI2(PF_7);
+DigitalIn DI3(PF_6);
+DigitalIn DI4(PA_5);
+DigitalIn DI5(PB_8);
+DigitalIn DI6(PF_10);
+DigitalIn DI7(PF_4);
+DigitalIn DI8(PF_8);
+DigitalIn DI9(PF_9);
+
+DigitalOut DO0(PE_11);
+DigitalOut DO1(PE_7);
+DigitalOut DO2(PB_0);
+DigitalOut DO3(PA_4);
+DigitalOut DO4(PC_2);
+DigitalOut DO5(PF_2);
+DigitalOut DO6(PF_0);
+DigitalOut DO7(PF_1);
+DigitalOut DO8(PC_0);
+DigitalOut DO9(PC_3);
+//
+DigitalOut HF(PD_14);
+Modbus slave(PB_6,PB_7,PD_12,9600);
+uint8_t myAddress=0x01;
+uint16_t data[32];
+uint16_t readDI(uint16_t address)
+{ 
+   uint16_t terminal=address-100;
+   switch(terminal)
+   {
+       case 0:{
+           if (DI0) return 0xffff;
+           else return 0;
+           } 
+     case 1:{
+          if (DI1) return 0xffff;
+           else return 0;
+          } 
+     case 2:{
+        if (DI2) return 0xffff;
+           else return 0;
+            } 
+     case 3:{
+         if (DI3) return 0xffff;
+           else return 0;
+            } 
+     case 4:{
+            if (DI4) return 0xffff;
+           else return 0;
+             } 
+     case 5:{
+             if (DI5) return 0xffff;
+           else return 0;
+             } 
+     case 6:{
+             if (DI6) return 0xffff;
+           else return 0;
+            } 
+     case 7:{
+            if (DI7) return 0xffff;
+           else return 0;
+            } 
+     case 8:{
+           if (DI8) return 0xffff;
+           else return 0;
+           } 
+     case 9:{
+            if (DI9) return 0xffff;
+           else return 0;
+            } 
+     } 
+   return 0;  
+ }
+ uint16_t writeDO(uint16_t address,uint16_t value)
+{ 
+   uint16_t terminal=address-100;
+   switch(terminal)
+   {
+       case 0:{
+           DO0=value&0x0001;
+           if (DO0) return 0xffff;
+           else return 0;
+           } 
+     case 1:{
+          DO1=value&0x0001;
+          if (DO1) return 0xffff;
+           else return 0;
+          } 
+     case 2:{
+        DO2=value&0x0001;
+        if (DO2) return 0xffff;
+           else return 0;
+            } 
+     case 3:{
+         DO3=value&0x0001;
+         if (DO3) return 0xffff;
+           else return 0;
+            } 
+     case 4:{
+          DO4=value&0x0001;
+          if (DO4) return 0xffff;
+           else return 0;
+             } 
+     case 5:{
+            DO5=value&0x0001;
+            if (DO5) return 0xffff;
+           else return 0;
+             } 
+     case 6:{
+          DO6=value&0x0001;
+          if (DO6) return 0xffff;
+           else return 0;
+            } 
+     case 7:{
+           DO7=value&0x0001;
+           if (DO7) return 0xffff;
+           else return 0;
+            } 
+     case 8:{
+          DO8=value&0x0001;
+          if (DO8) return 0xffff;
+           else return 0;
+           } 
+     case 9:{
+           DO9=value&0x0001;
+           if (DO9) return 0xffff;
+           else return 0;
+            } 
+     } 
+  return 0; 
+ }
+void waitQuery()
+{   uint8_t address;
+    uint8_t function;
+    uint16_t startAddress;
+    uint16_t points;
+    int i;
+   if(slave.waitQuery(address,function,startAddress,points))
+     {
+        if ((address==myAddress)&&(function==0x03))  
+        { //read reigster
+          uint16_t p=startAddress;
+          for (i=0;i<points;i++)
+          {
+            data[i]= readDI(p++);
+            }
+          slave.sendResponse((uint8_t *)data,(uint8_t)(points*2));
+         } else
+         if ((address==myAddress)&&(function==0x06))
+         { //write register
+     
+            data[0]= writeDO(startAddress,points);     
+            slave.sendResponse((uint8_t *)data,2);
+             }
+      }
+    }
+int main() {
+    int i;
+    printf("modbus controller\n");
+    HF=1;
+    while (true) {
+        waitQuery();
+        led1 = !led1;
+      
+              
+    }
+}
+