
Đọc và ghi dữ liệu giữa WinCC và Microsoft Excel: Hướng dẫn VBScript, OPC và COM (Phần 1)
1. Tổng quan
Việc kết nối Microsoft Excel với Siemens WinCC Runtime là một nhu cầu rất phổ biến trong các hệ thống SCADA.
Thông qua Excel, người vận hành có thể:
Nhập Recipe sản xuất
Xuất báo cáo sản lượng
Lưu dữ liệu lịch sử
Chỉnh sửa thông số máy
Phân tích dữ liệu vận hành
Trong khi đó WinCC đóng vai trò là hệ thống HMI/SCADA giao tiếp với PLC.
Nếu hai nền tảng này có thể trao đổi dữ liệu trực tiếp, quá trình vận hành sẽ trở nên linh hoạt hơn rất nhiều.
Ví dụ:
Nhân viên công nghệ nhập công thức sản xuất trong Excel → WinCC tự động đọc và ghi xuống PLC.
WinCC ghi nhiệt độ, áp suất, sản lượng vào Excel để tạo báo cáo cuối ca.
Người quản lý mở Excel để phân tích dữ liệu mà không cần truy cập trực tiếp vào WinCC.
Bài viết này sẽ trình bày toàn bộ các phương pháp chính thức để trao đổi dữ liệu giữa WinCC và Excel.
2. Các phương pháp tích hợp WinCC với Excel
Hiện nay có nhiều cách để kết nối WinCC với Microsoft Excel.
Phương pháp | WinCC TIA Portal | WinCC Flexible | Đọc/Ghi hai chiều | Cần License bổ sung |
|---|---|---|---|---|
VBScript + Excel COM | ✔ | ✖ | ✔ | Không |
OPC DA | ✔ | ✔ | ✔ | Có |
Excel OPC Server | ✔ | ✔ | ✔ | Có (phần mềm bên thứ ba) |
CSV | ✔ | ✔ | ✔ | Không |
WinCC OLE DB | ✔ (Professional) | ✖ | Chỉ đọc | Có |
WebNavigator / REST API | ✔ (Professional) | ✖ | ✔ | Có |
Nếu bạn đang sử dụng WinCC TIA Portal Runtime Advanced hoặc Runtime Professional, giải pháp được Siemens khuyến nghị là VBScript kết hợp COM (Excel.Application).
Ưu điểm:
Không cần OPC.
Không cần Add-in.
Không cần mua thêm License.
Có thể đọc và ghi trực tiếp giữa Excel và WinCC.
WinCC TIA Portal và WinCC Flexible khác nhau như thế nào?
Hai nền tảng này có khả năng tích hợp Excel rất khác nhau.
WinCC TIA Portal
WinCC Runtime Advanced/Professional tích hợp sẵn:
VBScript
HMIRuntime Object
VBScript có thể tạo đối tượng:
CreateObject("Excel.Application")sau đó mở Workbook, đọc Cell và ghi trực tiếp vào Tag của WinCC.
Đây là phương pháp hiện đại và được Siemens hỗ trợ.
WinCC Flexible 2008
WinCC Flexible có môi trường Script đơn giản hơn.
Runtime không hỗ trợ tạo đối tượng Excel COM.
Do đó muốn kết nối Excel phải sử dụng:
OPC DA
File CSV
Script Windows bên ngoài
Khuyến nghị: Trước khi lựa chọn phương pháp tích hợp, hãy xác định rõ phiên bản WinCC, loại Runtime (Advanced hoặc Professional), loại HMI (Comfort Panel hay PC Runtime) và phiên bản TIA Portal đang sử dụng.
3. Phương pháp 1 – Đọc dữ liệu từ Excel bằng VBScript trong WinCC TIA Portal
Trong TIA Portal, WinCC cung cấp đối tượng:
HMIRuntimeđể truy cập toàn bộ Tag Runtime.
Trong khi đó Microsoft Excel cung cấp đối tượng:
Excel.Applicationthông qua COM của Windows.
VBScript có thể điều khiển đồng thời cả hai đối tượng này, từ đó tạo cầu nối trực tiếp giữa Excel và WinCC mà không cần bất kỳ phần mềm trung gian nào.
Luồng hoạt động như sau:
Excel Workbook
│
▼
Excel.Application (COM)
│
▼
VBScript
│
▼
HMIRuntime.Tags(...)
│
▼
WinCC Runtime
│
▼
PLC3.1. Điều kiện cần
Để sử dụng phương pháp này, hệ thống cần đáp ứng các điều kiện sau.
Phiên bản WinCC
Khuyến nghị:
TIA Portal V16 trở lên.
Có thể sử dụng từ:
V15.1
V14 SP1
Runtime
Yêu cầu:
WinCC Runtime Advanced
hoặc WinCC Runtime Professional
Microsoft Excel
Máy tính chạy Runtime phải cài đặt:
Microsoft Excel 2010 trở lên.
Không cần Office là bộ mặc định của Windows.
Chỉ cần COM của Excel đã được đăng ký (thường tự động khi cài Office).
Tag trong WinCC
Các Tag cần ghi dữ liệu phải được tạo sẵn trong:
HMI Tagsvà đã Download xuống Runtime.
Cho phép chạy Script
Trong Project:
Runtime Settings
→ Services
→ Enable Scriptsphải được bật.
Đối với Comfort Panel
Nếu chạy Runtime trên Comfort Panel:
cần kiểm tra Firmware có hỗ trợ VBScript.
Các Comfort Panel từ 7 inch trở lên đều hỗ trợ.
Một số Basic Panel như KTP400 Basic thì không.
3.2. Quy trình đọc dữ liệu từ Excel vào WinCC
Ví dụ cần đọc:
C:\Data\Recipe.xlsxLấy dữ liệu tại:
Sheet1
A1và ghi vào Tag:
ExcelImport_ValueQuy trình thực hiện gồm các bước sau.
Bước 1
Trong TIA Portal tạo Tag:
ExcelImport_ValueKiểu:
IntBước 2
Tạo một VBScript mới.
Ví dụ:
ReadFromExcelBước 3
Thiết lập Trigger.
Có thể chạy:
Khi một Bit đổi trạng thái.
Theo chu kỳ 60 giây.
Khi nhấn Button trên HMI.
Bước 4
Trong Script tạo đối tượng Excel:
Set objExcel = CreateObject("Excel.Application")Ẩn cửa sổ Excel:
objExcel.Visible = False
objExcel.DisplayAlerts = FalseĐiều này giúp Runtime không hiển thị cửa sổ Excel trong quá trình vận hành.
Bước 5
Mở Workbook:
Set objWorkbook = objExcel.Workbooks.Open(...)Bước 6
Lấy Worksheet:
Set objSheet = objWorkbook.Worksheets(1)Bước 7
Đọc Cell:
cellValue = objSheet.Range("A1").ValueBước 8
Chuyển kiểu dữ liệu.
Ví dụ:
CLng()cho Tag kiểu Int.
Hoặc:
CDbl()đối với kiểu Real.
Bước 9
Ghi xuống WinCC:
HMIRuntime.Tags("ExcelImport_Value").Write hmiValueSau đó:
WriteFlushđể đảm bảo dữ liệu được cập nhật ngay.
Bước 10
Đóng Workbook:
objWorkbook.CloseĐóng Excel:
objExcel.QuitGiải phóng toàn bộ Object:
Set objExcel = NothingLưu ý rất quan trọng
Đây là lỗi phổ biến nhất khi tích hợp WinCC với Excel.
Nếu không gọi:
objExcel.Quitthì tiến trình:
EXCEL.EXEsẽ tiếp tục chạy ngầm sau mỗi lần thực thi Script.
Sau vài giờ hoặc vài ngày, Runtime sẽ xuất hiện hàng chục tiến trình Excel chạy nền, gây:
Tăng sử dụng RAM.
Chiếm CPU.
Làm chậm Runtime.
Thậm chí khiến WinCC bị treo.
Vì vậy, luôn đóng Workbook, gọi Quit và giải phóng toàn bộ Object COM sau khi hoàn thành công việc.
3.3 Ghi dữ liệu từ WinCC sang Excel
Chiều ngược lại cũng được thực hiện bằng Excel COM.
Lúc này WinCC sẽ:
Đọc giá trị Tag Runtime.
Mở Workbook.
Ghi dữ liệu vào Cell tương ứng.
Lưu Workbook.
Đóng Excel.
Ví dụ:
Tag:
Machine_Stateđược ghi xuống Workbook:
C:\Logs\StateLog.xlsxQuy trình hoạt động
HMIRuntime Tag
│
▼
VBScript
│
▼
Excel.Application
│
▼
Workbook
│
▼
Excel FileMở Workbook
Trước tiên tạo đối tượng Excel.
Set objExcel = CreateObject("Excel.Application")Ẩn giao diện:
objExcel.Visible = False
objExcel.DisplayAlerts = FalseSau đó mở Workbook:
Set objWorkbook = objExcel.Workbooks.Open(...)Xác định dòng trống tiếp theo
Thông thường file Excel được dùng để lưu lịch sử.
Do đó mỗi lần ghi sẽ cần tìm dòng cuối cùng.
Ví dụ:
nextRow = ...sẽ xác định dòng đầu tiên còn trống trong cột A.
Ghi dữ liệu
Ví dụ:
Cột A:
Ngày giờ
NowCột B:
Giá trị Tag
HMIRuntime.Tags("Machine_State").ReadKết quả:
Time | Machine State |
|---|---|
08:00 | Running |
08:01 | Running |
08:02 | Alarm |
08:03 | Stopped |
Lưu Workbook
Sau khi ghi xong:
objWorkbook.SaveĐóng Workbook:
objWorkbook.CloseĐóng Excel:
objExcel.QuitGiải phóng Object:
Set objExcel = NothingNếu thiếu bước này sẽ sinh ra tiến trình EXCEL.EXE chạy nền.



