- Phương thức truyền – nhận dữ liệu được thực hiện như mô hình truyền nhận phía trên: các dữ liệu về môi trường sẽ được thu từ các nút cảm biến bao gồm các thông tin về gia tốc, nhiệt độ, độ ẩm, năng lượng, lượng mưa và thời gian mưa. Các dữ liệu được căn chỉnh và tiền xử lý sau đó sẽ được đóng gói, truyền về proble gateway thông qua giao thức ZigBee, thiết bị ZigBee được sử dụng vì có tính năng truyền dữ liệu ở những khoảng cách xa bằng cách truyền dữ liệu thông qua một mạng lưới các thiết bị trung gian, tiêu tốn điện năng và công suất thấp; các dữ liệu này được xử lý bởi Data Logger (chuyển đổi ADC, DAC, các thuật toán…). Để thuận tiện trong việc theo dõi, giám sát thì từ Data Logger các dữ liệu sẽ được đẩy lên internet và được lưu trữ trong Mysql trên Database server theo các ngăn ứng với trường dữ liệu khác nhau. Từ đây, dữ liệu sẽ được khai thác thông qua web service và qua các ứng dụng trên smartphone bởi các giao thức API để phục vụ cho việc đưa ra những cảnh báo kịp thời đối với nguy cơ sạt lở đất.
KẾT LUẬN
Luận văn đã trình bày việc phát triển các nút cảm biến có thể được sử dụng cho ứng dụng giám sát hiện tượng trượt lở đất. Trong các nút cảm biến đã được tích hợp các loại cảm biến (nhiệt độ, độ ẩm, gia tốc), bộ vi xử lý và hệ thống truyền thông để thu thập và xử lý dữ liệu. Trong khi thu thập dữ liệu các thông số của các nút cảm biến đã được tính toán và cân chỉnh để khi hoạt động có thể tránh tối đa sự ảnh hưởng của các yếu tố bên ngoài có thể làm ảnh hưởng đến quá trình hoạt động.
Trong luận văn này, tôi đã làm các thử nghiệm trong hai trường hợp là ở trong phòng và ngoài trời. Kết quả của quá trình thực nghiệm và quy trình thực tiễn cả khi thí nghiệm trong nhà và ngoài trời đều tương tự. Tỷ lệ truyền – nhận gói dữ liệu trong mô phỏng và thực tế là 100% là đảm bảo độ tin cậy. Các dữ liệu thu được từ các thí nghiệm sẽ được đối chiếu với các thông số ở điều kiện bình thường trong thực tế để có thể đưa ra những cảnh báo thích hợp. Thông tin thời gian thực của mạng cảm biến sẽ được tự động cập nhật liên tục tại website của nhóm nghiên cứu http://uetlandslide.com/.
Tôi cũng đề xuất một phương pháp để tiết kiệm năng lượng tiêu thụ. Mỗi 10 phút, quy trình đọc và chuyển giao dữ liệu sẽ được diễn ra trong 3 giây, khi quá trình kết thúc các nút cảm biến sẽ đặt ở chế độ nghỉ và chuẩn bị cho lần đọc, truyền nhận dữ liệu tiếp theo. Bằng cách này, thời gian hoạt động của nút cảm biến có thể kéo dài lâu hơn.
Trong tương lai, hệ thống sẽ thay đổi cấu trúc liên kết của hệ thống theo dạng hình cây và so sánh kết quả đạt được với cấu trúc hình sao. Từ kết quả này, hệ thống có thể thay đổi linh hoạt giữa cấu trúc cây và cấu trúc sao để tiết kiệm năng lượng của pin sử dụng cho các cụm cảm biến.
TÀI LIỆU THAM KHẢO
1. A., Berti, M., Bicocchi, N., Castelli, G., Corsini, A., Mamei, M., & Zambonelli, F. (2011). Landslide monitoring with sensor networks: experiences and lessons learnt from a real-world deployment. International Journal of Sensor Networks, 10(3), 111-122.
2. Ramesh, M. V., & Vasudevan, N. (2012). The deployment of deep-earth sensor probes for landslide detection. Landslides, 9(4), 457-474.
3. Texas Intrusment, 2013, LM35 Precision Centigrade Temperature Sensors www.ti.com
4. Datasheet Dir, Precision ±18 G Single-/Dual-Axis IMEMS Accelerometer, www.datasheetdir.com/ADW22035+Accelerometer.
5. Digi. [Online] www.digi.com/pdf/ds_xstreammodule.pdf.
6. Gary Johnson, Richard Jennings, 2006, LabVIEW Graphical Programming, McGraw-Hill Professional, 4th edition , 608 pages.
7. Frank R. 2013. Understanding smart sensors. Artech House.
8. L. M. Ha, Tran Duc Tan, N. T. Long, N. D. Duc, N. P. Thuy, Errors Determination Of The MEMS IMU, Journal of Science, Đại học Quốc gia Hà nội, ISSN 0866-8612, 2007, pp. 6-12.
9. Chen, Feng, et al. "Simulation study of IEEE 802.15. 4 LR‐ WPAN for industrial applications." Wireless Communications and Mobile Computing 10.5 (2010): 609-621.
10. Dinh-Chinh Nguyen, Duc-Nghia Tran, Tran Duc-Tan, Application of Compressed Sensing in Effective Power Consumption of WSN for Landslide Scenario, Asia Pacific Conference on Multimedia and Broadcasting, pp. 111-115, April 2015.
11. Nguyen Dinh Chinh, Tran Duc Nghia, Le Ngoc Hoan, Ta Duc Tuyen, Pham Anh Tuan, Tran Duc Tan, Multi-sensors integration for landslide monitoring application, VNU Journal of Science – Natural Science and Technology, Vol. 30, No. 6S-B, 2014, pp. 202-210.
12. Rosso, Renzo, Maria Cristina Rulli, and Giovanni Vannucchi. "A physically based model for the hydrologic control on shallow landsliding." Water Resources Research 42.6 (2006).
13. Nguyen Dinh Chinh, Tran Duc-Tan, Energy Efficiency Scheme for Wireless Sensor Network based Landslide Monitoring System, International Conference on Green and Human Information Technology (ICGHIT), Feb. 4 ~ Feb. 6, 2015, Vietnam
PHỤ LỤC
CODE CHẠY WASPMOTE
// doc du lieu tu cac cam bien va gui ve trung tam giam sat
#include <WaspXBeeZB.h> khai báo
#include <WaspFrame.h>
#include <WaspSensorPrototyping_v20.h> #include <math.h>
//Pointer to an XBee packet structure packetXBee* packet;
// Destination MAC address ///////////////////////////////////////////////
char* MAC_ADDRESS="0013A20040B3166D"; địa chỉ
/////////////////////////////////////////////// void setup() { USB.ON(); kết nối ACC.ON(); USB.println(F("LandSlide project")); xbeeZB.ON(); SensorProtov20.ON(); cấp nguồn 3.3V và 5V pinMode(DIGITAL8,OUTPUT); pinMode(DIGITAL6,OUTPUT); pinMode(DIGITAL4,OUTPUT);
pinMode(DIGITAL2, OUTPUT); // blink led pin4 đầu ra truyền dữ liệu
delay(10); trễ ms
// Check XBee's network parameters
checkNetworkParams(); kiểm tra đường truyền XBee
}
void loop()
{ int x_ac=0,y_ac=0,z_ac = 0; khai báo biến cho Acceleration
float g,x,y,z;
float zero_G = 512.0; float scale = 102.3;
//---Moisture---
double val_mois1=0,val_mois2=0,moisture1,moisture2;
digitalWrite(DIGITAL8,HIGH); khai báo biến cho Soil moisture
digitalWrite(DIGITAL4,LOW);
digitalWrite(DIGITAL2, HIGH); // sang led val_mois1 = analogRead(ANALOG2); //pin8
moisture1 = (val_mois1-680)*200/(1018-680); 1018: ẩm nhất; 680: khô nhất val_mois1 = analogRead(ANALOG3); //pin8
moisture1 = (val_mois1-680)*200/(1018-680); digitalWrite(DIGITAL8,LOW); digitalWrite(DIGITAL6,LOW); digitalWrite(DIGITAL4,HIGH); delay(50); digitalWrite(DIGITAL4,LOW); //****************Temperture************************ int temp = analogRead(ANALOG1); // pin14
temp = temp*34/100; // nhiet do
//********************************** //gia toc tai ground surface
x_ac = analogRead(ANALOG4); // truc x pin7 y_ac = analogRead(ANALOG5); // truc y pin16 z_ac = analogRead(ANALOG6); // truc z pin6 x=((float)x_ac - zero_G)/scale; y=((float)y_ac - zero_G)/scale; z=((float)z_ac - zero_G)/scale; g=sqrt(x*x+y*y+z*z); //********************************** //---Check Register--- // should always answer 0x32, it is used to check // the proper functionality of the accelerometer /* byte check = ACC.check();
float x_acc = ACC.getX(); if (x_acc > 1000) x_acc = 1000; if (x_acc < -1000) x_acc = -1000;
int angle_x = (180 / PI) * asin(x_acc/1000); float y_acc = ACC.getY();
if (y_acc > 1000) y_acc = 1000; if (y_acc < -1000) y_acc = -1000;
int angle_y = (180 / PI) * asin(y_acc/1000); float z_acc = ACC.getZ();
if (z_acc > 1000) z_acc = 1000; if (z_acc < -1000) z_acc = -1000;
int angle_z = (180 / PI) * asin(z_acc/1000); */
delay(500);
// Create new frame
frame.createFrame(ASCII, "G"); // Add frame fields
frame.addSensor(SENSOR_TCA,temp);
frame.addSensor(SENSOR_HUMI1,moisture1); // Do am 1 frame.addSensor(SENSOR_HUMI2,moisture2); // Do am 2
frame.addSensor(SENSOR_BAT, PWR.getBatteryLevel()); // % pin
//frame.addSensor(SENSOR_ACC,angle_x,angle_y,angle_z); // Gia toc tai box frame.addSensor(SENSOR_ACC1,x_ac,y_ac,z_ac); // Gia toc tren mat dat frame.addSensor(SENSOR_STR,"D");
// set parameters to packet:
packet=(packetXBee*) calloc(1,sizeof(packetXBee)); // Memory allocation
packet->mode=BROADCAST; // Choose transmission mode: UNICAST or BROADCAST
// 4.2. set destination XBee parameters to packet
xbeeZB.setDestinationParams( packet, MAC_ADDRESS, frame.buffer, frame.length);
// 4.3. send XBee packet xbeeZB.sendXBee(packet); // 4.4. check TX flag if( xbeeZB.error_TX == 0) { USB.println(F("ok")); } else { USB.println(F("error")); } // free variables free(packet); packet=NULL; frame.showFrame(); // wait for one second delay(1000);
digitalWrite(DIGITAL2, LOW); delay(500);
}
/******************************************* *
* checkNetworkParams - Check operating * network parameters in the XBee module *
*******************************************/ void checkNetworkParams()
{
// 1. get operating 64-b PAN ID xbeeZB.getOperating64PAN(); // 2. wait for association indication xbeeZB.getAssociationIndication(); while( xbeeZB.associationIndication != 0 ) {
delay(2000);
// get operating 64-b PAN ID xbeeZB.getOperating64PAN();
USB.print(F("operating 64-b PAN ID: ")); USB.printHex(xbeeZB.operating64PAN[0]); USB.printHex(xbeeZB.operating64PAN[1]); USB.printHex(xbeeZB.operating64PAN[2]); USB.printHex(xbeeZB.operating64PAN[3]); USB.printHex(xbeeZB.operating64PAN[4]); USB.printHex(xbeeZB.operating64PAN[5]); USB.printHex(xbeeZB.operating64PAN[6]); USB.printHex(xbeeZB.operating64PAN[7]); USB.println(); xbeeZB.getAssociationIndication(); } USB.println(F("\nJoined a network!")); // 3. get network parameters
xbeeZB.getOperating16PAN(); xbeeZB.getOperating64PAN(); xbeeZB.getChannel();
USB.print(F("operating 16-b PAN ID: ")); USB.printHex(xbeeZB.operating16PAN[0]); USB.printHex(xbeeZB.operating16PAN[1]); USB.println();
USB.print(F("operating 64-b PAN ID: ")); USB.printHex(xbeeZB.operating64PAN[0]); USB.printHex(xbeeZB.operating64PAN[1]); USB.printHex(xbeeZB.operating64PAN[2]); USB.printHex(xbeeZB.operating64PAN[3]); USB.printHex(xbeeZB.operating64PAN[4]); USB.printHex(xbeeZB.operating64PAN[5]); USB.printHex(xbeeZB.operating64PAN[6]); USB.printHex(xbeeZB.operating64PAN[7]); USB.println(); USB.print(F("channel: ")); USB.printHex(xbeeZB.channel); USB.println(); }
CODE CHẠY VISUAL STUDIO
// Programmer: Nguyen Van Hung // Date: 05/05/2015
// code mieu ta phan giao dien nguoi dung using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; using System.Text.RegularExpressions; using System.Data.SqlClient; using DataAccess; using BusinessLogic; using System.Text; using System.IO; using System.Net; using System.Collections.Specialized; namespace WindowsFormsApplication2 {
public partial class Form1 : Form { public Form1() { InitializeComponent(); serialPortGateway.Parity = System.IO.Ports.Parity.None; serialPortGateway.StopBits = StopBits.One; serialPortGateway.DataBits = 8; serialPortGateway.DataReceived += new SerialDataReceivedEventHandler(serialPortGateway_DataReceived); ////////////////////////////////////////////////////////////////////// serialPortGSM.Parity = System.IO.Ports.Parity.None; serialPortGSM.StopBits = StopBits.One; serialPortGSM.DataBits = 8;
serialPortGSM.DataReceived += new SerialDataReceivedEventHandler(serialPortGSM_DataReceived); ///////////////////////////////////////////////////////////////////////// serialPortWS.Parity = System.IO.Ports.Parity.None; serialPortWS.StopBits = StopBits.One; serialPortWS.DataBits = 8; serialPortWS.DataReceived += new SerialDataReceivedEventHandler(serialPortWS_DataReceived); }
private void Form1_Load(object sender, EventArgs e) {
foreach (String t in System.IO.Ports.SerialPort.GetPortNames()) { cbComGateway.Items.Add(t); cbComGSM.Items.Add(t); cbComWS.Items.Add(t); } }
byte[] s = new byte[150]; // int i = 0;
string frame;
int index = 0, lenghtFrame; // nhan data
private void serialPortGateway_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { int bn = serialPortGateway.BytesToRead; for (int j = 0; j < bn; j++) {
byte temp = s[index] = (byte)serialPortGateway.ReadByte(); index++; if (temp == 0x80) { frame = Encoding.ASCII.GetString(s); this.Invoke(new EventHandler(type)); lenghtFrame = index; index = 0;
} } }
catch (Exception ex) {
MessageBox.Show(ex.Message + "63" ); }
}
byte[] s1 = new byte[150]; // int i = 0;
string frame1;
int index1 = 0, lenghtFrame1;
private void serialPortWS_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { int bn = serialPortWS.BytesToRead; for (int j = 0; j < bn; j++) {
byte temp = s1[index1] = (byte)serialPortWS.ReadByte(); index1++; if (temp == 0x66) { frame1 = Encoding.ASCII.GetString(s1); this.Invoke(new EventHandler(type1)); lenghtFrame1 = index1; index1 = 0; } } }
catch (Exception ex) {
MessageBox.Show(ex.Message); }
}
// button connect to Gateway
private void btnConnectGatewaye_Click(object sender, EventArgs e) {
serialPortGateway.PortName = Convert.ToString(cbComGateway.Text); serialPortGateway.BaudRate = Convert.ToInt32(cbBaudGateway.Text); if (!serialPortGateway.IsOpen) try { serialPortGateway.Open(); MessageBox.Show("Connected"); }
catch (Exception ex) { MessageBox.Show(ex.Message); } btnConnectGatewaye.Enabled = false; btnDisconnectGateway.Enabled = true; } // connect to GSM
private void btnConncetGSM_Click(object sender, EventArgs e) { serialPortGSM.PortName = Convert.ToString(cbComGSM.Text); serialPortGSM.BaudRate = Convert.ToInt32(cbBaudGSM.Text); if (!serialPortGSM.IsOpen) try { serialPortGSM.Open(); }
catch (Exception ex) { MessageBox.Show(ex.Message); } btnConnectGSM.Enabled = false; btnDisconnectGSM.Enabled = true; }
// connect to Weather Station
private void btnConnectWS_Click_1(object sender, EventArgs e) {
serialPortWS.PortName = Convert.ToString(cbComWS.Text); serialPortWS.BaudRate = Convert.ToInt32(cbBaudWS.Text); if (!serialPortWS.IsOpen)
{
serialPortWS.Open(); }
catch (Exception ex) { MessageBox.Show(ex.Message); } btnConnectWS.Enabled = false; btnDisconnectWS.Enabled = true; }
private void btnDisconnectGateway_Click(object sender, EventArgs e) {
serialPortGateway.Close();
btnConnectGatewaye.Enabled = true; btnDisconnectGateway.Enabled = false; }
private void btnDisconnectWS_Click(object sender, EventArgs e) { serialPortWS.Close(); btnConnectWS.Enabled = true; btnDisconnectWS.Enabled = false; } ///
void type1(object s, EventArgs e) { string[] field1; string fm = frame1.Trim(); tbReceive.AppendText(fm); if (lenghtFrame1 > 3) {
field1 = Regex.Split(fm.Substring(0, fm.Length), "#"); txtWspeed.Text = field1[0].ToString();
txtDirect.Text = field1[2].ToString(); txtPrecip.Text = field1[1].ToString();
string url = "http://www.uetlandslide.com/upload.action"; NameValueCollection nvc = new NameValueCollection();
nvc.Add("content", "weather;" + field1[1].ToString() + ";" + field1[0].ToString() + ";" + field1[2].ToString() + "");
} } /// <summary> /// gataway processing /// </summary> string[] field;
void type(object s, EventArgs e) {
string fm = frame.Trim(); tbReceive.AppendText(fm); if (lenghtFrame > 45) {
field = Regex.Split(fm.Substring(0, fm.Length), "#"); //try
// {
// field = Regex.Split(fm.Substring(0, fm.Length), "#"); // }
// catch (Exception ex) // {
// MessageBox.Show(ex.Message + " split"); // }
if (String.Compare(field[1].ToString(), "382553448", true) == 0) // node no.1
{
Logic lg = new Logic();
string[] temp1 = Regex.Split(field[4].Substring(0, field[4].Length), ":"); tbTemp1.Text = temp1[1].ToString();
string[] mois1 = Regex.Split(field[5].Substring(0, field[5].Length), ":"); tbMoist1.Text = mois1[1].ToString();
string[] bat1 = Regex.Split(field[6].Substring(0, field[6].Length), ":"); tbBat1.Text = bat1[1].ToString();
string[] acc1 = Regex.Split(field[7].Substring(0, field[7].Length), ":"); tbAcc1.Text = acc1[1].ToString();
string[] date1 = Regex.Split(field[8].Substring(0, field[8].Length), ":"); string[] datefield1 = Regex.Split(date1[1].Substring(0, date1[1].Length), "-");
tbDate1.Text = datefield1[0].ToString() + "/" + datefield1[1].ToString() + "/" + datefield1[2].ToString();
string[] timefield1 = Regex.Split(time1[1].Substring(0, time1[1].Length), "-");
tbTime1.Text = timefield1[0].ToString() + ":" + timefield1[1].ToString() + ":" + timefield1[2].ToString();
lg.InsertDataNode1(temp1[1].ToString(), mois1[1].ToString(), bat1[1].ToString(), acc1[1].ToString(), tbDate1.Text, tbTime1.Text);
// ghi ra file.txt
// FileInfo myfile1 = new FileInfo("D:\\Data\\382553448_" + datefield1[0].ToString() + datefield1[1].ToString() + datefield1[2].ToString() + "_" + timefield1[0].ToString() + timefield1[1].ToString() + timefield1[2].ToString() + ".txt");
// StreamWriter tex1 = myfile1.CreateText();
// tex1.Write("382553448;" + tbTemp1.Text + ";" + tbMoist1.Text + ";" + tbBat1.Text + ";" + tbAcc1.Text + ";" + tbDate1.Text + ";" + tbTime1.Text + ""); // tex1.Close();
}
else if (String.Compare(field[1].ToString(), "382545049", true) == 0) // node no.2
{
Logic lg = new Logic();
string[] temp2 = Regex.Split(field[4].Substring(0, field[4].Length), ":"); tbTemp2.Text = temp2[1].ToString();
string[] mois2 = Regex.Split(field[5].Substring(0, field[5].Length), ":"); tbMoist2.Text = mois2[1].ToString();
string[] bat2 = Regex.Split(field[6].Substring(0, field[6].Length), ":"); tbBat2.Text = bat2[1].ToString();
string[] acc2 = Regex.Split(field[7].Substring(0, field[7].Length), ":"); tbAcc2.Text = acc2[1].ToString();
string[] date2 = Regex.Split(field[8].Substring(0, field[8].Length), ":"); string[] datefield2 = Regex.Split(date2[1].Substring(0, date2[1].Length), "-");
tbDate2.Text = datefield2[0].ToString() + "/" + datefield2[1].ToString() + "/" + datefield2[2].ToString();
string[] time2 = Regex.Split(field[9].Substring(0, field[9].Length), ":"); string[] timefield2 = Regex.Split(time2[1].Substring(0, time2[1].Length), "-");
tbTime2.Text = timefield2[0].ToString() + ":" + timefield2[1].ToString() + ":" + timefield2[2].ToString();
lg.InsertDataNode2(temp2[1].ToString(), tbMoist2.Text, bat2[1].ToString(), acc2[1].ToString(), tbDate2.Text, tbTime2.Text);
// ghi ra file.txt
// FileInfo myfile2 = new FileInfo("D:\\Data\\382545049_" + datefield2[0].ToString() + datefield2[1].ToString() + datefield2[2].ToString() + "_" + timefield2[0].ToString() + timefield2[1].ToString() + timefield2[2].ToString() + ".txt");
// StreamWriter tex2 = myfile2.CreateText();
// tex2.Write("382545049;" + tbTemp2.Text + ";" + tbMoist2.Text + ";" + tbBat2.Text + ";" + tbAcc2.Text + ";" + tbDate2.Text + ";" + tbTime2.Text + ""); // tex2.Close();
}
else if (String.Compare(field[1].ToString(), "382537687", true) == 0) // node no.3
{
MessageBox.Show("OK"); Logic lg = new Logic();
string[] temp3 = Regex.Split(field[4].Substring(0, field[4].Length), ":"); tbTemp3.Text = temp3[1].ToString();
string[] mois3 = Regex.Split(field[5].Substring(0, field[5].Length), ":"); tbMoist3.Text = mois3[1].ToString();
string[] bat3 = Regex.Split(field[6].Substring(0, field[6].Length), ":"); tbBat3.Text = bat3[1].ToString();
string[] acc3 = Regex.Split(field[7].Substring(0, field[7].Length), ":"); tbAcc3.Text = acc3[1].ToString();
string[] date3 = Regex.Split(field[8].Substring(0, field[8].Length), ":"); string[] datefield3 = Regex.Split(date3[1].Substring(0, date3[1].Length), "-");
tbDate3.Text = datefield3[0].ToString() + "/" + datefield3[1].ToString() + "/" + datefield3[2].ToString();
string[] time3 = Regex.Split(field[9].Substring(0, field[9].Length), ":"); string[] timefield3 = Regex.Split(time3[1].Substring(0, time3[1].Length), "-");
tbTime3.Text = timefield3[0].ToString() + ":" + timefield3[1].ToString() + ":" + timefield3[2].ToString();
lg.InsertDataNode3(temp3[1].ToString(), mois3[1].ToString(), bat3[1].ToString(), acc3[1].ToString(), tbDate3.Text, tbTime3.Text);
// FileInfo myfile3 = new FileInfo("D:\\Data\\382537687_" + datefield3[0].ToString() + datefield3[1].ToString() + datefield3[2].ToString() + "_" + timefield3[0].ToString() + timefield3[1].ToString() + timefield3[2].ToString() + ".txt");
// StreamWriter tex3 = myfile3.CreateText();
// tex3.Write("382537687;" + tbTemp3.Text + ";" + tbMoist3.Text + ";" + tbBat3.Text + ";" + tbAcc3.Text + ";" + tbDate3.Text + ";" + tbTime3.Text + ""); // tex3.Close();
///////////////////////////////////////// }
else if (String.Compare(field[1].ToString(), "382551826", true) == 0) // node no.4
{
Logic lg = new Logic();
string[] temp4 = Regex.Split(field[4].Substring(0, field[4].Length), ":"); tbTemp4.Text = temp4[1].ToString();
string[] mois4 = Regex.Split(field[5].Substring(0, field[5].Length), ":"); tbMoist4.Text = mois4[1].ToString();
string[] bat4 = Regex.Split(field[6].Substring(0, field[6].Length), ":"); tbBat4.Text = bat4[1].ToString();
string[] acc4 = Regex.Split(field[7].Substring(0, field[7].Length), ":"); tbAcc4.Text = acc4[1].ToString();
string[] date4 = Regex.Split(field[8].Substring(0, field[8].Length), ":"); string[] datefield4 = Regex.Split(date4[1].Substring(0, date4[1].Length), "-");
tbDate4.Text = datefield4[0].ToString() + "/" + datefield4[1].ToString() + "/" + datefield4[2].ToString();
string[] time4 = Regex.Split(field[9].Substring(0, field[9].Length), ":"); string[] timefield4 = Regex.Split(time4[1].Substring(0, time4[1].Length), "-");
tbTime4.Text = timefield4[0].ToString() + ":" + timefield4[1].ToString() + ":" + timefield4[2].ToString();
// lg.InsertDataNode4(temp4[1].ToString(), mois4[1].ToString(), bat4[1].ToString(), acc4[1].ToString(), tbDate4.Text, tbTime4.Text);
// ghi ra file.txt
// FileInfo myfile4 = new FileInfo("D:\\Data\\382551826_" + datefield4[0].ToString() + datefield4[1].ToString() + datefield4[2].ToString() + "_" + timefield4[0].ToString() + timefield4[1].ToString() + timefield4[2].ToString() + ".txt");
// StreamWriter tex4 = myfile4.CreateText();
// tex4.Write("382551826;" + temp4[1].ToString() + ";" + mois4[1].ToString() + ";" + bat4[1].ToString() + ";" + acc4[1].ToString() + ";" + tbDate4.Text + ";" + tbTime4.Text + "");
// tex4.Close(); }
else if (String.Compare(field[1].ToString(), "382542510", true) == 0) // node no.5
{
Logic lg = new Logic();
string[] temp5 = Regex.Split(field[4].Substring(0, field[4].Length), ":"); tbTemp5.Text = temp5[1].ToString();
string[] mois5 = Regex.Split(field[5].Substring(0, field[5].Length), ":"); tbMoist5.Text = mois5[1].ToString();
string[] bat5 = Regex.Split(field[6].Substring(0, field[6].Length), ":"); tbBat5.Text = bat5[1].ToString();
string[] acc5 = Regex.Split(field[7].Substring(0, field[7].Length), ":"); tbAcc5.Text = acc5[1].ToString();
string[] date5 = Regex.Split(field[8].Substring(0, field[8].Length), ":"); string[] datefield5 = Regex.Split(date5[1].Substring(0, date5[1].Length), "-");
tbDate5.Text = datefield5[0].ToString() + "/" + datefield5[1].ToString() + "/" + datefield5[2].ToString();
string[] time5 = Regex.Split(field[9].Substring(0, field[9].Length), ":"); string[] timefield5 = Regex.Split(time5[1].Substring(0, time5[1].Length), "-");
tbTime5.Text = timefield5[0].ToString() + ":" +