วันอังคารที่ 10 กันยายน พ.ศ. 2562

จับMicrocontroller มานั่งคุยกับ PLC FXcpu

มาเชื่อมต่อ Micro controller กับ PLC กระกูล FX1n FX2 FX3u


        

          ปกติแล้วแล้ว PLC Mitsubishi FX1 FX2 FX3 จะมี CPU Port  เป็น RS422 8Pin Midi din



การเชื่อมต่อ จะใช้อุปกรณ์ที่หาง่ายๆ ในยุคนี้
       
            1 MAX485 Modul 2ตัว

ในการต่อสาย เพื่อแปลง MAX485 Modul 2ตัว ให้เป็น RS422 เพื่อเชื่อมต่อเข้ากับพอตท์ ของ PLC
ทำได้ตามรูป


          ทำการทดสอบโดยการนำ Arduino Maga2560 มาต่อร่วมกับ RS422ที่ประกอบขึ้น โดย
                 
                        TX เข้าขา 18 TX1
                        RX เข้าขา 19 RX1

ซึ่งเป็น Port  Serial1 อัฟโหลดโค๊ดดังนี้
     
                     
                       #define FXformat SERIAL_7E1

                       void setup() {
                         Serial.begin(115200);
                         Serial1.begin(9600, FXformat);
                       }

                       void loop() {
                         delay(1000);
                         Serial1.write(0x05);

                         while ( Serial1.available() )
                         {
                           if (Serial1.available()) {
               
                             char x = Serial1.read();
                             Serial.println(x, HEX);
                          }
                         }
                       }

เปิดดูที่ Serial monitor จะได้ผลตามนี้


ในโปรแกรม ส่ง 0x05 เป็นการส่ง   request ไปยัง PLC และPLC จะตอบกับ 0x06
จะเป็นไปตามรหัสสื่อสารมาตรฐาน  ถ้าได้ตามนี้แสดงว่าต่อวงจรถูกต้อง


  COMMUNICATION CONTROL CHARACTER

           ENQ =05H  PC send request to PLC
           ACK=06H   PLC's Correct response
           NAK=15H  PLC's Error response
           STX=02H   Message start mark
           ETX=03H   Message end mark





ทดสอบเขี่ยนโค๊ดเข้า PLC




Arduino Maga2560 ใช้โค๊ดนี้

#define FX1format SERIAL_7E1
uint8_t FXM1on[] = {0x02, 0x45 , 0x37, 0x30, 0x31, 0x34, 0x30, 0x03 , 0x34 , 0x34 };
uint8_t FXM1off[] = {0x02, 0x45, 0x38 , 0x30, 0x31 , 0x34, 0x30, 0x03, 0x34 , 0x35 };
bool onm1 = true;
void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, FX1format);
}

void loop() {
  delay(1000);
  if (onm1)
  {
    Serial1.write(FXM1on, 10);
    onm1 = false;
  }
  else
  {
    Serial1.write(FXM1off, 10);
    onm1 = true;
  }

  while ( Serial1.available() )
  {
    if (Serial1.available()) {
      //  Serial.write(Serial1.read());
      char x = Serial1.read();
      Serial.println(x, HEX);
    }
  }
}



ผลที่ได้  Y0 จะ On Off ทุก1วินาที

*Code Arduino ในตัวอย่างใช้กับ FX3
FX1N ให้แก้ FXM1on[], FXM1off[] เป็น

uint8_t FXM1on[] = {0x02, 0x45 ,  0x37, 0x30, 0x31, 0x30, 0x30, 0x03 , 0x34 , 0x30 };
uint8_t FXM1off[] = {0x02, 0x45 ,  0x38 , 0x30, 0x31 , 0x30, 0x30, 0x03, 0x34 , 0x31 };

จบตอนขั้นพื้นฐานครับ
ปล.เขียนไว้เพื่อช่วยจำ ^ ^!

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

จับMicrocontroller มานั่งคุยกับ PLC FXcpu

มาเชื่อมต่อ Micro controller กับ PLC กระกูล FX1n FX2 FX3u                    ปกติแล้วแล้ว PLC  Mitsubishi FX1 FX2 FX3 จะมี CPU Port ...