Aplikacijski kod

Dependencies:   mbed

U prikazanom primjeru izvedena je remote ModBus TCP/IP komunikacija. Generalni opis konfiguracije: U ovom radu je korištena oprema prizvođača Mikortik te mikrokontroler mbed NXP LPC1768. Libery za ethernet odnosno Modbus TCP/IP sam skino sam stranice mbeda te sam ga modificirao kako bi odgovarao željenoj aplikaciji. (https://os.mbed.com/users/paleskyjp/code/ModbusTCP_Modified/) Preko mrežne opreme izeveo sam SSTP VPN koji spaja lokalne subnete iz uređaja "mbed LOCAL" i uređaja "mbed LAPTOP" u jedan jedinstveni te omogućava nesmetanu komunikaciju između uređaja povezanih u lokalnim subnetima. Moguće se također spojiti direktno preko ethernet kabela u uređaj, ali u ovom primjeru laptop je spojen na WIFI mrežu nazvanzu "MBED TVZ" te preko nje komunicira sa mikrokontrolerom koji je kabelom spojem u mrežni uređaj naziva "mbed LOCAL". Riječ remote u ovom primjeru pokazuje da su dva uređaja "mbed LOCAL" i "mbed LAPTOP" preko WIFI-ja spojeni na 2 različita hosta (mobiteli pored njih) te je otvoren VPN kanal između njih. Na uređajima je također podešen DHCP koji dodijeljuje adrese uređajima koji se pokušavaju spojiti na njih, tako i mikrokontroleru. Lokalni subnet nije pušten na internet te mbed nije direktno izložen internetu, što pridonosi sigurnosnom aspektu komunikacije. Za tesitranje komunikacije dovoljno je koristit osnovne alate koji dolaze sa svakim windows-ima, naredba ping (na videu doljnji desni dio ekrana, dok je mbed bio ugašen vidljivo je da ne prolazi komunikacija, nakon što se upalio i spojio na mrežu komunikacija se uspostavila te je vidljivo kako konstantno vraća odgovor) Alat korišten za upis podataka u registre je Modbus Master koji podržava TCP/IP. Svakako je moguće koristiti i druge aplikacije ili druge uređaje koji podržavaju ovaj tip komunikacije. Primjerice PLC, drugi mbed, neko drugo računalo,... Aplikacija sama po sebi nije nešto pretjerano komplicirana ali put samog paketa od Modbus master-a do samog Modbus slave-a nije tako jednostavan. Aplikacija se odnosi na dio ukoliko na nulti registar bilo koje adresnog polja Modbus master pošalje vrijednost veću od 5 konstantno svijetli LED2 izvedena na samoj ploćici mbeda, te ukoliko dođe vrijednos manja od 5 da ugasi LED2. To je samo demostracija rada komunikacije. U ovoj konfiguraciji moguće je bilo gdje odnjeti mikortik i mbed te ga spojiti na WIFI koji ima propust prema internetu te se sa drugim mikrotikom povezati sa mbed-om i nesmetano komunicirati.

Files at this revision

API Documentation at this revision

Comitter:
lincina
Date:
Thu Nov 14 15:38:42 2019 +0000
Parent:
3:d7d7c67f21fa
Commit message:
remote komunikacija

Changed in this revision

EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
ModBus/portother.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r d7d7c67f21fa -r 97b3bd92b315 EthernetNetIf.lib
--- a/EthernetNetIf.lib	Thu Mar 15 15:28:14 2012 +0000
+++ b/EthernetNetIf.lib	Thu Nov 14 15:38:42 2019 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
+https://os.mbed.com/teams/TVZ2019/code/EthernetNetIf_shortened/#c0f64d5d3d51
diff -r d7d7c67f21fa -r 97b3bd92b315 ModBus/portother.cpp
--- a/ModBus/portother.cpp	Thu Mar 15 15:28:14 2012 +0000
+++ b/ModBus/portother.cpp	Thu Nov 14 15:38:42 2019 +0000
@@ -28,6 +28,8 @@
 #include <string.h>
 
 #include "port.h"
+#include "mbed.h"
+DigitalOut led2(LED2);
 
 /* ----------------------- Defines ------------------------------------------*/
 #define MB_FRAME_LOG_BUFSIZE    512
@@ -74,6 +76,8 @@
         case 8:
             /* MB PDU rest. */
             res = snprintf( &arcBuffer[iBufPos], iBufLeft, " | DATA = " );
+            //res = snprintf (&arcBuffer[1],iBufLeft,"PIMpEK");
+          
             break;
         default:
             res = 0;
@@ -91,6 +95,9 @@
 
         /* Print the data. */
         res = snprintf( &arcBuffer[iBufPos], iBufLeft, "%02X", pucFrame[i] );
+         if (pucFrame[11]>5){led2=1;}
+        else {led2=0;}
+    
         if( res == -1 )
         {
             break;
diff -r d7d7c67f21fa -r 97b3bd92b315 main.cpp
--- a/main.cpp	Thu Mar 15 15:28:14 2012 +0000
+++ b/main.cpp	Thu Nov 14 15:38:42 2019 +0000
@@ -81,7 +81,8 @@
 
 int main() {
   eMBErrorCode    eStatus;
-
+  
+printf("Ekipa book :)    ");
 #if MB_TCP_ENABLED == 1
   pc.baud(115200);
   EtherPinMonitor.attach(&EtherPinMonitorFunc, 0.01);
@@ -96,7 +97,7 @@
   IpAddr ip = eth.getIp();
   printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
 #endif
-   
+	
   Timer tm;
   tm.start();
 
@@ -127,12 +128,14 @@
 #if MB_TCP_ENABLED == 1
     Net::poll();
 #endif
-
-    if(tm.read()>.5)
+    if(tm.read()>1.5)
     {
       led1=!led1; //Show that we are alive
       tm.start();
+      //printf ("|R0| %d||",usRegInputBuf[1]);
+     // printf ("|R1| %d||",usRegHoldingBuf[1]);
     }
+ 
 
     eStatus = eMBPoll(  );
             
@@ -207,6 +210,8 @@
         eStatus = MB_ENOREG;
     }
     return eStatus;
+    
+    
 }
 
 /*