iec61850.dll 32-bit (x8
Xác nhận rồi — chính là nguyên nhân gây lỗi hôm trước, hai file này không khớp kiến trúc với nhau:
| File | Loại | Kiến trúc |
|---|---|---|
iec61850.dll | Native (C/C++, không phải .NET) | x64 (64-bit) |
iec61850dotnet.dll | Managed (.NET assembly) | x86 (32-bit) |
Vấn đề: iec61850dotnet.dll (lớp bọc .NET, chỉ chạy được 32-bit) gọi vào iec61850.dll (thư viện gốc thật sự làm việc kết nối) — nhưng bản iec61850.dll bạn đang có chỉ có bản 64-bit. Khi project build ra x86 (32-bit) như log lỗi trước cho thấy (bin/Debug/x86), process 32-bit không nạp được DLL native 64-bit → BadImageFormatException.
Cách sửa — chỉ có 2 hướng, chọn 1:
- Tìm bản
iec61850.dll32-bit (x86) để thay cho file 64-bit hiện tại, giữ nguyên project build x86 (đơn giản hơn, khuyên dùng nếu có sẵn bản x86 trong bộ cài/gói thư viện gốc bạn tải về — thường có 2 thư mụcx86/x64hoặcwin32/win64). - Hoặc nếu không có bản x86 của
iec61850.dll(chỉ có x64), thì phải đổi Platform target của project sang x64 để khớp — nhưng lúc đó toàn bộ project (kể cả các DLL/thư viện khác đang dùng nhưlib60870,Opc.Ua.*...) cũng phải có bản x64 tương ứng, không thì lại lỗi tương tự ở chỗ khác.
Bạn có bản iec61850.dll nào khác (x86) trong bộ cài gốc không, hay chỉ có đúng 1 bản duy nhất này?
Đây là lỗi khác hoàn toàn, không liên quan tới control IEC61850 nữa — nó crash sớm hơn, ngay trong Form1_Load() lúc gọi KEPServerEX_Connect(), tại dòng tạo kết nối OPC DA qua COM (OPCAutomation.OPCServer). Nhìn cửa sổ Autos: OPCServer = null, và exception là COMException — nghĩa là COM component KEPServerEX/OPCAutomation không đăng ký cho tiến trình 64-bit.
Bản chất vấn đề: Project sql_Connect đang dùng 2 thư viện đòi hỏi bitness ngược nhau:
iec61850.dll(native) → chỉ có bản x64 → cần project chạy 64-bitOPCAutomation.OPCServer(COM, dùng để kết nối KEPServerEX) → COM component này thường chỉ đăng ký ở registry 32-bit (rất phổ biến với OPC DA server cũ) → cần project chạy x86
→ Đổi cả project sang x64 để IEC61850 chạy được thì làm gãy phần OPC/KEPServerEX đang hoạt động tốt trước đó. Không thể vừa lòng cả hai trong cùng 1 process.
Hướng xử lý đúng — tách riêng, không gộp chung 1 exe:
- Đưa project
sql_Connectvề lại x86 (Configuration Manager → đổi Platform về x86 như ban đầu) để phần OPC/KEPServerEX chạy lại bình thường. - Việc test kết nối IEC61850 làm ở một project riêng, độc lập — chính là bản Console App
TestConnectIEC61850.cstôi gửi ở tin nhắn đầu tiên (trước khi bạn nhờ chuyển thành UserControl). Tạo project Console App riêng, build x64, chỉ referenceiec61850dotnet.dll+iec61850.dll(x64), không đụng gì tới OPC/KEPServerEX cả → test độc lập, không xung đột. - Nếu sau này cần tích hợp thật (đọc tag IEC61850 liên tục trong lúc app chính vẫn chạy x86 vì OPC): phải chạy phần IEC61850 như một tiến trình x64 riêng biệt (exe phụ), giao tiếp với app chính (x86) qua cơ chế liên tiến trình — ví dụ named pipe, TCP socket nội bộ, hoặc file/DB trung gian. Không thể nhúng thẳng
IedConnectionvào cùng exe với OPCAutomation khi 1 bên buộc x64, 1 bên buộc x86.
Bạn có muốn tôi viết lại phiên bản Console App x64 độc lập để test trước (bước 2), sau đó nếu kết nối OK thì tính tiếp phương án kiến trúc 2 tiến trình ở bước 3 không?

