[1] AL JAZEERA (2021). Mapping the world’s oil and gas pipelines, https://www.aljazeera.com/news/202 1/12/16/mapping-world-oil-gas-pipelines- interactive.
[2] Công thông tin điện tử thành phố Đà Nẵng (2020). Hệ zhống cấp nước TP.Đà
Nang, https://www.danang.gov.vn/web/guest/gioi-thieu/chi-tiet?1d=38662& c=39, [3] Công ty TNHH Dịch vụ Kỹ thuật Hưng Thịnh (2022). Cách phát hiện rò ri nước băng máy đò ông nước âm tường, https://goitho247.com/cach-phat-hien-ro-ri-nuoc- bang-may-do-ong-nuoc-am-tuong/.
[4] Sina Razvarz, Raheleh Jafari, Alexander Gegov (2020). Flow Modelling and Control in Pipeline Systems A Formal Systematic Approach, NXB Springer, Ebook.
[5] WIKA Alexander Wiegand SE & Co. KG (2017). WIKA PSD-4 BER AFPRIB EI BH, Hướng dẫn sử dụng sản phẩm.
[6] SAGINOMIYA SEISAKSHO, INC (2022). VORTEX FLOW METER OLK, WLK, Hướng dẫn sử dụng sản phẩm.
[7] Arduino (2022). Arduino Uno R3,
https://docs.arduino.cc/static/dc92 fof5b6fd0d38636e78e83e25afc0/A000066- datasheet. pdf.
[8] Arduino (2022). Arduino MEGA 2560 Rev3,
https://docs.arduino.cc/static/270 1 3e8da47 1ae201cc96608 1 5e3e0 1c/A000067- datasheet. pdf.
[9] Chengdu Ashining Technology Co., Ltd (2022). Specification-of-AS32-1TL-100, http://m.asnwireless.com/uploads/20 1922 129/Specification-of-AS32-TTL-100.pdf.
[10] Semtech (2022). What Is LoRa?, https:/(www.semtech.com/lora/what-is-lora.
[11] Modbus-IDA (2006). MODBUS APPLICATION PROTOCOL SPECIFICATION,
https://www.modbus.org/docs/Modbus_ Application Protocol V1_1b.pdf
[12] Gildas Besancon, Didier Georges, Ofelia Begovich, Cristina Verde, and Carlos Aldana (2007). Direct observer design for leak detection and estimation in pipelines, H6i nghi Dieu khién Chau Au 2007, Hy Lap.
[13] TS. Pham Thanh Phong, TS V6 Anh Tuan, ThS. Pham Duy Duong (2021). Gido trình kỹ thuật điều khiên nâng cao, Nhà xuat ban thông tin và truyện thông, Hà Nội.
Sinh viên thực hiện: Nguyễn Văn Khương Người hướng đẫn: TS. Phạm Thanh Phong Mai Hoàng Quý Thông
hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV
PHỤ LỤC
Phu luc I
Chương trình Arduino no của khối thu thập đữ liệu và điều khiển bơm đầu đường ống include <SoftwareSerial.h>
#define TX 3
#define RX 2
#define MO 13
#define M1 12
#define PMP 9
#define ON 7
#define OFF 8
SoftwareSerial mySerial(TX, RX);
1nt n1,n2,n3,n4,n11,n33;
bool check;
char cl,c2,c3;
void setup() { Serial.begin(9600);
mySerial.begin(9600);
pinMode(MO0, OTPT);
pinMode(M1, OTPT);
pinMode(PMP, OTPT);
pinMode(ON, INPT);
pinMode(OFE, INPT);
digital Write(PMP, LOW);
digital Write(M0, LOW);
digitalWrite(M1, LOW);
check=false;
}
void loopQ) {
1f(digitalRead(ON)==0){
delay(50);
1f(digitalRead(ON)==0){
Phụ lục
Nghiên cứu thiết kế và chấn đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV digital Write(PMP,255);
} }
if(digitalRead(OFF)——0){
delay(50);
if(digitalRead(OFF)——0){
digitalWrite(PMP,0);
} }
if (mySerial.available() > 0) { cl =mySerial.read();
Serial.pnntln(cl);
if (¢l=='s') {
Serial.printin("Da nhan s");
if (mySerial .available() > 0) c2 =mySerial.read();
Serial.pnntln(c2);
if (c2==":') {
Serial.println("Da nhan :");
if (mySerial.available() > 0) c3 = mySerial.read();
SerialL.print(c3);
If(c3—'1') {
Serial.prntln("Dang gui");
int a00=analogRead(A0);
int al0=analogRead(A1);
int a01=analogRead(A0);
int al l=analogRead(A1);
1f (check==true){
nl=((a00+a01+n11)/4)/100;
n2=((a00+a01+n11)/4)%100;
n3=((a10+al1+n333/⁄4)/100;
n4=((a10+al1+n333/4)%100;
yelse{
nl=((a00+a01)/2/ 100;
Phu luc
hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV
n2=((a00+a01)/2)%100;
n3=((al0+al1)/2/100;
n4=((al0+al1)/2)%100;
}
byte buf[8]={1,n1,n2,2,n3,n4,3,digitalRead(PMP)};
mySerial.write(buf,8);
check=false;
}
1f(c3—2)) {
int a00=analogRead(A0);
delay(10);
int al0=analogRead(A1);
delay(10);
int a01=analogRead(A0);
delay(10);
int al l=analogRead(A1);
delay(50);
nl 1=a00+a01;
n33=al0+all;
check=true;
}
if (c3—='3') {
Serial printin("Dang bat bom");
digital Write(PMP,255);
}
1f(c3—4) {
Serial.prntln("Dang tat bom”);
digital Write(PMP,0);
}
Phụ lục
Nghiên cứu thiết kế và chân đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV Phụ lục H
Chương trình Arduimo no của khối thu thập dữ liệu cuối đường ống
#include <SoftwareSerial.h>
#define TX 3
#define RX 2
#define MO 13
#define M1 12
SoftwareSerial mySerial(TX, RX);
1nt n1,n2,n3,n4,n11,n33;
bool check;
char cl,c2,c3;
void setup() { Serial.begin(9600);
mySerial.begin(9600);
pinMode(MO0, OTPT);
pinMode(M1, OTPT);
digital Write(M0, LOW);
digital Write(M1, LOW);
check=false;
}
void loopQ) {
if (mySerial.available() > 0) { cl =mySerial.read();
Serial.println(c1);
If(cl==%S) {
Serial.printin("Da nhan s");
if (mySerial .available() > 0) c2 =mySerial.read();
if (c2=—":') {
Serial.println("Da nhan :");
if (mySerial.available() > 0) c3 = mySerial.read();
SerialL.print(c3);
1f(c3—2)) {
Serial.prntln("Dang gui");
Phụ lục
Nghiên cứu thiết kế và chân đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV int a00=analogRead(A0);
int al0=analogRead(A1);
int a01=analogRead(A0);
int al l=analogRead(A1);
1f (check==true){
n1=((a00+a01+n11)⁄4)/100;
n2=((a00+a01+n11)⁄4)%100;
n3=((al0+al 1+n33)/4)/100;
n4=((al0+al 1+n33)/4)%100;
yelse{
nl=((a00+a01)/2/ 100;
n2=((a00+a01)/2)%100;
n3=((al0+al1)/2/100;
n4=((al0+al1)/2)%100;
}
byte buf[8]={2,n1,n2,3,n3,n4,4,0};
mySerial.write(buf,8);
check=false;
}
1f(c3—T) {
Serial.println("Dang doc”);
int a00=analogRead(A0);
delay(10);
int al0=analogRead(A1);
delay(10);
int a01=analogRead(A0);
delay(10);
int al l=analogRead(A1);
delay(50);
nl 1=a00+a01;
n33=al0+all;
check=true;
Phụ lục
Nghiên cứu thiết kế và chấn đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV
} }
Phu luce II
Chương trình Arduino no của khối truyền thông
#include <SoftwareSerial.h>
#include <ModbusRtu.h>
uintl6_t aulédata[14];
Modbus slave(1,Serial,2);
#define TX 6
#define RX 5
#define ON 9
#define OFF 10 union {
float fval;
uintl6_t uval[2];
} floatAsint;
SoftwareSerial mySerial(TX, RX);
void setup() {
Serial.begin(9600,SERIAL 8E1);
pinMode(11,INPT);
pinMode(ON,INPT);
pinMode(OFF,INPT);
pinMode(12,OTPT);
pinMode(13,OTPT);
digital Write(12,LOW);
digital Write(13,LOW);
mySerial.begin(9600);
slave.start();
}
void loopQ) {
slave.poll( aul é6data, 14 );
if (mySerial.available() > 0) { char st = mySerial.readQ);
if (st =='d'){
String name = mySerial.readStringntil(‘\n’);
Phu luc
Nghiên cứu thiết kế và chân đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV 1f (name.toFloatQ==1)
t
String dataql = mySerial.readStringntil(‘\n’‘);
floatAsint.fval = dataq1.toFloat();
aul6data[2] = floatAsint.uval[0];
aul 6data[3] = floatAsint .uval[1];
String datahl = mySerial.readStringntil(‘\n’‘);
floatAsint.fval = datah1.toFloat();
aul 6data[4] = floatAsint.uval[0];
aul 6data[5] = floatAsint .uval[1];
} else
if (name.toFloat()==2) t
String dataq2 = mySerial.readStringntil(\n’‘);
floatAsint.fval = dataq2.toFloat();
aul 6data[6] = floatAsint.uval[0];
aul 6data[7] = floatAsint .uval[1];
String datah2 = mySerial.readStringntil(\n’‘);
floatAsint.fval = datah2.toFloat();
aul6data[8] = floatAsint.uval[0];
aul6data[9] = floatAsint .uval[1];
}else
if (name.toFloat()==3) t
String datalp = mySerial.readStringntil(‘\n');
floatAsint.fval = datalp.toFloat();
aul6data[ 10] = floatAsint.uval[0];
aul6data[1 1] = floatAsint .uval[ 1];
String datals = mySerial.readStringntil(‘\n');
floatAsint.fval = datals.toFloat();
aul6data[ 12] = floatAsint.uval[0];
aul6data[13] = floatAsint .uval[ 1];
} }
Phụ lục
Nghiên cứu thiết kế và chấn đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV
}
bitWnite( aul 6data[1], 0, digitalRead( 11 ));
if (bitRead( au16data[0], 0 }==1||digitalRead(ON)==0)
t
digital Write( 12,HIGH);
delay(400);
digital Write( 12, LOW);
bitWrite( aul 6data[0], 0, 0);
}
if (bitRead( au16data[0], 1 }==1||digitalRead(OFF)==0)
t
digital Write( 13,HIGH);
delay(400);
digital Write( 13, LOW);
bitWrite( aul 6data[0], 1, 0);
} }
Phụ lục IV
Ham VB Scripts trong WinCC - Ham CurrentTime
Sub CurrentTime()
SmartTags("chartDatel")=Now() SmartTags("chartDate2")=Now() End Sub
- Ham DataLogger
Sub DataLogger(ByRef DB_NAME) Dim conn, rst, SQL_ Table On Error Resume Next
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB. Recordset")
conn.Open "Provider=MSDASQL Initial Catalog=" & SmartTags("szDatabase") &
"DSN="&DB_NAME&""
If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description Err.Clear
Phu luc
hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV Set conn = Nothing
Exit Sub End If
SQL Table = "Insert Into
pipeline(flowRateSt,pressureSt,flowRateSp, pressureSp,leakPosition,leakSize, pumpStatus) VALES (" & SmartTags("flowRateSt") & ","& SmartTags("pressureSt") & ","&
SmartTags("flowRateSp") & ","& SmartTags("pressureSp") & "," &
SmartTags("leakPosition") & ","& SmartTags("leakSize") & ","& SmartTags("statusPump")
& mịn
Set rst = conn.Execute(SQL_ Table) conn.close
Set rst = Nothing Set conn = Nothing End Sub
- Ham ReportCSV
Sub ReportCS V(ByRef DB_NAME)
Dim conn, rst, SQL_ Table, dTimel, dTime2, objFSO, outFile,objFile On Error Resume Next
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB. Recordset")
conn.Open "Provider=MSDASQL Initial Catalog=" & SmartTags("szDatabase") &
"DSN="&DB_NAME&""
If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description Err.Clear
Set conn = Nothing Exit Sub End If
Set dTimel = SmartTags("chartDate1") Set dTime2 = SmartTags("chartDate2")
SQL_ Table = "SELECT * FROM pipeline WHERE createdTime >=
"&Y ear(dTime! )&"-"&Month(dTimel )&"-"&Day(dTime1)&"
"&Hour(dTimel )&":"&Minute(dTimel )&":"&Second(dTimel)&"' AND createdTime <=
"&Y ear(dTime2)&"-"&Month(dTime?2 )&"-"& Day(dTime2)&"
"&Hour(dTime2)&":"&Minute(dTime2 )&":"&Second(dTime2)&" AND leakPosition > 0 "
SmartTags("str")=SQL_ Table Set rst = conn.Execute(SQL_ Table)
Set objFSO=CreateObject("Scripting.FileSystemObject")
Phu luc
Nghiên cứu thiết kế và chấn đoán vị trí rò rỉ của mô hình hệ thông đường ống dẫn nước thật: áp dụng thuật toán ước lượng bên vững LPV outFile="D:\excelLEAK "&Day(đ11ime1)&"-"&Month(đT11imel)&"-"&Y ear(dIimel)&"
"&Hour(dTimel )&"H"&Minute(dTimel)&"M" &Second(dTime1)&" to
"& Day(dTime2)&"-"&Month(dTime2)&"-"& Y ear(dTime2)&"
"&Hour(dTime2)&"H"&Minute(dTime2)&"M" &Second(dTime2)&" csv"
Set objFile = objFSO.CreateTextFile(outFile,Tme)
‘objFile. Write "Thoi gian,Luu luong dau,Ap suat dau,Luu luong cudi,Ap suất cuối, Vị trí rò ri,Kich thudc ro ri, Trang thai bom" & vbCrLf
objFile. Write "Time,Flow Rate 1, Pressure 1, Flow Rate 2, Pressure 2, Leak Position, Leak Size, Pump" & vbCrLf
Do While Not (rst. BOF Or rst.EOF) objFile. Write
rst.Fields(0). Value&",""&rst.Fields(1). Value&","&rst.Fields(2). Value&","&rst.Fields(3). Valu e&","&rst.Fields(4). Value&","&rst.Fields(5). Value&"," &rst.Fields(6). Value&","&rst.Fields(
7). Value & vbCrLf rst. MoveNext Loop
objFile.Close Set objFSO = Nothing conn.close
Set rst = Nothing Set conn = Nothing End Sub
- Ham ReportLeakCSV
Sub ReportLeakCS V(ByRef DB_NAME)
Dim conn, rst, SQL_ Table, dTimel, dTime2, objFSO, outFile,objFile On Error Resume Next
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB. Recordset")
conn.Open "Provider=MSDASQL Initial Catalog=" & SmartTags("szDatabase") &
"DSN="&DB_NAME&""
If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & Err.Number & " " & Err.Description Err.Clear
Set conn = Nothing Exit Sub End If
Set dTimel = SmartTags("chartDate1")
Phu luc