ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
GVHD : TS. Nguyễn Thiện Thành
SV : Nguyễn Phước Lộc
MSSV : 40901457
TP.HCM - 08/2013
i
LỜI CẢM ƠN
Được sự hỗ trợ và giúp đỡ của Công ty TNHH Kỹ Thuật PLC Việt Nam, em đã có cơ hội
được nghiên cứu và tìm hiểu về hệ thống PLC và SCADA của Siemens Automation trong quá trình
thực tập tốt nghiệp.
Đầu tiên em xin gửi lời cảm ơn chân thành nhất đến anh Trần Văn Hiếu, người đã tận tình
giúp đỡ, hướng dẫn em trong thời gian thực tập tại công ty.
Em cũng xin cảm ơn thầy Phạm Phú Thọ và các anh chị trong Công ty TNHH Kỹ Thuật
PLC Việt Nam đã giúp đỡ em trong suốt quá trình thực tập.
Ngoài ra em cũng xin cảm ơn thầy Nguyễn Thiện Thành, người đã định hướng, giúp đỡ để
em có thể hoàn thành khóa thực tập này.
Cuối cùng em cũng xin cảm ơn sự giúp đỡ và hỗ trợ nhiệt tình của các bạn trong nhóm thực
tập .
Tp.HCM, ngày 10 tháng 08 năm 2013.
Em xin chân thành cảm ơn.
ii
PHIẾU ĐÁNH GIÁ KẾT QUẢ THỰC TẬP
NHẬN XÉT CỦA CÔNG TY TNHH KỸ THUẬT PLC VIỆT NAM:
ĐIỂM ĐÁNH GIÁ:
Người hướng dẫn: K.Sư Trần Văn Hiếu
Xác nhận của đơn vị thực tập
iii
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN:
iv
NỘI DUNG THỰC TẬP
- Tìm hiểu về PLC S7-300, lập trình các hệ thống MPS 300 bằng phần mềm TIA Portal
- Sử dụng phần mềm WinCC 7.0 để thiết kế hệ thống điều khiển giám sát
- Tìm hiểu về các phần mềm OPC: Kepware, IBH OPC
- Tìm hiểu các chuẩn truyền thông MPI, Profinet
MỤC LỤC
LỜI CẢM ƠN i
PHIẾU ĐÁNH GIÁ KẾT QUẢ THỰC TẬP ii
NỘI DUNG THỰC TẬP iv
PHẦN 1 LẬP TRÌNH PLC S7-300 VÀ PHẦN MỀM SCADA 7
CHƯƠNG 1 LẬP TRÌNH SCL S7-300 TRÊN STEP7 MANAGER 7
CHƯƠNG 2 LẬP TRÌNH S7-300 TRÊN PHẦN MỀM TIA PORTAL 13
1). Giới thiệu về phần mềm TIA portal 13
2). Sử dụng TIA portal để cấu hình cho các trạm MPS 300 13
CHƯƠNG 3 KẾT NỐI CÁC PHẦN MỀM SCADA VỚI S7300 VÀ OPC SERVER 17
I) GIAO TIẾP S7-300 VỚI CÁC PHẦN MỀM SCADA THÔNG QUA CÁP USB MPI 17
1. Kết nối S7-300 với WinCC 17
2. Kết nối S7-300 với các phần mềm SCADA khác 19
A. Cấu hình các thông số trên phần mềm IBH OPC Server 20
B. Cấu hình trên phần mềm Citect SCADA để liên kết với IBH OPC 24
II) GIAO TIẾP S7-300 VỚI CÁC PHẦN MỀM SCADA THÔNG QUA CÁP
ETHERNET 27
A. Cấu hình cho PLC 27
B. Cấu hình cho máy tính 32
C. Cấu hình cho OPC Server 33
CHƯƠNG 4 TRAO ĐỔI DỮ LIỆU TỪ WINCC VÀ SQL DATABASE 37
PHẦN 2 LẬP TRÌNH ĐIỀU KHIỂN VÀ GIÁM SÁT TRẠM MPS 44
A. TRẠM CUNG CẤP 44
1. Chức năng 44
2. Các module và I/O 45
3. Lập trình chương trình điều khiển 48
4. Thiết kế chương trình giám sát 57
B. TRẠM PHÂN LOẠI SẢN PHẪM 60
1) Chức năng 61
2) Các module và I/O 61
3) Lập trình chương trình điều khiển 63
4) Thiết kế chương trình giám sát 69
C. TRẠM BỒN NƯỚC - EDUKIT PA 72
1. Giới thiệu hệ thống bồn nước: 72
2. Cấu tạo: 72
3. Kết nối hệ thống với PLC S7-300: 76
4. Giải thuật PID ổn định mực nước và lập trình khối PID bằng Ngôn ngữ SCL 77
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 7 GVHD: TS. Nguyễn Thiện Thành
PHẦN 1 LẬP TRÌNH PLC S7-300 VÀ PHẦN MỀM SCADA
CHƯƠNG 1 LẬP TRÌNH SCL S7-300 TRÊN STEP7 MANAGER
Ngôn ngữ SCL (STRUCTURED CONTROL LANGUAGE) là một cách lập trình của
Step7 bên cạnh các cách lập trình khác như LAD, STL, FBD, GRAPH.
Cách viết chương trình SCL dựa theo Pascal , thường ứng dụng để viết các thuật toán
phức tạp , các hàm toán học, quản lý dữ liệu và công thức pha chế, tối ưu quá trình.
Chương trình SCL đặt trong folder Sources.
Để viết một chương trình SCL ta click phải vào khối Source và chọn như hình:
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 8 GVHD: TS. Nguyễn Thiện Thành
Một chương trình theo ngôn ngữ SCL có cấu trúc như sau:
FUNCTION FC1: VOID
VAR_INPUT
IN1: INT;
END_VAR
VAR_OUTPUT
OUT1: INT;
END_VAR
VAR_IN_OUT
IN_OUT1: INT;
END_VAR
VAR_TEMP
TEMP1: INT;
END_VAR
BEGIN
END_FUNCTION
Để có được cấu trúc như trên ta thực hiện như hình sau:
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 9 GVHD: TS. Nguyễn Thiện Thành
Ví dụ sau đây trình bày cách viết khối FC3 có chức năng gộp (combine) hai kiểu dữ liệu từ đầu
vào là kiểu DATE và kiểu TIME_OF_DAY thành một kiểu dữ liệu duy nhất là DATE_AND_TIME.
** Kiểu dữ liệu dạng DATE được lưu trữ trong S7 bằng 1 word ( 2byte). Giá trị của ô nhớ
chứa kiểu dữ liệu dạng này sẽ là số ngày tính từ mốc 01-01-1990 (ô nhớ này chứa giá trị 0 sẽ là
ngày 01-01-1990).
Định dạng của kiểu dữ liệu này là DATE# hoặc D#
Ví dụ ô nhớ MW0 chứa kiểu dữ liệu là DATE, và giá trị của ô nhớ này là 5, thì có nghĩa là
ngày được lưu ở MW0 là ngày 06-01-1990, tương tự giá trị 200 sẽ là ngày 20-07-1990.
** Kiểu dữ liệu TIME_OF_DAY được lưu trữ trong S7 bằng 2word (4byte), cho biết thời gian
trong 1 ngày. Giá trị của ô nhớ chứa kiểu dữ liệu dạng này sẽ là tổng số milisecond.
Định dạng của kiểu dữ liệu này là TIME_OF_DAY# hoặc TOD#
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 10 GVHD: TS. Nguyễn Thiện Thành
Ví dụ ô nhớ MD0 chứa kiểu dữ liệu dạng TIME_OF_DAY và giá trị của ô nhớ này là 3 600
000 thì có nghĩa thời gian đang là 1 giờ ( 60*60*1000), hay nói cách khác có nghĩa là nếu ta move
TOD#1:00:00 vào ô nhớ MD0 thì ô nhớ này có giá trị là 3 600 000
** Kiểu dữ liệu DATE_AND_TIME được lưu trữ theo mãng gồm 8 byte BCD liên tiếp:
Bytes
Content
Range
0
Year
1990 to 2089
1
Month
01 to 12
2
Day
1 to 31
3
Hour
0 to 23
4
Minute
0 to 59
5
Second
0 to 59
6
2 MSD (most
significant
decade) of ms
00 to 99
7 (4 MSB)
LSD (least
significant
decade) of ms
0 to 9
7 (4 LSB)
Weekday
1 to 7 (1 = Sunday)
FUNCTION FC3 : DATE_AND_TIME
VAR_INPUT
IN_TIME: TOD;
IN_DATE: DATE;
END_VAR
VAR_TEMP
IN_DATE_TEMP : DATE;
DATE_VALUE AT IN_DATE_TEMP : INT;
y,m, ddd, mm, dd, mi : DINT;
g : DINT;
day : DINT;
month : DINT;
year : DINT;
IN_TIME_TEMP : TOD;
TIME_VALUE AT IN_TIME_TEMP : DINT;
totalSeconds , totalMinutes : DINT;
currentMinute , currentSecond , currentMiliSec, totalHours :INT;
MSD_milisec, LSD_milisec, Other : INT;
S, Ngay_Trong_Tuan : DINT;
so_ngay_tinh_tu_dau_nam : DINT;
OUT_DATE_TIME : DATE_AND_TIME;
// Tạo con trỏ để trỏ về 8 byte lưu trữ của kiểu DATE_AND_TIME
STUFF AT OUT_DATE_TIME : STRUCT
Year : BYTE;
Month : BYTE;
Day : BYTE;
Hour : BYTE;
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 11 GVHD: TS. Nguyễn Thiện Thành
Minute : BYTE;
Second : BYTE;
MilliSecond : BYTE;
Other : BYTE;
END_STRUCT;
END_VAR
BEGIN
//** DATE ** //
IN_DATE_TEMP := IN_DATE;
//** Các công thức sau trả về chính xác ngày – tháng - năm từ số ngày cách
từ mốc 01-01-1990 ** //
g := DATE_VALUE + 142385;
Ngay_Trong_Tuan := (g MOD 7) + 4;
y := TRUNC((10000*g + 14780)/3652425);
ddd := g - TRUNC(365*y + y/4 - y/100 + y/400);
IF (ddd < 0) THEN
y := y - 1;
ddd := g - TRUNC(365*y + y/4 - y/100 + y/400);
END_IF;
mi := TRUNC((100*ddd + 52)/3060);
month := ((mi + 2) MOD 12) + 1;
year := 1600 + y + TRUNC((mi + 2)/12);
day := ddd - TRUNC((mi*306 + 5)/10) + 1;
Other := DINT_TO_INT(Ngay_Trong_Tuan) + LSD_milisec*256;
// Loại bỏ 2 chữ số đầu của năm để lưu trữ thành 1 byte //
// 90 -> 99 là 1990 - > 1999//
// 00 -> 89 là 2000 - > 2089//
IF ( year >=1900 & year < 2000 ) THEN
year := year - 1900;
ELSIF ( year >= 2000 ) THEN
year := year - 2000;
END_IF;
// Code sau sẽ trả về thứ (day of week), chủ nhật tương ứng số 1 //
CASE (DINT_TO_INT(Ngay_Trong_Tuan)) OF
4: Ngay_Trong_Tuan := 4;
5: Ngay_Trong_Tuan := 5;
6: Ngay_Trong_Tuan := 6;
7: Ngay_Trong_Tuan := 7;
8: Ngay_Trong_Tuan := 1;
9: Ngay_Trong_Tuan := 2;
10: Ngay_Trong_Tuan := 3;
END_CASE;
//** Trả về thời gian từ tổng số milisecond ** //
IN_TIME_TEMP := IN_TIME;
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 1 Lập trình SCL S7300 trên Step7
SV: Nguyễn Phước Lộc trang 12 GVHD: TS. Nguyễn Thiện Thành
totalSeconds := TRUNC(TIME_VALUE / 1000);
currentMiliSec := DINT_TO_INT(TIME_VALUE MOD 1000);
currentSecond := DINT_TO_INT(TRUNC((totalSeconds MOD 60)));
totalMinutes := DINT_TO_INT(totalSeconds / 60);
currentMinute := DINT_TO_INT(TRUNC(totalMinutes MOD 60));
totalHours := DINT_TO_INT(TRUNC(totalMinutes / 60));
// Tách MSD và LSD của curentMilisec để lưu trữ vào byte thứ 6 và byte thứ 7
LSD_milisec := currentMiliSec MOD 10 ;
MSD_milisec := (currentMiliSec - LSD_milisec) / 10 ;
// trả về giá trị cho khối
STUFF.Year := DINT_TO_BYTE(year);
STUFF.Month := DINT_TO_BYTE(month);
STUFF.Day := DINT_TO_BYTE(day);
STUFF.Hour := INT_TO_BYTE(totalHours);
STUFF.Minute := INT_TO_BYTE(currentMinute);
STUFF.Second := INT_TO_BYTE(currentSecond);
STUFF.MilliSecond := INT_TO_BYTE(MSD_milisec);
STUFF.Other := INT_TO_BYTE(Other);
FC10 := OUT_DATE_TIME;
END_FUNCTION
// Debug để kiểm chứng kết quả
ORGANIZATION_BLOCK OB1
VAR_TEMP
// Reserved
info : ARRAY[0 19] OF BYTE;
// Temporary Variables
TEMPX : DATE_AND_TIME;
END_VAR
TEMPX := FC3( IN_TIME:= TOD#2:0:0, IN_DATE:= D#2000-01-01);
END_ORGANIZATION_BLOCK
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 2 Lập trình S7-300 trên phần mềm TIA portal
SV: Nguyễn Phước Lộc trang 13 GVHD: TS. Nguyễn Thiện Thành
CHƯƠNG 2 LẬP TRÌNH S7-300 TRÊN PHẦN MỀM TIA PORTAL
1). Giới thiệu về phần mềm TIA portal
Phần mềm TIA portal là phần mềm tự động hóa tích hợp vừa được hãng Siemens
giới thiệu vào cuối năm 2010. Chức năng của phần mềm vừa có thể lập trình cho các dòng PLC
của hãng như S7-200, S7-300/400, S7-1200 vừa lập trình cho HMI trên một giao diện thống nhất.
2). Sử dụng TIA portal để cấu hình cho các trạm MPS 300
Khởi động phần mềm TIA Portal và tạo project mới
chọn “Configure a device”
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 2 Lập trình S7-300 trên phần mềm TIA portal
SV: Nguyễn Phước Lộc trang 14 GVHD: TS. Nguyễn Thiện Thành
Chọn CPU, sau đó ấn Enter
Ta được giao diện như hình sau:
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 2 Lập trình S7-300 trên phần mềm TIA portal
SV: Nguyễn Phước Lộc trang 15 GVHD: TS. Nguyễn Thiện Thành
Bước tiếp theo ta thêm module DI/DO và module truyền thông vào:
+ Kéo và thả module DI/DO vào rack thứ 4
+ Kéo và thử module truyền thông vào rack thứ 5
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 2 Lập trình S7-300 trên phần mềm TIA portal
SV: Nguyễn Phước Lộc trang 16 GVHD: TS. Nguyễn Thiện Thành
Vậy là ta đã hoàn thành việc cấu hình phần cứng cho các trạm MPS, công đoạn cuối cùng
là download cấu hình này xuống cho PLC.
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 17 GVHD: TS. Nguyễn Thiện Thành
CHƯƠNG 3 KẾT NỐI CÁC PHẦN MỀM SCADA VỚI S7300 VÀ OPC
SERVER
I) GIAO TIẾP S7-300 VỚI CÁC PHẦN MỀM SCADA
THÔNG QUA CÁP USB MPI
1. Kết nối S7-300 với WinCC
Đối với phần mềm WinCC thì có thể giao tiếp trực tiếp với S7-300 qua driver S7 Protocol Suite.
Các bước cấu hình trên WinCC để giao tiếp với S7-300:
a) Tạo một project mới
b) Add driver để liên kết PC với S7
c) Tạo một kết nối, đặt tên, chỉnh các thông số trong Properties cho phù hợp
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 18 GVHD: TS. Nguyễn Thiện Thành
d) Tạo các Tag để liên kết với PLC
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 19 GVHD: TS. Nguyễn Thiện Thành
2. Kết nối S7-300 với các phần mềm SCADA khác
Đối với các phần mềm SCADA khác thì phải kết nối thông qua các OPC Server.
Phần sau đây sẽ trình bày kết nối giữa S7-300 với phần mềm Citect SCADA thông qua
OPC Server.
Trong các phần mềm OPC server thì Kepware OPC được sử dụng rộng rãi do hỗ trợ rất
nhiều driver kết nối và tài liệu hướng dẫn đi kèm ( hơn 160 loại PLC ). Mặc dù vậy cho đến phiên
bản mới nhất hiện nay là KEPserverEX v5.12 vẫn chưa hỗ trợ kết nối với PLC S7-300 thông qua
cáp USB MPI.
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 20 GVHD: TS. Nguyễn Thiện Thành
Phần sau sẽ trình bày cách kết nối Citect SCADA với PLC S7-300 qua phần mềm IBH OPC
Server.
A. Cấu hình các thông số trên phần mềm IBH OPC Server
a) Trên giao diện chính của phần mềm
b) Chọn S7 Simatic NET
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 21 GVHD: TS. Nguyễn Thiện Thành
c) Cấu hình kết nối
d) Set PG/PC interface …
e) Sau khi hoàn thành các bước trên ta click vào nút “Test PLC connection” để kiểm tra kết
nối đã thành công hay chưa. Thông báo sau trả về đúng số hiệu PLC, nghĩa là kết nối đã thành
công.
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 22 GVHD: TS. Nguyễn Thiện Thành
Chú ý: Nếu ở bước này phần mềm báo kết nối không thành công hoặc báo về sai số
hiệu PLC thì ta phải kiểm tra lại cấu hình phần cứng của PLC như slot, địa chỉ MPI
…
f) Tạo các Tag để liên kết với PLC
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 23 GVHD: TS. Nguyễn Thiện Thành
Ấn vào nút “Test variable” để kiểm tra giá trị hiện thời của Tag
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 24 GVHD: TS. Nguyễn Thiện Thành
g) Bước cuối cùng là Transfer các cấu hình vừa cài đặt trên IBH OPC Editor xuống IBH OPC
server.
B. Cấu hình trên phần mềm Citect SCADA để liên kết với IBH OPC
a) Tạo một project mới trên Citect Explorer
b) Tạo các server: Clusters, IO Server …
Báo cáo thực tập tốt nghiệp Công ty TNHH Kỹ Thuật PLC Việt Nam
Chương 3 Kết nối các phần mềm SCADA với S7-300 và OPC server
SV: Nguyễn Phước Lộc trang 25 GVHD: TS. Nguyễn Thiện Thành
c) Tạo IO Device liên kết với IBH OPC Server (IBHSoftec.IBHOPC.DA)
d) Tạo các Tag