Thứ Năm, 28 tháng 1, 2021

KẾT NỐI PC VỚI PLC S7-1200 QUA OPC SEVER TRÊN GIAO DIỆN C# VÀ ỨNG DỤNG


CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ PLC S7-1200 CỦA SIEMEN


Board tín hiệu là một dạng modul mở rộng tín hiệu vào/ra với số lượng tín hiệu ít, giúp tiết kiệm chi phí cho các ứng dụng yêu cầu mở rộng số lượng tín hiệu ít.

 Modul mở rộng tín hiệu vào,ra
Các modul mở rộng tín hiệu vào/ra được gắn trực tiếp vào phía bên phải của CPU.Với dải rộng các loại modul tín hiệu vào/ra số và analog, giúp linh hoạt trong sử dụng S7-1200. Tính đa dạng của cá modul tín hiệu vào/ra sẽ được tiếp tục phát triển.

 Modul truyền thông
Bên cạnh truyền thông Ethernet được tích hợp sẵn, CPU S7-1200 có thể mở rộng được 3 modul truyền thông khác nhau, giúp cho việc kết nối được linh hoạt hơn. Tại thời điểm giới thiệu S7-200 ra thị trường, có các modul RS232 và RS485, hỗ trợ các protocol truyền thông như modbus, USS…



CHƯƠNG 2: GIỚI THIỆU TIA PORTAL, PC ACCESS VÀ NGÔN NGỮ C# 
5

2.1 Phần mềm lập trình TIA PORTAL

Phần mềm dùng để lập trình cho S7-1200 là Step7 Basic. Step7 Basic hỗ trợ ba ngôn ngữ lập trình là FBD, LAD và SCL. Phần mềm này được tích hợp trong TIA Portal 11 của Siemens.

2.2 Phần mềm PC AccessPC Access

 Là phần mềm của Siemens dùng để truy xuất dữ liệu từ một số PLC của hãng. PC Access hoạt động thông qua OPC Server, vốn được chuẩn hóa bởi OPC Foundation.

PC Access cung cấp thư viện bổ sung cho Excel, Protool, VB nhằm kết nối PLC với PC từ các chương trình này.Hạn chế của PC Access trong việc tạo OPC sever cho S7-1200:PC Access được thiết kế chủ yếu dành cho dòng PLC S7-200, tuy nhiên có thể dùng được với PLC S7-1200, nhưng chỉ có các thẻ dữ liệu trong khối dữ liệu DB1 của S7- 1200 mới có thể được truy cập, nguyên nhân là do S7-200 chỉ có một khối dữ liệu.2.3 Ngôn ngữ lập trình C# và ứng dụngC# là một ngôn ngữ lập trình ứng dụng, ngôn ngữ biên dịch, ngôn ngữ đa năng được phát triển bởi hãng Microsoft, là một phần khởi đầu cho kế hoạch .NET. Microsoft phát triển C# dựa trên C, C++ và Java. C# được miêu tả là ngôn ngữ có được sự cân bằng giữa C++, Visual Basic, Delphi và Java…

Ưu điểm nổi trội so với các ngôn ngữ khác:
- C# là ngôn ngữ đơn giản, có ít từ khóa
- C# là ngôn ngữ hiện đại
- C# là ngôn ngữ hướng đối tượng, hướng module
- C# là ngôn ngữ mạnh mẽ và mềm dẻo



CHƯƠNG 3: TỔNG QUAN VỀ OPC SERVER 

3.1 OPC Server


- OPC dựa trên Microsoft Component Object Model (COM)
- OPC được viết tắt từ “OLE for Process Control”.
- OPC được điều hành bởi tổ chức độc lập: OPC Foundation (www.opcfoundation.org)
- OPC chuẩn hóa cách liên kết giữa các phần mềm trong ngành tự động công nghiệp.
- OPC Server là một ứng dụng hoạt động như một API (giao diện lập trình ứng dụng) hoặc là một bộ chuyển đổi giao thức.
- Một OPC Server sẽ kết nối với các thiết bị như PLC (Programable Logic Controller - bộ điều khiển lập trình được), DCS (Distributed control system - hệ điều khiển phân tán), RTU (Remote Terminal Unit), cơ sở dữ liệu…rồi chuyển đổi dữ liệu sang định dạng OPC chuẩn.

3.2 OPC Client

Những ứng dụng OPC (OPC Client) như HMI, bộ ghi dữ liệu, bảng biểu, vẽ đồ thị… có thể kết nối với OPC Server rồi đọc/ghi dữ liệu lên thiết bị.” Trong project này ta sẽ nghiên cứu cách kết nối C# với một OPC Server, như vậy C# sẽ là một OPC Client. OPC Server ở đây sẽ là Simatic S7-200 PC Access OPC Server 

  3.3 Một số thuật ngữ trong OPC


 OPC Object 
– một đối tượng được client tạo ra và dùng để kết nối đến OPC Server, đối tượng đã được định danh này – sau đó dùng để đọc và ghi dữ liệu đến PLC, DCS… thông qua OPC Server.


 OPC Item 

- một tag hay một biến dữ liệu được quản lý bởi OPC Server - tức là một biến dữ liệu trong một PLC.


 OPC Group

 - một nhóm OPC item được người dùng định nghĩa. Được tạo ra bởi các OPC client như là một cách thức quản lý một nhóm dữ liệu – một nhóm biến điều khiển trên một thiết bị.


 Collection
 - một nhóm các đối tượng có kiểu dữ liệu giống nhau.


3.4 Tạo kết nối giữa C# và OPC

Bước 1: Khai báo

private OpcServer TheSvr; Khởi tạo đối tượng OPCServer và OPCGroup, những đối tượng này xem như được mặc định

private OpcGroup TheGrp; với OPCServer cho một phiên làm việc mà client kết nối đến.
private S7200 PLC = new S7200(); Khai báo tên của PLC sử dụng trong chương
trình.

Bước 2: Kết nối OPC Sever

TheSvr = new OpcServer();         Tạo một đối tượng OPC Sever mới.
const string ServerProgID = "Program";Khai báo tên máy chủ để kết nối đến
“SeverProgID”.
TheSvr.Connect(ServerProgID);Kết nối sever với tên máy chủ đã khai
báo
Bước 3: Tạo OPC Group
TheGrp = TheSvr.AddGroup("abc", false, 187500);Thêm một Group mới vào
Group Collection
TheGrp.SetEnable(true);
TheGrp.Active = true;
Kích hoạt Group

Bước 4: Ghi/Đọc giá trị lên PLC 
PLC.write_PLC(TheGrp, "A", "B", "C");Ghi dữ liệu lên PLC
A – Địa chỉ/Biến PLC cần ghi dữ
liệu.
B – Giá trị cần ghi
C – Kiểu của biến/địa chỉ PLC
PLC.read_PLC_bool(TheGrp, "D");Đọc dữ liệu từ PLC (kiểu bool)
D – Địa chỉ/ biến PLC cần đọc dữ
liệu

CHƯƠNG 4: KẾT NỐI PLC S7-1200 VỚI C# QUA OPC SERVER TẠO BỞI PC
ACCESS

4.1 Thiết lập cấu hình cho PLC trên TIA PORTAL

Bước 1: Tạo một Project mới

Khởi động phần mềm TIA PORTAL V11 → Chọn 
“Creat new project” → Đặt tên và chọn nơi lưu trữ cho project → “Creat”

Bước 2: Thiết lập cấu hình cho PLC

Sau khi tạo được project mới ta có giao diện Portal view


   
Có thể chuyển giữa 2 chế độ xem “Project view” và “Portal view” bằng cách ấn vào 1 trong 2 vùng khoanh tròn trong trên. Chọn module và version của PLC hiện có, ví dụ ở trong project này “Configure a device” → “Add new device” → “PLC” → “SIMATIC S7-1200” → “CPU”→“CPU 1211C AC/DC/Rly” → “6ES7 211-1BD30-0XB0” → Version “v2.0”


Đặt lại tên cho PLC tại ô “Device name” chọn “Add” để thêm PLC vừa tạo vào project

Bước 3: Thiết lập địa chỉ IP cho PLC

Sau khi thêm PLC mới vào project ta có giao diện



Để phần mềm TIA PORTAL có thể kết nối với PLC ta cần thay đổi địa chỉ IP
trên PLC vừa tạo trùng với địa chỉ IP của PLC hiện có.

   Trên PLC vừa tạo ta chọn cổng Ethernet → Trong cửa sổ thuộc tính PLC được khoanh đỏ trong hình  ta chọn thẻ “Properties” → Trong thẻ “General” chọn
theo đường dẫn 
“PROFINET interface” → “Ethernet addresses”Trong mục “IP protocol” ta thay đổi “IP address”. Ví dụ ở đây PLC thật có địa
chỉ IP : 
192.168.0.1

Bước 4: Thay đổi địa chỉ IP của máy tính
   Cần thay đổi địa chỉ IP của máy tính có dạng 
192.168.0.xyz có dạng giống với
IP của PLC 
192.168.0.1 trong đó “xyz” phải khác IP của PLC.
Đối với Win 7 :
“Control Panel”

→“Network and Sharing

Center”

→“Change adapter settings”

→“Local Area Connection”

→“Internet Protocol Version 4

(TCP/IPv4)”

→“Properties”
→”Ok”
→”Ok”

Bước 5: Lập trình LAD cho PLC S7-1200

Trong cửa sổ “Project tree” chọn theo đường dẫn đến mục “Program blocks”.
Chọn 
“Main [OB1]” để mở giao diện lập
trình.


Bước 6: Tải chương trình xuống PLC
   Sau khi đã lập trình xong để nạp chương trình cho PLC:“Online” → “Download to device”Trong cửa sổ “Extended download to device” hiện ra, trong lựa chọn “PG/PC interface” ta chọn cổng Ethernet của máy tính → Đợi phần mềm tìm đến PLC được kết nối (tích vào “Show all accessible devices” nếu không tìm thấy PLC)
Sau khi đã kết nối được PLC → Chọn PLC và ấn nút 
“Load” → Tiếp tục làm
theo hướng dẫn cho đến khi 
“Finish” 

4.2 Tạo OPC Server trên PC Access  
 
Bước 2: Thêm PLC mới
   Chọn 
"Edit → New → PLC" một cửa sổ "PLC properties" hiện ra để thiết lập
thuộc tính.
Name: "S7-1200_PLC" (Đặt tên PLC)
IP Address: "192.168.0.1" (Địa chỉ IP của PLC)
TSAP Local: "10.00." (TSAP của PC Access)
TSAP Remote: "03.01." (TSAP của S7-1200 PLC)
 
 

Bước 3: Thêm các Item
Chọn 
"Edit → New → Item" cửa sổ “Item properties” hiện ra cho phép nhập các
thông số:
Tên của Item "Name:" input field.
Địa chỉ của thẻ "Address:" input field.
Chọn kiểu dữ liệu "Data Type:" input field



Bước 4: Lưu project“File → Save”  

Bước 5: Giám sát và chạy thử
Chọn các Item cần giám sát → Chọn nút 
"Add current items to test client" trên
thanh công cụ. Các Item được chọn sẽ được chuyển xuống của sổ 
“Test Client”  

Kết nối PLC S7-1200 với máy tính.
Sau đó để bắt đầu chạy thử chọn nút 
"Start Test Client" trên thanh công cụ. Nếu
cột 
“Quality” trong khung “Test Client” có giá trị là “Good” tức là quá trình kết nối
tới PLC thành công.
 

4.3 Tạo ứng dụng trên C# kết nối đến OPC Server
Bước 1: Tạo project mới“File” → “New” → “Project”


Trong cửa sổ “New project” chọn “Visual C#” → “Windows Froms Application” → Đặt tên và chọn nơi lưu cho project trong “Name” và “Location”→ “Ok” 

Để thuận tiện cho lập trình ta cho hiển thị các thanh công cụ “Tool box”,“Solution Explorer”“Properties” bằng cách vào “View” chọn đến thanh công cụ
cần hiển thị. Ta được giao diện như hình sau:
 


Bước 2: Thêm thư viện OPC Sever
Trong khung 
“Solution Explorer” → Click chuột trái vào “References” “Add Reference…  

Trong cửa sổ “Reference Manager” → Chọn “Browe…” → Thêm file thư việnSiemensOPCdotNETLib.dll → “Ok”  
“SiemensOPCdotNETLib.dll” là thư viện chứa các đối tượng, thuôc tính, các câu
lệnh, các hàm nhằm thực hiện kết nối đến OPC Sever.

Bước 3: Lập trình file khởi tạo OPC Server
Trong khung 
“Solution Explorer” → Click chuột trái vào tên project, ví dụ
“app_da_cn” → 
“Add” → “New item…”  

Trong của sổ “Add new item” → “Visual C# Item” → “Windows Form” → Đặt
tên cho Windows form mới → “Add” 

Chèn code tạo OPC Sever trong phần Phục lục 1 và lưu lạiChú ý: Trong dòng lệnh "MicroWin:2:192.168.0.1:1000:0301," thì địa chỉ (192.168.0.1) chính là địa chỉ PLC, vì vậy trong code cần sửa lại tất cả về địa chỉ PLC hiện có.
Bước 4: Lập trình ứng dụng
Tại cửa sổ 
“Form1.cs [Design]” ta có thể lấy các Button, Lable, TextBox, … từ thanh “Toolbox” để xây dựng giao diện theo yêu cầu.
Trong khung 
“Properties” ta chỉnh lại các thuộc tính và tên của các đối tượng sao cho hợp lý và dễ sử dụng.
Để lập trình các hành động cho đối tượng ta kích chuột trái vào Form → 
“View code”.
 Một số đối tượng và thuộc tính thường được sử dụng trong quá trình lập trình:  

CHƯƠNG 5: ỨNG DỤNG BỘ CHUYỂN ĐỔI NGUỒN ĐIỆN TỰ ĐỘNG
5.1 Mô tả công nghệ
Hộ tiêu thụ điện được cấp điện từ 2 nguồn, 1 là từ điện áp lưới, 2 là từ hệ thống
máy phát dự phòng.
Rơle RL báo điện áp lưới, tiếp điểm của nó được đưa vào PLC
Rơle RF báo điện áp từ máy phát điện, tiếp điểm của nó cũng được đưa vào PLC
Các thao tác vận hành, khởi động và đóng máy phát dự phòng được thực hiện như
sau:

 Khi mất điện áp lưới (UL=0):
Ấn nút Start → ON 1s, OFF 10s động cơ đề cho động cơ Diezen. Quá trình
này được lặp đi lặp lại 3 lần cho đến khi có điện áp từ máy phát (UF=1) thì
thôi. Trường hợp sau 3 lần thử khởi động máy phát không thành công thì hệ sẽ
dừng.

 Khi mất UL=0 và có UF=1 (đã khởi động được máy phát):
Chuyển sang cấp điện cho hộ tiêu thụ từ nguồn máy phát. Hay là CF ON 1s.
 Khi có lại UL=1 và đang có UF=1:
Đợi 2 phút để chắc chắn có điện lưới lại. Chuyển tải sang điện lưới CL ON 1s.
Sau đó dừng máy phát ON 1s.
5.2 Phân cổng vào ra  
5.3 Lưu đồ chương trình  

5.4 Giao diện chương trình ứng dụng  

5.5 Lựa chọn thiết bị
Hệ thống được thiết kế cấp điện cho một hộ gia đình nên nguồn cung cấp sẽ là điệnxoay chiều một pha và máy phát điện xoay chiều cùng có U=220V và f=50Hz. Contactor đảo chiều: được thiết kế cho một số ứng dụng cụ thể, thực chất về cấu tạo gồm 2 contactor thường ghép nối qua một thiết bị để chỉ có thể một trong hai Contactor ở trạng thái đóng.  
 Rơle trung gian: chức năng trung gian báo điện áp lưới, đóng cắt khởi động
động cơ đề.
 
Thông số kỹ thuật:
- Điện áp cuộn dây: 220/240VAC
- 8 chân, 2 cặp tiếp điểm
- Relay công suất loại nhỏ 3-5A
- Tiếp điểm chịu được điện áp tới 2000 VAC,

5.6 Sơ đồ nguyên lý

Nguyên lý:
Điện áp lưới và điện áp máy phát được phát hiện và đưa về PLC thông qua các tiếp điểm thường đóng của 2 rơle trung gian, do khi mất điện áp tiếp điểm thường mở của rơle sẽ đóng báo tín hiệu về PLC.
Đầu ra của PLC sẽ điều khiển hoạt động của contactor đảo chiều (chuyển mạch), ưu điểm của loại contactor này là chỉ có một trong hai nguồn điện đến được với hộ tiêu thụ, hạn chế sự cố khi cả hai nguộn cung cấp cho một tải.
 
5.7 Sơ đồ đấu dây
KẾT LUẬN


     Có nhiều cách khác nhau để có thể kết nối giữa PC và PLC, nhưng qua việc thực hiện. Nghiên cứu này ta đã hiểu được một cách cơ bản về việc thực hiện truyền nhận dữ liệu giữa PLC và PC. Thông qua việc tìm hiểu một giao thức cụ thể là OPC Sever và sử dụng ngôn ngữ C# để tạo giao diện giám sát trên PC.
    Qua đó cũng đi vào xây dựng một số ứng dụng cụ thể như hệ thống đèn giao thông hay bộ chuyển đổi nguồn tự động để áp dụng những nội dụng tìm hiểu được vào thực tiễn. Hai ứng dụng tuy đơn giản nhưng đã đầy đủ các bước cơ bản để tiến hành thiết kế một hệ thống giám sát điều khiển từ xa.
    Trong nghiên cứu này công cụ để tạo lên OPC sever là phần mềm PC Access, tuy nhiên còn rất nhiều phần mềm khác có thể tạo nên một OPC Sever, giúp trao đổi dữ liệu giữa PC và PLC. Cũng như vậy, còn nhiều cách khác nhau để giao tiếp giữa PC và PLC, vì vậy, việc tìm hiểu các giao thức này sẽ giúp tìm ra được ưu và nhược điểm của từng phương pháp. Đồng thời giúp quá trình thiết kế hệ thống giám sát sau này xác định được những phương pháp giao tiếp phù hợp với từng ứng dụng.

Code tạo kết nối giữa PC-Access với C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using OPC.Common;
using OPC.Data.Interface;
using OPC.Data;
public class S7200
{public void write_PLC(OpcGroup TheGrp, string Address, string Value, string Type)
{
string diachi = "MicroWin:2:192.168.1.23:1000:0301," + Address + "," + Type +",RW";OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
TheGrp.AddItems(ItemDefs_, 
out rItm_);
if (rItm_ == nullreturn;
HandlesSrv_[0] = rItm_[0].HandleServer;
arrVal_[0] = Value;
TheGrp.SyncWrite(HandlesSrv_, arrVal_, 
out arrErr_);
}
public bool read_PLC_bool(OpcGroup TheGrp, string Address)
{
string diachi = "MicroWin:2:192.168.1.23:1000:0301," + Address + "," +"BOOL,RW";
OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
OPCItemState[] arrStat_ = null;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
TheGrp.AddItems(ItemDefs_, 
out rItm_);
HandlesSrv_[0] = rItm_[0].HandleServer;
TheGrp.SyncRead(
OPCDATASOURCE.OPC_DS_DEVICE, HandlesSrv_, out arrStat_);
return bool.Parse(arrStat_[0].DataValue.ToString());
}
public int read_word(OpcGroup TheGrp, string Address)
{
string diachi = "MicroWin:2:192.168.1.69:1000:0301," + Address + "," +"WORD,RW";
OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
OPCItemState[] arrStat_ = null;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
TheGrp.AddItems(ItemDefs_, 
out rItm_);
HandlesSrv_[0] = rItm_[0].HandleServer;
TheGrp.SyncRead(
OPCDATASOURCE.OPC_DS_DEVICE, HandlesSrv_, out arrStat_);
return int.Parse(arrStat_[0].DataValue.ToString());
}
public byte read_byte(OpcGroup TheGrp, string Address)
{
string diachi = "MicroWin:2:192.168.1.23:1000:0301," + Address + "," +"BYTE,RW";
OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
OPCItemState[] arrStat_ = null;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
30TheGrp.AddItems(ItemDefs_, out rItm_);
HandlesSrv_[0] = rItm_[0].HandleServer;
TheGrp.SyncRead(
OPCDATASOURCE.OPC_DS_DEVICE, HandlesSrv_, out arrStat_);return byte.Parse(arrStat_[0].DataValue.ToString());
}
public long read_dword(OpcGroup TheGrp, string Address)
{
string diachi = "MicroWin:2:192.168.1.23:1000:0301," + Address + "," +"DWORD,RW";
OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
OPCItemState[] arrStat_ = null;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
TheGrp.AddItems(ItemDefs_, 
out rItm_);
HandlesSrv_[0] = rItm_[0].HandleServer;
TheGrp.SyncRead(
OPCDATASOURCE.OPC_DS_DEVICE, HandlesSrv_, out arrStat_);return long.Parse(arrStat_[0].DataValue.ToString());
}
public float read_float(OpcGroup TheGrp, string Address)
{
string diachi = "MicroWin:2:192.168.1.23:1000:0301," + Address + "," +"DWORD,RW";
OPCItemDef[] ItemDefs_ = new OPCItemDef[1];
OPCItemResult[] rItm_;
OPCItemState[] arrStat_ = null;
int[] HandlesSrv_ = new int[1];
int[] arrErr_ = new int[1];
object[] arrVal_ = new object[1];
ItemDefs_[0] = 
new OPCItemDef(diachi, true, 1234, VarEnum.VT_EMPTY);
TheGrp.AddItems(ItemDefs_, 
out rItm_);
HandlesSrv_[0] = rItm_[0].HandleServer;
TheGrp.SyncRead(
OPCDATASOURCE.OPC_DS_DEVICE, HandlesSrv_, out arrStat_);return float.Parse(arrStat_[0].DataValue.ToString());
}
 

0 nhận xét:

Đăng nhận xét