มาเชื่อมต่อ 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 };
จบตอนขั้นพื้นฐานครับ
ปล.เขียนไว้เพื่อช่วยจำ ^ ^!
ไม่มีความคิดเห็น:
แสดงความคิดเห็น