Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Modbus by
Diff: main.cpp
- Revision:
- 1:390d9808cdde
- Parent:
- 0:0453a0a7e500
- Child:
- 2:b6ae32d99b4a
--- a/main.cpp Thu Apr 15 12:10:34 2010 +0000
+++ b/main.cpp Fri Jul 06 10:50:10 2018 +0000
@@ -22,40 +22,193 @@
/* ----------------------- System includes --------------------------------*/
/* ----------------------- Modbus includes ----------------------------------*/
+#include "mbed.h"
+#include "EthernetInterface.h"
#include "mb.h"
#include "mbport.h"
/* ----------------------- Defines ------------------------------------------*/
-#define REG_INPUT_START 1000
-#define REG_INPUT_NREGS 4
-#define SLAVE_ID 0x0A
+#define REG_INPUT_START 0
+#define REG_INPUT_NREGS 20
+#define SLAVE_ID 0x00
/* ----------------------- Static variables ---------------------------------*/
static USHORT usRegInputStart = REG_INPUT_START;
static USHORT usRegInputBuf[REG_INPUT_NREGS];
/* ----------------------- Start implementation -----------------------------*/
+
+Ticker flipper;
+Serial le_pc(SERIAL_TX, SERIAL_RX);
+Serial RS485(D1, D0);
+DigitalIn mybutton(USER_BUTTON);
+DigitalOut myled(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+
+int i=0;
+int timer=0;
+char new_adr[13]="#adrADR000\r";
+
+void flip1()
+{
+ le_pc.printf("\n\ri=%i\n\r",i);
+ RS485.puts("#???ADR\r");
+ le_pc.puts("#???ADR\r");
+ if(i!=0) i=0;
+ timer++;
+ myled3=!myled3;
+}
+
+void flip2()
+{
+ le_pc.printf("\n\ri=%i\n\r",i);
+ RS485.printf("%s",&new_adr[0]);
+ le_pc.printf("%s",&new_adr[0]);
+ if(i!=0) i=0;
+ timer++;
+ myled=!myled;
+}
+
+void flip3()
+{
+ RS485.puts("#000STA\r");
+ le_pc.printf("i=%i\n\r",i);
+ if(i!=0) i=0;
+ myled2=!myled2;
+}
+
+
int
main( void )
{
- eMBErrorCode eStatus;
-
- eStatus = eMBInit( MB_RTU, SLAVE_ID, 0, 9600, MB_PAR_NONE );
-
+ uint32_t var;
+ unsigned short var_bon;
+
+ char buffer[150];
+ RS485.baud(9600);
+ RS485.format(8,SerialBase::None,1);
+ printf("START OF THE TESTS\n");
+ eMBErrorCode eStatus;
+ EthernetInterface eth;
+ //eth.set_network("169.254.178.1","255.255.0.0","169.254.178.3");
+ eth.set_network("10.64.123.43","255.255.252.0","10.64.123.254");
+ eth.connect();
+ printf("IP address is '%s'\n", eth.get_ip_address());
+ printf("MAC address is '%s'\n", eth.get_mac_address());
+ flipper.attach(&flip1, 0.5);
+
+ while( timer<3 )
+ {
+ while(RS485.readable())
+ {
+ buffer[i++]=RS485.getc();
+ }
+ if(i>=7)
+ {
+ i=0;
+ buffer[7]='\0';
+ le_pc.printf("%s",buffer);
+ }
+ }
+ flipper.detach();
+
+ new_adr[1]=buffer[1];
+ new_adr[2]=buffer[2];
+ new_adr[3]=buffer[3];
+ timer=0;
+
+ flipper.attach(&flip2, 0.5);
+
+ while( timer<3 )
+ {
+ while(RS485.readable())
+ {
+ buffer[i++]=RS485.getc();
+ }
+ if(i>=7)
+ {
+ i=0;
+ buffer[7]='\0';
+ le_pc.printf("%s",buffer);
+ }
+ }
+ flipper.detach();
+
+ i=0;
+
+ /* inicializacion del Stack de Modbus */
+ eMBTCPInit(502);
+
/* Enable the Modbus Protocol Stack. */
eStatus = eMBEnable( );
-
- // Initialise some registers
- usRegInputBuf[1] = 0x1234;
- usRegInputBuf[2] = 0x5678;
- usRegInputBuf[3] = 0x9abc;
+ myled2=1;
- for( ;; )
+ flipper.attach(&flip3, 2.0);
+
+ myled=1;
+
+ while(1)
{
+ while(RS485.readable())
+ {
+ buffer[i++]=RS485.getc();
+ }
+ if(i>=56)
+ {
+ i=0;
+ if( buffer[54]>=48 && buffer[54]<=58) buffer[55]='\0';
+ else if( buffer[53]>=48 && buffer[53]<=58 )buffer[54]='\0';
+ else buffer[53]='\0';
+ le_pc.printf("%s",buffer);
+
+ //Adresse Pompe
+ usRegInputBuf[1] = (buffer[1]-48)*100 + (buffer[2]-48)*10 + (buffer[3]-48);
+
+ //Infos diverses
+ usRegInputBuf[2] = buffer[7]-48; // 1 -> Pompe en marche / 0 -> Arretee
+ usRegInputBuf[3] = buffer[8]-48; // 1 -> Vitesse Standby / 0 -> Vitesse nominale
+ usRegInputBuf[4] = buffer[9]-48; // 1 -> Mode Standby / 0 -> Autre
+
+ usRegInputBuf[5] = buffer[12]-48; // 1 -> Transistor de puissance non commandes / 0 ->sinon
+ usRegInputBuf[6] = buffer[13]-48; // 1 -> Temperature moteur elevee
+ usRegInputBuf[7] = buffer[14]-48; // 1 -> Courant moteur important
+
+ //Vitesse en tr/min en consigne
+ var = (buffer[26]-48)*10000 + (buffer[27]-48)*1000 + (buffer[28]-48)*100 + (buffer[29]-48)*10 + (buffer[30]-48) ;
+ var_bon = var>>16;
+ usRegInputBuf[8] = var_bon;
+ usRegInputBuf[9] = (unsigned short) var;
+
+ //Puissance Pompe
+ usRegInputBuf[10] = (buffer[32]-48)*1000 + (buffer[33]-48)*100 + (buffer[34]-48)*10 + (buffer[35]-48) ;
+
+ //Temperature Pompe
+ usRegInputBuf[11] = (buffer[41]-48)*100 + (buffer[42]-48)*10 + buffer[43]-48 ;
+
+ //Temps de fonctionnement Pompe
+ if( buffer[53]=='\0')
+ {
+ usRegInputBuf[12] = 0;
+ usRegInputBuf[13] = (buffer[49]-48)*1000 + (buffer[50]-48)*100 + (buffer[51]-48)*10 + buffer[52]-48 ;;
+ }
+ else if( buffer[54]=='\0' ){
+ var = (buffer[49]-48)*10000 + (buffer[50]-48)*1000 + (buffer[51]-48)*100 + (buffer[52]-48)*10 + (buffer[53]-48);
+ var_bon = var>>16;
+ usRegInputBuf[12] = var_bon;
+ usRegInputBuf[13] = (unsigned short) var;
+ }
+ else{
+ var = (buffer[49]-48)*100000 + (buffer[50]-48)*10000 + (buffer[51]-48)*1000 + (buffer[52]-48)*100 + (buffer[53]-48)*10 + (buffer[54]-48)*1;
+ var_bon = var>>16;
+ usRegInputBuf[12] = var_bon;
+ usRegInputBuf[13] = (unsigned short) var;
+ }
+ }
+
+ /* Here we simply count the number of poll cycles. */
( void )eMBPoll( );
-
- /* Here we simply count the number of poll cycles. */
- usRegInputBuf[0]++;
+ //usRegInputBuf[0]++;
}
}
