4. Xõy dựng hệ SCADA trờn cơ sở bộ điều khiển đa năng
4.2. Giao thức truyền thụng
Cú hai giải phỏp đối với giao thức truyền thụng:
ự Giải phỏp1: Hoàn toàn dựa trờn cỏc giao thức theo chuẩn quốc tế mở. Trong trường hợp này chỉ cần dựng sẵn khụng phải xõy dựng giao thức
ự Giải phỏp2: Một phần dựa trờn cỏc giao thức theo chuẩn quốc tế mở. Trong trường hợp này phải tự xõy dựng giao thức tầng ứng dụng
Xột từng giải phỏp:
ỉ Sử dụng hoàn toàn giao thức theo chuẩn quốc tế mở
Đõy là giải phỏp tốt nhất. Trong trường hợp sử dụng giải phỏp này để xõy dựng hệ
SCADA người ta thường dựa trờn cơ sở một giao thức truyền thụng chuẩn như MODBUS, PROFIBUS, ... kết hợp với OPC Server để cú tớch hợp với hầu hết cỏc
phần mềm nền SCADA (như WinCC, Intouch, ....) hoặc chương trỡnh HMI tự phỏt triển (bằng VC, VB, .NET,...). Trong trường hợp của đề tài, tầng giao thức tầng dưới dựng TCP/IP do đú tầng giao thức trờn dựng MODBUS là hợp lý vỡ trờn thị trường
sẵn cú nhiều cỏc module và OPC Server hỗ trợ MODBUS/TCP/IP đồng thời giỏ
thành khụng quỏ cao. Truyền thụng giữa PC và bộ điều khiển trong trường hợp này được thể hiện như Hỡnh 65
Hỡnh 65 Truyền thụng giữa PC và bộ điều khiển dựng Modbus
PC-MASTER HMI (WinCC, Intouch, VB, VC, .NET,... + DataBase) OPC Server (Hỗ trợ MODBUS/TCP/IP) Ethernet Card UDC-SLAVE MODBUS/TCP/IP (Module mềm hoặc cứng) Ethernet Module UDC - DATABASE
Cấu trỳc này cú tớnh mở cao, khụng phải xõy dựng giao thức truyền thụng, tuy nhiờn
đũi hỏi phải mua OPC-Server và module MODBUS/TCP/IP cho bộ điều khiển (vỡ tự
xõy dựng mất nhiều cụng sức và khỏ phức tạp, cần cú thờm thời gian và kinh phớ).
ỉ Một phần dựa trờn cỏc giao thức theo chuẩn quốc tế mở
Giao thức mở sử dụng là TCP/IP ở tầng dưới. Giao thức tầng ứng dụng tự xõy dựng. Trờn bộ điều khiển cú một module Slave_Comm và trờn PC cú một module
Master_Comm (Hỡnh 66), hai module này thực hiện trao đổi dữ liệu theo giao thức tự xõy dựng. Phần mềm HMI phỏt triển dựa trờn cỏc ngụn ngữ lập trỡnh thụng dụng của Microsoft và cơ sở dữ liệu quan hệ chuẩn (SQL,Oracle,...). Ưu điểm của giải phỏp là cho phộp giảm giỏ thành hệ thống SCADA. Nhược điểm là tớnh mở khụng cao, tuy
nhiờn vẫn cú một số thành phần mang tớnh mở như giao thức tầng dưới, cơ sở dữ liệu, cụng cụ lập trỡnh thụng dụng.
Hỡnh 66 Truyền thụng giữa PC và bộ điều khiển dựng dựng giao thức tự xõy dựng
ỉ Lựa chọn giải phỏp truyền thụng
Trong khuụn khổ đề tài (giới hạn về thời gian, kinh phớ) nhúm thực hiện lựa chọn giải phỏp tự xõy dựng giao thức truyền thụng tầng ứng dụng. Mụ hỡnh truyền thụng là
master – slave (master là PC, slave là bộ điều khiển). Master nắm quyền kiểm soỏt
mạng, đưa ra cỏc yờu cầu, cũn slave chỉ nhận yờu cầu và trả lời. Ưu điểm của mụ hỡnh này là: thực hiện giao thức đơn giản, hiệu quả sử dụng đường truyền cao (master chỉ
yờu cầu cỏc thụng tin cần, khụng cú thụng tin thừa, master cú thể chỉnh lại lưu lượng truyền cho hợp lý). Nhược điểm: trong trường hợp slave là cỏc bộ điều khiển thỡ mụ
hỡnh chỉ phự hợp nếu liờn động điều khiển giữa cỏc slave là tương đối ớt (mỗi slave điều khiển cục bộ, tương đối độc lập một cụng đoạn trong dõy chuyền sản xuất). Mụ
PC-MASTER HMI
(VB, VC,
.NET, Web,... + DataBase)
Master_Comm Ethernet Card UDC-SLAVE Slave_Comm Ethernet Module UDC - DATABASE
ỉ Xõy dựng module truyền thụng Master_Comm trờn PC
Khi cỏc bộ điều khiển ớt liờn động thỡ hầu hết cỏc chức năng điều khiển đó được thực hiện tại bộ điều khiển nờn trờn PC chủ yếu thực hiện việc giỏm sỏt, cũn việc nạp cấu hỡnh ớt khi được thực hiện (thường chỉ thực hiện một lần trước khi lắp đặt). Nếu coi mỗi lần gửi và nhận trả lời xỏc nhận (acknowlege) là một phiờn giao dịch thỡ do lượng dữ liệu trao đổi trong mỗi phiờn tương đối ớt (lớn nhất theo giao thức tự xõy
dựng < 200 bytes) mà tốc độ đường truyền 10Mbps nờn thời gian thực hiện mỗi phiờn hầu như khụng đỏng kể. Tuy vậy nếu master và cỏc slave liờn tục trao đổi dữ liệu thỡ
vẫn cú thể xảy ra “ngẽn” đường truyền. Mặt khỏc cú nhận xột rằng khụng phải tất cả
cỏc số liệu từ bộ điều khiển phải truyền về PC quỏ nhanh. Trong thực tế, yờu cầu
giỏm sỏt trờn PC chỉ cần một chu kỳ cập nhật (refresh) số liệu hiển thị cỡ xấp xỉ 1s là
đủ (nhanh quỏ cũng vụ nghĩa vỡ mắt khụng theo dừi kịp) và hơn nữa nhiều đại lượng
vật lý trong thực tế khụng biến đổi quỏ nhanh vớ dụ như cỏc thụng số mụi trường.
Ngoài ra, vỡ chỉ cú một đường truyền vật lý duy nhất mà lại cú nhiều phiờn giao dịch cựng muốn thực hiện nờn phải “xếp hàng”. Nếu giao thức thực hiện theo kiểu “quột” tuần tự cỏc slave, thực hiện hết phiờn này rồi mới tới phiờn khỏc thỡ sẽ làm tăng thời gian chờ đợi trung bỡnh của cỏc phiờn. Để giải quyết vấn đề này chỳng tụi đó tham
khảo cơ chế hoạt động đa luồng của hệ điều hành: thực hiện cỏc tiến trỡnh theo cỏc lỏt cắt thời gian (time slice). Một vấn đề khỏc cần lưu ý nữa là cho dự thực hiện đa luồng nhưng trong mỗi luồng vẫn phải chờ xỏc nhận trả lời để kết thỳc một phiờn giao dịch. Nếu việc chờ dữ liệu trả về thực hiện bằng cỏch liờn tục kiểm tra dữ liệu trả về thỡ module truyền thụng trờn master sẽ làm tốn tài nguyờn CPU của PC master. Túm lại
để tăng hiệu quả sử dụng đường truyền từ đú nõng cao chất lượng giỏm sỏt, điều
khiển của phần mềm SCADA, người xõy dựng module truyền thụng trờn PC cần giải quyết 03 vấn đề là:
ự Chống “ngẽn” đường truyền.
ự Giảm thời gian chờ đợi trung bỡnh giữa cỏc phiờn giao dịch. ự Giảm tiờu tốn tài nguyờn CPU của PC
Nhúm thực hiện đề tài đó ỏp dụng 03 giải phỏp tương ứng cho mỗi vấn đề:
ự Nghỉ giữa cỏc phiờn giao dịch: giữa cỏc phiờn cú khoảng thời gian nghỉ nhất
định, thời gian này cú thể chỉnh lại (bằng thủ cụng hoặc tự động) sau khi thử
nghiệm thực tế và căn cứ trờn dung lượng truyền, thời gian thực hiện mỗi phiờn giao dịch, số lượng nodes trờn mạng và tốc độ mạng (thời gian này ước
tớnh cỡ 100ms vỡ để liờn tục hiển thị tất cả cỏc IO của bộ điều khiển và một số trạng thỏi thiết bị, bỏo động cần 03 phiờn giao dịch ), trừ cỏc yờu cầu đũi hỏi đỏp ứng ngay thỡ cho thực hiện luụn (theo cơ chế synchronous).
ự Sử dụng cơ chế xử lý đa luồng (multi-threding) hoặc đa tiến trỡnh (multi-
process): mỗi luồng như một kờnh truyền thụng ảo ứng với mỗi bộ điều khiển.
Dựng phương phỏp lập trỡnh đa luồng dựa trờn mụi trường phỏt triển .NET và
cụng cụ WinSock. Chỉ cần tạo một cổng (port) nhưng dựng chung cho nhiều luồng.
ự Sử dụng phương thức truyền khụng đồng bộ (asynchronous) của WinSock (hệ
điều hành tự phỏt sinh ra event khi cú dữ liệu về PC, khi cú event thỡ mới xử lý
dữ liệu, khi chưa cú event thỡ thực hiện “việc khỏc”). Tất nhiờn việc truyền thụng khụng đồng bộ sẽ gõy xung đột trờn đường truyền nhưng đó được cỏc
giao thức trờn nền Ethernet xử lý , hơn nữa cơ chế nghỉ ở mỗi luồng sẽ làm
giảm xung đột vỡ làm giảm lưu lượng tổng trờn đường truyền. Khi dựng
phương thức khụng đồng bộ thỡ cỏc gúi dữ liệu trả về khụng theo thứ tự thời
gian theo cỏc yờu cầu tương ứng (vớ dụ: yờu cầu 1 của slave 1 trước yờu cầu 1 của slave 2 nhưng dữ liệu trả lời của salve 2 cú thể về trước salve 1) nờn phải cú cỏch phõn biệt cỏc gúi dữ liệu. Cỏc gúi tin gửi từ slave về master đó được
socket tự gắn địa chỉ IP, do vậy chỉ cần tỏch lấy địa chỉ IP sẽ xỏc định được dữ liệu từ slave nào gửi đến.
Hỡnh 67 Minh hoạ truyền thụng dựng kờnh ảo
ỉ Xõy dựng giao thức truyền thụng
Giao thức xõy dựng là giao thức hướng ký tự (vỡ đơn giản) trờn nền TCP/IP. Lỗi
truyền thụng và xử lý lỗi do cỏc tầng dưới đảm nhiệm nờn tầng ứng dụng chỉ xử lý
cỏc lỗi đơn giản như khụng thấy trả lời đỳng (sai định dạng frame, sai quy ước dữ liệu trả về theo từng phiờn -hàm truyền thụng FID) thỡ master sẽ yờu cầu truyền lại, quỏ time-out thỡ bỏo mất truyền thụng hoặc lỗi slave.
Cấu trỳc data-frame <FIDxx|PAR1|PAR2|PAR3|...|PARn> Trong đú : “<” : ký tự bắt đầu frame “>” : ký tự kết thỳc frame ... ... MASTER KấNH ẢO 1
SLAVE-1 SLAVE-I SLAVE-N KấNH ẢO
2
KấNH ẢO N
“xx”: là số hiệu FID (1,2,3..)
“PAR1”, “PAR2”, “PARn”...là cỏc tham số cho cỏc phiờn giao dịch “|”: là ký tự phõn cỏch giữa cỏc giỏ trị toàn vẹn.
Quy định chung cỏch thể hiện cỏc kiểu dữ liệu
Kiểu dữ liệu Ký tự thể hiện Ghi chỳ Vớ dụ
Real “XX.XXX” Tối đa 03 số sau dấu “.” 3.754
Bit “1” hoặc “0” 1
Invalid value ? Dữ liệu khụng cú hoặc khụng hợp lệ ?
Bảng 9 Quy định thể hiện cỏc kiểu dữ liệu
Cỏc hàm truyền thụng (phiờn giao dịch) được quy định như trong Bảng 10
PC_OUT/ CONTROLLER_IN PC_IN/ CONTROLLER_OUT
READ FUNCTIONS
<FID1>
Yờu cầu đọc giỏ trị tất cả cỏc IO của bộ điều khiển lờn PC: 4AI, 2AQ, 8DI, 8DQ
<FID1|AI_1|AI_2|AI_3|AI_4|AQ_1|AQ_2| DI_1|DI_2|DI_3|DI_4|DI_5|DI_6|DI_7|DI_8| DQ1|DQ_2|DQ_3|DQ_4|DQ_5|DQ_6|DQ_7|DQ_8> Ghi chỳ: AI_i (i=1-4) là số thực, giỏ trị của sensor. Nếu khụng cú sensor thỡ gửi ký tự “?”.
Ghi chỳ: AQ_i (i=1-2) là số thực, giỏ trị 0-20mA. Vớ dụ: <FID1|12.2|3.47|18.973|1.5|4.34|19.875| 0|1|0|0|1|0|1|0|1|0|0|0|1|0|1|1>
<FID2>
Yờu cầu đọc tất cả cỏc bit bỏo động và cỏc ngưỡng bỏo
động của cỏc AI lờn PC <FID2|AI_1_L|AI_1_H|AI_2_L|AI_2_H| AI_3_L|AI_3_H|AI_4_L|AI_4_H| AI_1_L_LMN|AI_1_H_LMN| AI_2_L_LMN|AI_2_H_LMN| AI_3_L_LMN|AI_3_H_LMN |AI_4_L_LMN|AI_4_H_LMN>
Ghi chỳ: AI_i_L (i=1-4) là bit bỏo động vượt ngưỡng dưới
AI_i_H (i=1-4) là bit bỏo động vượt ngưỡng cao AI_i_L_LMN (i=1-4) là số thực, giỏ trị ngưỡng thấp AI_i_H_LMN (i=1-4) là số thực, giỏ trị ngưỡng cao Vớ dụ:
<FID2|1|0|0|1|1|0|0|0|4.56|9.59|1.2| 10.4|40.657|67.45|230.454|576.2> <FID3>
Yờu cầu đọc tất cả cỏc tham số P,I,D,SP của 4 bộ PID lờn PC
<FID3|P1|I1|D1|SP1|P2|I2|D2|SP2| P3|I3|D3|SP3|P4|I4|D4|SP4> Ghi chỳ: mọi giỏ trị là số thực Vớ dụ:
<FID3|0.6|1.2|0.2|7.2|6.9|3.23|0.3|9.3| 1.4|8.32|1.4|20.4|5.1|9.5|5.8|10.0>
<FID4> Reserved
<FID5> Reserved
WRITE FUNCTIONS
<FID6|DQ1|DQ_2|DQ_3|DQ_4|DQ_5|DQ_6|DQ_7|DQ_8> Yờu cầu ghi ra cỏc DQ của bộ điều khiển (để tắt bật cỏc cơ cấu chấp hành) Vớ dụ: <FID6|0|1|0|0|1|0|1|0> <FID6> <FID7| Filter_Limit_Frequency1| Filter_Limit_Frequency2| Filter_Limit_Frequency3| Filter_Limit_Frequency4>
Ghi tần số giới hạn lọc tớn hiệu đầu vào Ghi chỳ: mọi giỏ trị là số thực
<FID7> <FID8| High_Scaling_In_Limit1| Low_Scaling_In_Limit1| High_Scaling_In_Limit2| Low_Scaling_In_Limit2| High_Scaling_In_Limit3| Low_Scaling_In_Limit3| High_Scaling_In_Limit4| Low_Scaling_In_Limit4>
Ghi giới hạn chuyển đổi tớn hiệu đầu vào Ghi chỳ: mọi giỏ trị là số thực
<FID8> <FID9| Setpoint_Value1| Setpoint_Value2| Setpoint_Value3| Setpoint_Value4> Ghi cỏc setpoint
Ghi chỳ: mọi giỏ trị là số thực
<FID9> <FID10| High_Setpoint_Limit1| Low_Setpoint_Limit1| High_Setpoint_Limit2| Low_Setpoint_Limit2| High_Setpoint_Limit3| Low_Setpoint_Limit3| High_Setpoint_Limit4| Low_Setpoint_Limit4>
Ghi giỏ trị giới hạn giỏ trị chủ đạo Ghi chỳ: mọi giỏ trị là số thực
<FID10> <FID11| Kp_PID1| Ti_PID1| Td_PID1| Dead_Zone1| Kp_PID2| Ti_PID2| <FID11>
Kp_PID3| Ti_PID3| Td_PID3| Dead_Zone3| Kp_PID4| =Ti_PID4| Td_PID4| Dead_Zone4>
Ghi giỏ trị cỏc tham số cho cỏc khõu điều khiển Ghi chỳ: mọi giỏ trị là số thực
<FID12| High_Control_Par1| Low_Control_Par1| High_Control_Par2| Low_Control_Par2| High_Control_Par3| Low_Control_Par3| High_Control_Par4| Low_Control_Par4>
Ghi giỏ trị giới hạn tớn hiệu điều khiển Ghi chỳ: mọi giỏ trị là số thực
<FID12> <FID13| High_Threshold_Warning_AI1| Low_Threshold_Warning_AI1| High_Threshold_Warning_AI2| Low_Threshold_Warning_AI2| High_Threshold_Warning_AI3| Low_Threshold_Warning_AI3| High_Threshold_Warning_AI4| Low_Threshold_Warning_AI4> Ghi tham số ngưỡng cảnh bỏo Ghi chỳ: mọi giỏ trị là số thực
<FID13> <FID14| High_Threshold_Alarm_AI1| Low_Threshold_Alarm_AI1| High_Threshold_Alarm_AI2| Low_Threshold_Alarm_AI2| High_Threshold_Alarm_AI3| Low_Threshold_Alarm_AI3| High_Threshold_Alarm_AI4| Low_Threshold_Alarm_AI4> Ghi tham số ngưỡng bỏo động Ghi chỳ: mọi giỏ trị là số thực
<FID14>
<FID15|S1|S2|S3|S4|S5|S6|S7|S8|S9|S10|S11|S12|S13|S14| S15|S16|S17|S18|S19|S20|S21|S22|S23|S24|S25|S26|S27| S28|S29|S30|S31|S32>
Ghi cỏc switch cấu trỳc bộ điều khiển Ghi chỳ: mọi giỏ trị là số nguyờn 1 byte
<FID15> <FID16| Warn_AI1_Enable| Warn_AI2_Enable| Warn_AI3_Enable| Warn_AI4_Enable| Alarm_AI1_Enable| Alarm_AI2_Enable| Alarm_AI3_Enable| Alarm_AI4_Enable| Warn_Alarm_AO1_Enable| Warn_Alarm_AO2_Enable| <FID16>
Warn_Alarm_PWM1_Enable| Warn_Alarm_PWM2_Enable| Warn_Alarm_PWM3_Enable| Warn_Alarm_3Position_Enable| Warn_Alarm_DI02_Enable| Warn_Alarm_DI03_Enable| Warn_Alarm_DI04_Enable| Warn_Alarm_DI05_Enable| Warn_Alarm_DI06_Enable| Warn_Alarm_DI07_Enable| Warn_Alarm_DO02_Enable| Warn_Alarm_DO03_Enable| Warn_Alarm_DO04_Enable| Warn_Alarm_DO05_Enable| Warn_Alarm_DO06_Enable| Warn_Alarm_DO07_Enable>
Ghi cỏc bit Cho phộp cảnh bỏo bỏo động Ghi chỳ: mọi giỏ trị kiểu boolean
Bảng 10 Cỏc hàm truyền thụng
ỉ Hoạt động của module truyền thụng Master_Comm
Hỡnh 68 thể hiện một vớ dụ module truyền thụng Master_Comm thực hiện truyền thụng theo 03 luồng. Cỏc FID1, FID2, FID3 thường xuyờn được thực hiện để phục vụ việc giỏm sỏt liờn tục cỏc thụng số của hệ thống tự động hoỏ trờn mỏy PC, giữa cỏc FID này cú khoảng trống (nghỉ), thời gian nghỉ cú thể khụng cố định mà tuỳ thuộc
vào số FID thường xuyờn được thực hiện trong cỏc chu kỳ cập nhật dữ liệu , số nodes trờn mạng và tốc độ mạng. Thời gian này cú thể cấu hỡnh lại hoặc tự động tớnh trong
chương trỡnh sao cho thời gian cập nhật cỏc thụng số phục vụ giỏm sỏt, điều khiển là hợp lý (khụng nờn quỏ 1s). Khi thực hiện tớnh toỏn thời gian nghỉ giữa cỏc phiờn cần tớnh tổng thời gian để thực hiện hết một chu kỳ cập nhật liờn tục cỏc số liệu cần giỏm sỏt (vớ dụ cần thực hiện 03 FID trong một chu kỳ), lấy giới hạn là 1s chẳng hạn, sau
đú tuỳ thuộc vào thời gian thực hiện mỗi FID thỡ phõn bổ thời gian nghỉ cho hợp lý
(cỏch chia là theo % của tổng thời gian cập nhật yờu cầu, vớ dụ 1 chu kỳ thực hiện cập nhật là 1s=100%, trong đú FID1 chiếm 10%, FID2 chiếm 20% , FID3 chiếm 10%,
nghỉ 03 lần sau mỗi phiờn FID, mỗi lần = (100%-10%-20%-10%)/3=20%) . Khi cú cỏc yờu cầu thực hiện tức thời như nạp cấu hỡnh, điều khiển tắt/bật ngay cỏc đối tượng chấp hành như bơm, quạt, valve,... thỡ thực hiện ngay cỏc FIDxx mà khụng chờ nghỉ sau phiờn giao dịch trước đú. Ngoài ra nhỡn biểu đồ thời gian cú thể thấy mụ hỡnh
master-slave rất hiệu quả ở chỗ: nếu tại LUỒNG 3 master chỉ cần thực hiện FID1
thường xuyờn mà chưa cần đến cỏc FID khỏc thỡ thời gian nghỉ sẽ nhiều hơn sao cho tổng thời gian nghỉ và thực hiện FID1 khụng quỏ 1s là được, như vậy vẫn bảo đảm
chất lượng giỏm sỏt (thời gian cập nhật dữ liệu hiển thị khụng quỏ 1s) đồng thời giảm “ngẽn” đường truyền. Cú nhận xột: cựng một FID nhưng thời gian thực hiện cỏc
phiờn giao dịch là khỏc nhau vỡ thời gian một phiờn = thời gian truyền trờn mạng + thời gian xử lý dữ liệu trờn PC + thời gian xử lý dữ liệu trờn bộ điều khiển mà mỗi
Hỡnh 68 Biểu đồ thời gian thực hiện truyền thụng