New group

Dependencies:   mbed

Fork of TAIST_modbus by Supachai Vorapojpisut

Files at this revision

API Documentation at this revision

Comitter:
nengzix
Date:
Tue Mar 20 12:08:50 2018 +0000
Parent:
28:a42061363658
Commit message:
add rs4b5 en

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
modbus.cpp Show annotated file Show diff for this revision Revisions of this file
modbus.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Mar 17 08:22:39 2018 +0000
+++ b/main.cpp	Tue Mar 20 12:08:50 2018 +0000
@@ -3,9 +3,12 @@
 #include "RawSerial.h"
 
 DigitalOut myled(LED1);
+DigitalOut rs485_en(D2);
 AnalogIn analog_value(A0);
 
-RawSerial pc(USBTX, USBRX);
+//RawSerial pc(USBTX, USBRX, 57600);
+RawSerial comm(PC_6, PC_7, 57600);
+
 InterruptIn button(USER_BUTTON);
 Ticker timebase;
 
@@ -14,20 +17,26 @@
 
 uint32_t Tick = 0;
 uint32_t pressedTick = 0; 
-uint32_t releasedTick = 0; 
+uint32_t releasedTick = 0;
 
 void serial_callback()
 {
     uint8_t frame[6];
     uint16_t offset, count;
     uint8_t reg_map;
+    char tmp[20];
     
-    char ch = pc.getc();
+    char ch = comm.getc();
     if (modbus_parser(ch, frame)) {
         offset = (frame[2] << 8) | (frame[3]);
         count = (frame[4] << 8) | (frame[5]);
         reg_map = modbus_check(offset, count);
-        modbus_response(reg_map);
+        modbus_response(reg_map, tmp);
+        rs485_en = 1;
+        wait(0.01);
+        comm.printf(tmp);
+        wait(0.01);
+        rs485_en = 0;
     }
 }
 
@@ -82,9 +91,10 @@
 }
 
 int main() {
+    rs485_en = 0;
     // setup code
-    pc.attach(&serial_callback);
-    modbus_init(0x0059); // init ID
+    comm.attach(&serial_callback);
+    modbus_init(0x0002); // init ID=02 :020300000002F9
     
     // 1. button code
     button.rise(&pressed_callback);
--- a/modbus.cpp	Sat Mar 17 08:22:39 2018 +0000
+++ b/modbus.cpp	Tue Mar 20 12:08:50 2018 +0000
@@ -104,7 +104,7 @@
                 buf[idx++] = ch;
             } else if ((ch >= 'A') && (ch <= 'F')) {
                 buf[idx++] = ch;
-            } else if (ch == '\r') {
+            } else if (ch == '\r' and idx > 4) {
                 buf[idx] = 0;
                 protState = END;
             } else {
@@ -139,14 +139,13 @@
     return -lrc;
 }
 
-void modbus_response(uint8_t reg_map) 
+void modbus_response(uint8_t reg_map, char *rttmp) 
 {
     char fmt00[] = ":%02X%02X%02X\r\n";
     char fmt01[] = ":%02X%02X%02X%02X%02X\r\n";
     char fmt02[] = ":%02X%02X%02X%02X%02X\r\n";
     char fmt03[] = ":%02X%02X%02X%02X%02X%02X%02X\r\n";
     char *fmtstr;
-    char str[20];
     uint8_t frame[ADDR_RANGE*2 + 3];
     uint16_t tmp;
     
@@ -159,9 +158,9 @@
             frame[3] = tmp & 0xFF;
             frame[4] = calc_lrc(frame, 4);
             fmtstr = fmt01;
-            sprintf(str, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4]);
+            sprintf(rttmp, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4]);
             //printf("Response: %s", str);
-            printf(str);
+            //printf(str);
             break;
         case 2:
             tmp = modbus_read(1);
@@ -169,9 +168,9 @@
             frame[3] = tmp & 0xFF;
             frame[4] = calc_lrc(frame, 4);
             fmtstr = fmt02;
-            sprintf(str, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4]);
+            sprintf(rttmp, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4]);
             //printf("Response: %s", str);     
-            printf(str);   
+            //printf(str);   
             break;
         case 3:
             tmp = modbus_read(0);
@@ -182,14 +181,14 @@
             frame[5] = tmp & 0xFF;                                
             frame[6] = calc_lrc(frame, 6);
             fmtstr = fmt03;
-            sprintf(str, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4], frame[5], frame[6]);
+            sprintf(rttmp, fmtstr, frame[0], frame[1], frame[2], frame[3], frame[4], frame[5], frame[6]);
             //printf("Response: %s", str);     
-            printf(str);         
+            //printf(str);         
             break;
         default:
             fmtstr = fmt00;
             frame[2] = calc_lrc(frame, 2);
-            sprintf(str, fmtstr, frame[0], frame[1], frame[2]);
+            sprintf(rttmp, fmtstr, frame[0], frame[1], frame[2]);
             //printf("Response: %s", str);      
     }
 }
--- a/modbus.h	Sat Mar 17 08:22:39 2018 +0000
+++ b/modbus.h	Tue Mar 20 12:08:50 2018 +0000
@@ -11,6 +11,6 @@
 uint16_t modbus_update(uint8_t offset, uint16_t val);
 int modbus_parser(char ch, uint8_t *frame);
 uint8_t modbus_check(uint16_t offset, uint16_t count);
-void modbus_response(uint8_t reg_map);
+void modbus_response(uint8_t reg_map, char *rttmp);
 
 #endif // MODBUS_H