Để điều khiển PLC Mitsubishi FX3S qua giao diện Web (chạy trên localhost:3000), chúng ta cần một “cầu nối” để dịch lệnh từ trình duyệt web thành ngôn ngữ mà PLC hiểu được. Vì FX3S không hỗ trợ sẵn cổng Ethernet hay giao diện Web, giải pháp tối ưu và phổ biến nhất là sử dụng Node.js làm Server trung gian.
Server này sẽ đọc/ghi dữ liệu xuống PLC qua cáp nạp (cáp USB-SC09-FX hoặc cáp Mini-USB cắm trực tiếp vào cổng nạp của FX3S) bằng giao thức MC Protocol hoặc FxSerial, sau đó cung cấp một API hoặc WebSocket để giao diện Web tương tác.

Dưới đây là hướng dẫn chi tiết từng bước từ phần cứng đến phần mềm để anh triển khai hệ thống này.
Bước 1: Chuẩn bị phần cứng và kết nối
-
Kết nối máy tính và PLC: Cắm cáp nạp (Mini-USB hoặc cáp USB-SC09-FX) từ máy tính vào cổng lập trình của PLC FX3S.
-
Kiểm tra cổng COM:
-
Click chuột phải vào
This PC(hoặcMy Computer) ChọnManageDevice Manager. -
Tìm mục Ports (COM & LPT) để xem cáp nạp đang nhận là COM mấy (Ví dụ:
COM3). Hãy ghi nhớ số COM này.
-
Bước 2: Tạo dự án Backend (Node.js Server)
Server này sẽ chạy ngầm để kết nối với PLC và mở một cổng (Port 3000) cho giao diện Web.
1. Cài đặt môi trường
-
Nếu máy tính chưa có Node.js, anh tải và cài đặt bản LTS tại nodejs.org.
-
Tạo một thư mục mới trên máy tính (ví dụ:
FX3S_Web_Control). -
Mở thư mục đó bằng Command Prompt (CMD) hoặc VS Code Terminal và chạy lệnh sau để khởi tạo dự án:
Bashnpm init -y
2. Cài đặt các thư viện cần thiết
Thư viện serialport dùng để giao tiếp RS422/RS232 với FX3S, và express dùng để tạo server web. Chạy lệnh:
npm install express mitsubishi-plc-fx express-ws
(Lưu ý: Thư viện mitsubishi-plc-fx là một thư viện mã nguồn mở phổ biến giúp truyền thông Serial trực tiếp với dòng FX thông qua cổng nạp).
3. Viết code cho Server (server.js)
Tạo một file đặt tên là server.js trong thư mục dự án và dán đoạn code sau vào. Hãy nhớ đổi COM3 thành cổng COM thực tế của anh:
const express = require('express');
const path = require('path');
const { FXSerialLinux } = require('mitsubishi-plc-fx'); // Hoặc thư viện tương đương tùy cấu trúc hệ thống
const app = express();
const port = 3000;
app.use(express.json());
// Cấu hình kết nối PLC qua cổng Serial (Thay COM3 bằng cổng thực tế của anh)
// Tốc độ baud mặc định của cổng nạp FX3S thường là 9600, Parity: Even, DataBits: 7, StopBits: 1
const plc = new FXSerialLinux({
path: 'COM3',
baudRate: 9600,
dataBits: 7,
stopBits: 1,
parity: 'even'
});
// Kết nối tới PLC
plc.open().then(() => {
console.log("Kết nối thành công tới PLC FX3S qua cổng Serial!");
}).catch(err => {
console.error("Lỗi kết nối PLC:", err);
});
// API để điều khiển ON/OFF bit M
app.post('/api/control', async (req, res) => {
const { bit, status } = req.body; // bit: "M0" hoặc "M1", status: true (ON) hoặc false (OFF)
try {
if (status) {
await plc.forceOn(bit);
} else {
await plc.forceOff(bit);
}
res.json({ success: true, message: `Đã chuyển ${bit} sang ${status ? 'ON' : 'OFF'}` });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
// Trả về giao diện Web tĩnh
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(port, () => {
console.log(`Server đang chảy tại: http://localhost:${port}`);
});
Bước 3: Tạo giao diện Web (index.html)
Tạo một file đặt tên là index.html nằm cùng thư mục với file server.js để làm giao diện điều khiển nút nhấn:
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Điều Khiển PLC FX3S</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; background: #f4f4f9; padding: 50px; }
.container { background: white; padding: 30px; border-radius: 10px; display: inline-block; box-shadow: 0px 4px 10px rgba(0,0,0,0.1); }
.control-group { margin: 20px 0; padding: 15px; border: 1px solid #ddd; border-radius: 8px; }
button { font-size: 16px; padding: 10px 20px; margin: 5px; border: none; border-radius: 5px; cursor: pointer; transition: 0.2s; }
.btn-on { background-color: #28a745; color: white; }
.btn-on:hover { background-color: #218838; }
.btn-off { background-color: #dc3545; color: white; }
.btn-off:hover { background-color: #c82333; }
h2 { color: #333; }
</style>
</head>
<body>
<div class="container">
<h2>HỆ THỐNG ĐIỀU KHIỂN PLC QUA WEB</h2>
<p>Giao tiếp với FX3S qua Localhost</p>
<!-- Đèn 1 (M0) -->
<div class="control-group">
<h3>ĐÈN 1 (M0)</h3>
<button class="btn-on" onclick="sendControl('M0', true)">Bật Đèn 1</button>
<button class="btn-off" onclick="sendControl('M0', false)">Tắt Đèn 1</button>
</div>
<!-- Đèn 2 (M1) -->
<div class="control-group">
<h3>ĐÈN 2 (M1)</h3>
<button class="btn-on" onclick="sendControl('M1', true)">Bật Đèn 2</button>
<button class="btn-off" onclick="sendControl('M1', false)">Tắt Đèn 2</button>
</div>
</div>
<script>
function sendControl(bitName, statusValue) {
fetch('/api/control', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ bit: bitName, status: statusValue })
})
.then(response => response.json())
.then(data => {
if(data.success) {
console.log(data.message);
} else {
alert('Lỗi điều khiển: ' + data.error);
}
})
.catch(err => console.error('Lỗi kết nối Server:', err));
}
</script>
</body>
</html>
Bước 4: Vận hành hệ thống
-
Tắt kết nối GX Works2 với PLC: Trước khi chạy Server Node.js, anh cần ngắt kết nối hoặc tắt phần mềm GX Works2 để giải phóng cổng COM. Nếu không, Node.js sẽ báo lỗi
Access denieddo cổng COM đang bị phần mềm lập trình chiếm dụng. -
Khởi chạy Server: Tại cửa sổ CMD/Terminal của thư mục dự án, gõ lệnh:
node server.js
Nếu màn hình hiện lên dòng: Kết nối thành công tới PLC FX3S qua cổng Serial! và Server đang chảy tại: http://localhost:3000 tức là mọi thứ đã sẵn sàng.
3. Kiểm tra trên Web: Mở trình duyệt web (Chrome, Edge, Cốc Cốc…) và truy cập vào địa chỉ: http://localhost:3000. Click các nút Bật/Tắt để kiểm tra trạng thái đèn trên PLC.
Lưu ý kỹ thuật cho dòng FX3S:
Khác với dòng FX3U có thể gắn thêm module Ethernet mở rộng (như FX3U-ENET-ADP) để dùng giao thức TCP/IP chuẩn, FX3S bị giới hạn phần cứng nhiều hơn. Do đó phương án đi qua cổng Serial (cáp nạp) như trên là tiết kiệm và trực tiếp nhất cho nhu cầu điều khiển cơ bản tại chỗ.
Nếu trong quá trình cài đặt các thư viện Node.js hoặc cấu hình cổng COM gặp bất kỳ thông báo lỗi nào, anh cứ chụp hoặc chép lại mã lỗi gửi lên đây, tôi sẽ cùng anh xử lý tiếp!
Code này chạy thử trên locahosting còn cần chỉnh sửa nhiều bước nữa mới chạy ok được.
Sau khi test code đã chạy ok thì chúng ta sẽ test tiếp bước đưa code lên mạnh và gán tên miền để test như trên.
Đã test chạy ok cho Fx3s thông qua trạm máy chủ.












