2021年5月16日 星期日

Arduino與PLC通訊

目的:測試Arduino RS232與PLC通訊

系統架構


線路

DB9腳位定義: pin2(RX),  pin3(TX),  pin5(GND) 


程式 

/*

  Arduino RS232(RS485) and DVP EH2 PLC  

 */

char CR = 0x0D;

char LF = 0x0A;

String cmd = String();

byte inByte[50] ; // 用來儲存收進來的 data byte

int i=0;

boolean once = false;

void setup()                    // run once, when the sketch starts

  Serial.begin(9600);

 Serial1.begin(9600,SERIAL_7E1);     // DVP PLC Modbus ASCII 9600,7,e,1 

 // force Y0 ON ":01050500FF00F6\r\n" 

  cmd= cmd + ":01050500FF00F6" + CR + LF;

}

void loop() { 

  if(!once){  

   Serial.println("Arduino --> DVP PLC");

   Serial.print(cmd);  //print string 

   for(int i=0; i<cmd.length(); i++) { //print ascii code

    Serial.print(cmd.charAt(i),HEX);

    Serial.print(" ");

  }  

    Serial1.print(cmd); //Arduino 2 PLC 

    delay(100); 

    Serial.println(" ");

   Serial.println(" ");

 // PLC Response

 i=0;

 while (Serial1.available()) { //PLC 2 Arduino

    inByte[i++] = Serial1.read();      

  } 

  Serial.println("DVP PLC --> Arduino");  

  for(int j=0; j< i;j++)   

    Serial.print((char) inByte[j]);

  for(int j=0; j< i;j++){

    Serial.print(inByte[j],HEX);

    Serial.print(" ");

  }  

 i=0;

 once = true;

  }//end once 

}

結果



沒有留言:

張貼留言