A program to Interact with Software Driver on the PC that work as a DDE server to be used with SoftPLC\'s it turn Mbed to an I/O card to the SoftPLC

Dependencies:   EthernetNetIf mbed

main.cpp

Committer:
mmohamed15
Date:
2011-05-06
Revision:
0:69001bf3d843

File content as of revision 0:69001bf3d843:


// MBED I/O Server FOR PC Based Control
// 2011/2/7


#include "mbed.h"
#include "EthernetNetIf.h"
#include "TCPSocket.h"

DigitalOut led4(LED4, "led4");

// Declaring Digital outputs Pins
DigitalOut do1(p30); 
DigitalOut do2(p29);
DigitalOut do3(p28);
DigitalOut do4(p27);
DigitalOut do5(p26);
DigitalOut do6(p25);
DigitalOut do7(p24);
DigitalOut do8(p23);
DigitalOut do9(p22);
DigitalOut do10(p21);
// Declaring Digital Inptus Pins
DigitalIn di1(p5);
DigitalIn di2(p6);
DigitalIn di3(p7);
DigitalIn di4(p8);
DigitalIn di5(p9);
DigitalIn di6(p10);
DigitalIn di7(p11);
DigitalIn di8(p12);
DigitalIn di9(p13);
DigitalIn di10(p14);
DigitalIn di11(p15);
DigitalIn di12(p16);
DigitalIn di13(p17);
DigitalIn di14(p18);
DigitalIn di15(p19);
DigitalIn di16(p20);

char x[10],y[16];

// EthernetNetIf eth;
EthernetNetIf eth(
  IpAddr(192,168,1,25), //IP Address
  IpAddr(255,255,255,0), //Network Mask
  IpAddr(192,168,1,1), //Gateway
  IpAddr(192,168,1,1)  //DNS
);

#define TCP_LISTENING_PORT 12345

TCPSocket ListeningSock;
TCPSocket* pConnectedSock; // for ConnectedSock
Host client;
TCPSocketErr err;

void onConnectedTCPSocketEvent(TCPSocketEvent e)
{
   switch(e)
    {
    case TCPSOCKET_CONNECTED:
        printf("TCP Socket Connected\r\n");
        break;
    case TCPSOCKET_WRITEABLE:
      //Can now write some data...
        printf("TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
      //Can now read dome data...
        printf("TCP Socket Readable\r\n");
       // Read in any available data into the buffer
      
       //Parsing for the messege from I/O Server
       //1)Updating thr output status
       while ( pConnectedSock->recv(x, 10) ) {
       if(x[0]==0)
       {
             do1=0;
       }
       if(x[0]==1)
       {
        
        do1=1;
       }
       if(x[1]==0)
       {
        
        do2=0;
       }
       if(x[1]==1)
       {
        
        do2=1;
       }
       if(x[2]==0)
       {
        
        do3=0;
       }
       if(x[2]==1)
       {
        
        do3=1;
       }
       if(x[3]==0)
       {
       do4=0;
       }
       if(x[3]==1)
       {
       do4=1;
       }
       if(x[4]==0)
       {
       do5=0;
       }
       if(x[4]==1)
       {
       do5=1;
       }
       if(x[5]==0)
       {
       do6=0;
       }
       if(x[5]==1)
       {
       do6=1;
       }
       if(x[6]==0)
       {
       do7=0;
       }
       if(x[6]==1)
       {
       do7=1;
       }
       if(x[7]==0)
       {
       do8=0;
       }
       if(x[7]==1)
       {
       do8=1;
       }
       if(x[8]==0)
       {
       do9=0;
       }
       if(x[8]==1)
       {
       do9=1;
       }
       if(x[9]==0)
       {
       do10=0;
       }
       if(x[9]==1)
       {
       do10=1;
       }
       
      
      
// 2) send the inputs status to I/O Server
if (di1==1)
{
y[0]=1;
}
if (di1==0)
{
y[0]=0;
}
if (di2==1)
{
y[1]=1;
}
if (di2==0)
{
y[1]=0;
}
if (di3==1)
{
y[2]=1;
}
if (di3==0)
{
y[2]=0;
}
if (di4==1)
{
y[3]=1;
}
if (di4==0)
{
y[3]=0;
}
if (di1==5)
{
y[4]=1;
}
if (di5==0)
{
y[4]=0;
}
if (di6==1)
{
y[5]=1;
}
if (di6==0)
{
y[5]=0;
}
if (di7==1)
{
y[6]=1;
}
if (di7==0)
{
y[6]=0;
}
if (di8==1)
{
y[7]=1;
}
if (di8==0)
{
y[7]=0;
}
if (di9==1)
{
y[8]=1;
}
if (di9==0)
{
y[8]=0;
}
if (di10==1)
{
y[9]=1;
}
if (di10==0)
{
y[9]=0;
}
if (di11==1)
{
y[10]=1;
}
if (di11==0)
{
y[10]=0;
}
if (di12==1)
{
y[11]=1;
}
if (di12==0)
{
y[11]=0;
}
if (di13==1)
{
y[12]=1;
}
if (di13==0)
{
y[12]=0;
}
if (di14==1)
{
y[13]=1;
}
if (di14==0)
{
y[13]=0;
}
if (di15==1)
{
y[14]=1;
}
if (di15==0)
{
y[14]=0;
}
if (di16==1)
{
y[15]=1;
}
if (di16==0)
{
y[15]=0;
}
     
          
           pConnectedSock->send(y, 16);
            // make terminater
         
       }
       break;
    case TCPSOCKET_CONTIMEOUT:
        printf("TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("TCP Socket Disconnected\r\n");        
        pConnectedSock->close();
        break;
    default:
        printf("DEFAULT\r\n"); 
      }
}


void onListeningTCPSocketEvent(TCPSocketEvent e)
{
    switch(e)
    {
    case TCPSOCKET_ACCEPT:
        printf("Listening: TCP Socket Accepted\r\n");
        // Accepts connection from client and gets connected socket.   
        err=ListeningSock.accept(&client, &pConnectedSock);
        if (err) {
            printf("onListeningTcpSocketEvent : Could not accept connection.\r\n");
            return; //Error in accept, discard connection
        }
        // Setup the new socket events
        pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent);
        // We can find out from where the connection is coming by looking at the
        // Host parameter of the accept() method
        IpAddr clientIp = client.getIp();
        printf("Listening: Incoming TCP connection from %d.%d.%d.%d\r\n", 
           clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
       break;
    // the following cases will not happen
    case TCPSOCKET_CONNECTED:
        printf("Listening: TCP Socket Connected\r\n");
        break;
    case TCPSOCKET_WRITEABLE:
        printf("Listening: TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
        printf("Listening: TCP Socket Readable\r\n");
        break;
    case TCPSOCKET_CONTIMEOUT:
        printf("Listening: TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("Listening: TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("Listening: TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("Listening: TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("Listening: TCP Socket Disconnected\r\n");        
        ListeningSock.close();
        break;
    default:
        printf("DEFAULT\r\n"); 
     };
}


int main() {
  printf("\r\n");
  printf("Setting up...\r\n");
  EthernetErr ethErr = eth.setup();
  if(ethErr)
  {
    printf("Error %d in setup.\r\n", ethErr);
    return -1;
  }
  printf("Setup OK\r\n");

  IpAddr ip = eth.getIp();
  printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);

  
  // Set the callbacks for Listening
  ListeningSock.setOnEvent(&onListeningTCPSocketEvent); 
  
  // bind and listen on TCP
  err=ListeningSock.bind(Host(IpAddr(), TCP_LISTENING_PORT));
  printf("Binding..\r\n");
  if(err)
  {
   //Deal with that error...
    printf("Binding Error\n");
  }
   err=ListeningSock.listen(); // Starts listening
   printf("Listening...\r\n");
   if(err)
   {
    printf("Listening Error\r\n");
   }
 
  Timer tmr;
  tmr.start();

  while(true)
  {
    Net::poll();
    if(tmr.read() > 0.2) // sec
    {
      led4=!led4; //Show that we are alive
      tmr.reset();
    }
  }  
}