Professional Documents
Culture Documents
Tia300-Nc 2018
Tia300-Nc 2018
Chọn Data block (DB) > Đặt tên cho khối > Type: Global DB > Chọn number: Automatic >
Nhấn OK
(Đặt tên cho dễ hiểu, không nên quá dài như ví dụ)
Kết quả:
Tạo biến tên WR_SYS_T (đặt tên trùng khối cho dễ quản lý, hoặc tùy người viết)
Data type: Date_And_Time
Start value: thời gian ta muốn đặt với cú pháp DT#năm-tháng-ngày-giờ:phút:giây.miligiây
Khi tác động M5.0 sẽ thực hiện load thời gian DT#2020-01-15-7:20:0.0 vào CPU. Ta chỉ cần
load thời gian này vào CPU 1 lần nên M5.0 chỉ cần tác động 1 lần duy nhất. Nêu tác động lại
thì sẽ lại load DT#2020-01-15-7:20:0.0 vào CPU.
MW210 sẽ lưu giá trị mã lỗi của khối:
* Trong khối DB này ta cũng tao một biến có data type là Date_And_Time
Ta muốn đọc liên tục thì chân EN luôn TRUE (ở đây sử dụng 1 tiếp điểm NC)
* Tạo một DB tên CMP_DT để ta lưu giá trị đặt mong muốn
* Khai báo 1 biến với data type là Date And Time và giá trị DT#2020-01-015-20:10:00
Đặt vấn đề: Viết chương trình tưới cây tự động vào 10 giờ sáng hằng ngày trong 10 phút.
Trong khối DB tên CMP_DT ta đã tạo biến với khung giờ trên, thế nhưng khung giờ cố định
nhưng ngày lại khác, qua ngày mới DB không thể tự thay đổi ngày trong khung giờ so sánh.
IN1: DT
IN2: Time
OUT: DT
Giải quyết vấn đề trên:
Ta có thể viết chương trình để mỗi lần tưới sẽ thực hiện cộng thêm 24h (tức 1 ngày) vào
khung giờ tưới.
IN1: DT
IN2: Time
OUT: DT
Tương tự phép cộng, phép trừ thực hiện (IN1 - IN2) đưa ra kết quả OUT.
Giá trị tại chân RET_VAL chính là thời gian CPU bắt đầu hoạt động.
Giá trị sẽ chạy lại từ 0 khi CPU chuyển từ STOP sang RUN hoặc vượt quá giới hạn 231 -1 ms.
* Chọn FC Function > Đặt tên khối "Motor_Controller" > Chọn ngôn ngữ LAD > OK
Kết quả:
* Ta vào khối FC vừa tạo ở trên, khai báo biến Input và Output
Các biến Input bao gồm:
Nút nhấn START
Nút nhấn STOP
Nút điều khiển Motor chạy thuận: FOR.
Nút điều khiển Motor chạy nghịch: REV.
2 bộ Timer để đặt thời gian là Timer_For và Timer_Rev
2 chân để đặt giá trị thời gian
(Ở đây sử dụng Simatic Timer nên Data type là S5Time
và Timer. Nếu sử dụng IEC Tỉmer thì Data type là
IEC_Timer và Time)
Các biến Output bao gồm:
Đèn báo Start_light sáng khi nhấn START
Motor chạy thuận: Motor_For
Motor chạy nghịch: Motor_Rev
* Viết chương trình sử dụng các biến In, Out đã khai báo ở trên
* Sau khi viết xong ta compile kiểm tra lỗi và save project.
* Vào khối chương trình chính OB Main gọi khối FC2 (Khối FC ta tạo) ra hoặc nơi ta muốn
gọi khối "Motor_Controller" này.
** Tương tự như vậy ta có thể gọi hàm khác ra và khai báo cho Motor 2, 3, 4, ...
Chú ý trong trường hợp này đang dùng Simatic Timer nên chỉ có thể khai báo từ T0 -T255.
* Lập trình
Do chương trình thực hiện nhiều phép toán nên cần biến nhớ để chứa giá trị tính toán, giá trị
này không có ý nghĩa hiển thị ra khỏi khối nên ta dùng biến Temp.
* Sau khi viết xong ta compile kiểm tra lỗi và save project.
* Lấy Điền "SCALE_FC" hoặc FC1 (số FC khi ta khởi tạo) ta được
Bài tập 10.2: Thiết kế khối hàm chức năng đọc tín hiệu Analog, đưa ra kết quả điện (giống
tín hiệu cảm biến) và giá trị vật lý (độ cao, nhiệt độ, tốc độ, ...)
** Khi ta thay đổi các biến In, Out hay In/Out thì sẽ phải gọi lại khối hoặc Update interface
Nhấn chuột phải vào khối hàm > Chọn Update block call
Nhấn OK
** Còn nếu không thay đổi In/Out thì mà chỉ thay đổi chương trình bên trong khối thì không
ảnh hưởng đến khối hàm được gọi ra. (Lúc này chỉ khác chức năng do chương trình thay đổi).
Ví dụ 1: Từ khối hàm chức năng Motor_Controller ở trên, hãy thiết lập một khối DB quản lý
dữ liệu khối hàm này.
* Tạo một khối DB tên Motor_DB sau đó tạo các biến với kiểu dữ liệu như dưới đây.
Khi check vào ô Retain thì giá trị tag đó sẽ được lưu lại kể cả khi CPU mất điện.
Thời gian For và Rev ta có đặt tại giá trị bắt đầu trong DB, khi ta liên kết tag này với
HMI/SCADA ta có thể thay đổi thời gian chạy của Motor. (Việc này cũng có thể sử dụng
vùng nhớ M để thực hiện nhưng phức tạp hơn.)
Bảng 10.1: Khai báo thông thường Bảng 10.2: Khai báo với UDT
Chú ý kiểu dữ liệu Data type ở bảng 10.2.
Kiểu dữ liệu "Motor_UDT" như vậy ta có thể tự tạo cho mình kiểu dữ liệu mong muốn bao
gồm nhiều biến khác nhau. Như vậy khi khai báo biến ta chỉ việc chọn kiểu dữ liệu
"Motor_UDT" là sẽ bao gồm 7 biến bên trong.
* Mở Motor_UDT > Tạo biến tên Motor_type1 với kiểu dữ liệu Struct.
Sau đó tạo các biến cần thiết như bên dưới.
* Sau đó vào khối DB > Tạo biến với tên Motor_1 với kiểu dữ liệu "Motor_UDT" mà ta đã
tạo ở trên.
** Khi ta có sự thay đổi trong Motor_UDT thì bên khối DB sẽ báo lỗi
Ta muốn cập nhật thay đổi này thì nhấn chuột phải vào chỗ bôi đỏ "Motor_UDT" > Chọn
Update interface.
3.1. THIẾT KẾ KHỐI HÀM ĐIỀU KHIỂN ĐÈN GIAO THÔNG VỚI FB
* Tạo khối Function Block FB > Đặt tên Đèn giao thông > Ngôn ngữ LAD > OK
Kết quả:
Kết quả sẽ hiện lên một bảng yêu cầu ta tạo 1 Instance DB để quản lý data của khối FB này.
Nhấn OK
* Tạo khối FB với ngôn ngữ LAD > Khai báo biến
* Chương trình
Khối hàm này có chức năng như bộ Ondelay nhưng cần giữ đầu vào IN luôn
mức 1. Nếu đầu vào IN về mức 0 thì bộ Timer ngưng đếm, khi có tín hiệu đầu IN lại thì đếm
tiếp tục với giá trị thời gian dừng lúc nãy. Chân R mức 1 thì reset bộ Timer này.
** Tùy thuộc vào chức năng người sử dụng muốn mà ta có thể viết cho mình những hàm chức
năng chuyên dụng và hay dùng để tiết kiệm được thời gian khi những tính năng này lặp đi lặp
lại nhiều lần trong Project.
và
* Chọn Network view để xem 2 PLC vừa tạo:
* Nhấn vào cổng MPI của PLC (hoặc vào Properties PLC), nếu màu cam thì đang ở MPI, nếu
màu hồng thì đang ở Profibus (do PLC này chỉ có 1 cổng tích hợp MPI/Profibus)
* General > MPI address > Interface type: Chọn MPI (đối với PLC MPI riêng biệt thì không
cần phải chọn, bởi phần mềm sẽ chia ra 2 phần MPI và Profibus riêng biệt) > Add new
subnet: Sẽ tự động tạo ra 1 subnet tên MPI_1 > Address: Chọn 2
* Trở lại Network view ta thầy có một subnet MPI_1 ta vừa tạo nối vào cổng MPI của PLC1.
Tương tự ta chọn PLC2
* General > MPI address > Interface type: Chọn MPI (đối với PLC MPI riêng biệt thì không
cần phải chọn, bởi phần mềm sẽ chia ra 2 phần MPI và Profibus riêng biệt)
Tại subnet ta sổ list ra rồi chọn MPI_1 (chính là subnet ta tạo ở trên)
Trở lại Network, ta thấy 2 PLC đã kết nối mạng MPI (tên subnet MPI_1)
* Sau khi khai báo xong: Ta download station của mỗi PLC
xuống. Sau đó dùng cable nối 2 cổng MPI lại với nhau.
Lệnh X_PUT dùng để ghi dữ liệu đến PLC có địa chỉ được đặt ở tham số DEST_ID.
Dữ liệu sẽ ghi từ tham số SD đến VAR_ADDR của đối tác.
Dữ liệu truyền nhận tối đa là 76 byte.
Độ dài và kiểu dữ liệu của 2 bên phải giống nhau.
Lệnh được thực thi sau khi tham số REQ = 1, khi đang thực thi thì tham số BUSY = 1.
Lệnh X_GET dùng để đọc dữ liệu từ PLC có địa chỉ được đặt ở tham số DEST_ID.
Dữ liệu muốn đọc về được nhập tại tham số VAR_ADDR và trả về tham số RD.
Dữ liệu truyền nhận tối đa là 76 byte.
Độ dài và kiểu dữ liệu của 2 bên phải giống nhau.
Lệnh được thực thi sau khi tham số REQ=1, khi đang thực thi thì tham số BUSY = 1.
4.1.4. Ví dụ
* Đọc dữ liệu từ ngõ I1.2 của PLC có địa chỉ MPI = 3.
Dữ liệu sẽ được chứa trong chân RD (Q1.2).
* Ghi dữ liệu từ IB1 đến QB1 của PLC có địa chỉ MPI = 3.
Lệnh được thực thi sau khi tham số REQ = 1, khi đang thực thi thì tham số BUSY = 1.
Địa chỉ MPI của PLC muốn dữ liệu đến nhập tại tham số DEST_ID.
REQ_ID dùng để xác nhận là dữ liệu được gửi bởi lệnh nào. Ví dụ có 2 lệnh X_SEND cùng
thực thi (REQ_ID = 100 và REQ_ID = 101) với 2 dữ liệu gửi khác nhau thì bên lệnh X_RCV
sẽ dựa vào mã REQ_ID để biết là dữ liệu gửi của lệnh nào.
Dữ liệu gửi đi sẽ từ SD.
Ví dụ:
* Chương trình từ PLC (MPI = 2, gửi)
Có 2 vùng dữ liệu cần gửi đi là MB13 và MB12.
Ta muốn bên nhận nhận MB13 vào QB1 và MB12 vào QB0
và
* Chọn Network view để xem 2 PLC vừa tạo:
* Nhấn vào cổng Profibus của PLC (hoặc vào Properties PLC), nếu màu cam thì đang ở MPI,
nếu màu hồng thì đang ở Profibus (do PLC này chỉ có 1 cổng tích hợp MPI/Profibus)
Còn nếu PLC có 2 cổng riêng biệt thì cổng bên trái là MPI, bên phải là Profibus.
* General > MPI/Profibus address > Interface type: Chọn Profibus (đối với PLC cổng truyền
thonho riêng biệt thì không cần phải chọn, bởi phần mềm sẽ chia ra 2 phần MPI và Profibus
riêng biệt) > Add new subnet: Sẽ tự động tạo ra 1 subnet tên PROFIBUS_1 > Address: Chọn
2
* Trở lại Network view ta thấy có một subnet PROFIBUS_1 ta vừa tạo nối vào cổng
PROFIBUS của PLC1.
Trở lại Network, ta thấy 2 PLC đã kết nối mạng Profibus (tên subnet PROFIBUS_1).
* Sau khi khai báo xong: Ta download station của mỗi PLC xuống. Sau đó dùng cable nối 2
cổng Profibus lại với nhau.
Ta nhấn vào cổng MPI của PLC sau đó kéo và thả vào cổng MPI của HMI.
Phần mềm sẽ tự quy định địa chỉ MPI của 2 thiết bị. Ta có thể vào từng thiết bị để thay đổi
địa chỉ này theo ý muốn.
* Thay đổi địa chỉ MPI của PLC
* Ta cũng nhấn vào cổng MPI của PLC sau đó kéo và thả vào cổng MPI của HMI.
* Để kiểm tra số connection mà ta đã thiết lập, ta vào Network data (bảng bên phải).
Ta sẽ có thông tin: Local là HMI, Partner là PLC, Connection type là HMI connection.
Cụ thể hơn nữa ta xem bảng properties bên dưới.
Như vậy thiết lập connection để kết nối dữ liệu PLC/ HMI đã hoàn thành.
Khai báo HMI tags ta sẽ chọn Connection là HMI_Connection_1.
Ta nhấn vào cổng PROFIBUS của PLC sau đó kéo và thả vào cổng PROFIBUS của HMI.
Phần mềm sẽ tự quy định địa chỉ PROFIBUS của 2 thiết bị. Ta có thể vào từng thiết bị để
thay đổi địa chỉ này theo ý muốn.
* Thay đổi địa chỉ PROFIBUS của PLC (mode: DP Master)
* Ta cũng nhấn vào cổng PROFIBUS của PLC sau đó kéo và thả vào cổng PROFIBUS của
HMI.
* Để kiểm tra số connection mà ta đã thiết lập, ta vào Network data (bảng bên phải).
Ta nhấn vào cổng PN của PLC sau đó kéo và thả vào cổng PN của HMI.
Phần mềm sẽ tự quy định địa chỉ IP của 2 thiết bị. Ta có thể vào từng thiết bị để thay đổi địa
chỉ này theo ý muốn.
* Thay đổi địa chỉ IP của PLC
* Ta cũng nhấn vào cổng MPI của PLC sau đó kéo và thả vào cổng MPI của HMI.
* Để kiểm tra số connection mà ta đã thiết lập, ta vào Network data (bảng bên phải).
Ta sẽ có thông tin: Local là HMI, Partner là PLC, Connection type là HMI connection.
Cụ thể hơn nữa ta xem bảng properties bên dưới.
* Vào project thiết kế của HMI > Chọn Connection
Như vậy thiết lập connection để kết nối dữ liệu PLC/ HMI đã hoàn thành.
* Khai báo PLC S7-300 có cổng truyền thông Profinet và các module mở rộng DI/DO,
AI/AO (nếu có).
* Làm thêm một lần Drap & Drop như bước trên.
* Như vậy PLC Tags và HMI Tags sẽ kết nối qua một connection tên là HMI_Connection_1
* Mở OB1 của PLC lên và viết một đoạn chương trình:
Lưu ý một số trường hợp không kết nối được và cách khắc phục:
A- Phần mềm Tia Portal sẽ tự động thực hiện các giao thức để phù hợp với thiết bị đang kết
nối.
Ví dụ: Từ Tia Portal V13 trở lên thì khi sử dụng chuẩn PN để donwload cho PLC thì Tia
Portal sẽ tự động gán địa chỉ IP cho máy tính để thực hiện việc donwload. Vì vậy khi vừa
download PLC xong máy tính vẫn đang nhớ IP đó và việc kết nối với WinCC là OK.
Nên khi ta tắt đi hoặc làm mất IP mà Tia Portal vừa gán cho ta (vào Internet, reset máy tính,
...) thì kết nối có thể không được nữa vì IP động đã thay đổi 1 IP đã cho máy tính mà không
trùng lớp mạng mà ta khai báo (thông thường dùng 192.168.0.xx / 255.255.255.0).
** Cách khắc phục tốt nhất là đặt ngay địa chỉ IP tĩnh cho máy tính.
B- Trường hợp đã đổi địa chỉ IP tĩnh mà vẫn không kết nối được thì kiểm tra "Set PG/PC
Interface" bằng cách:
Mỗi máy tính sẽ có một card mạng khác nhau nên tên cũng sẽ thay đổi. Lưu ý chọn TCP
- Nhấn OK.
C- Trường hợp sau khi thực hiện 2 bước trên vẫn không kết nối được.
Đổi Access point thành "tên card mạng .TCP" hoặc "S7ONLINE".