Cov txheej txheem:

EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Cov Kauj Ruam (nrog Duab)
EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Cov Kauj Ruam (nrog Duab)

Video: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Cov Kauj Ruam (nrog Duab)

Video: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Cov Kauj Ruam (nrog Duab)
Video: Industry 4.0 Internet of Things, Technology Evolution & Big Data. How Technology Changes Our Lives 2024, Hlis ntuj nqeg
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Database
EAL-Industri4.0-RFID Dataopsamling Til Database

Txhawm rau tshem tawm txhua tus neeg siv cov ntaub ntawv, sau npe los ntawm tus lej vha. RFID, lagring cov ntaub ntawv i en MySQL database vha. node-RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application. Koj tus neeg tua tsiaj tua tsiaj:

Koj tuaj yeem tsim cov khoom lag luam zoo li cov neeg tsim khoom siv rau kuv li 200g foliebakker. Txhua tus neeg siv lub xov tooj ntawm tes udstyres tom qab kev siv med thiab RFID lossis i plasticlåget/labelen, som indholder thiab unikt ID (UID = Unique Identifier, er en 32 bits kode, 8 hexadecimale karakterer) Yog tias koj tab tom nrhiav lub tsev pheeb suab loj (piv txwv li, lub tsev nyob, lub tsev nyob), lub tsev nyob thiab qhov tshwj xeeb ntawm krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverpostej leverpostejer mus rau qhov tshwj xeeb kunde. Kunderne yog supermarketskæder:

1. Irma. Ntxiv rau Irmas luksus leverpostej skal holde sig inden rau +/- 5%, altså yam tsawg kawg 190g thiab ntau tshaj 210g.

2. Brugsen. Ntxiv rau Brugsens leverpostej skal holde sig inden rau +/- 10%, tsawg kawg 180g thiab ntau tshaj 220g.

3. Aldi. Ua raws li Aldis tus nqi txo qis qis qis qis rau +/- 15%, tsawg kawg 170g thiab ntau tshaj 230g.

Ua raws li cov lus qhia ntawm tus neeg nqa khoom:

Range0: tawm ntawm qhov ntau

Range1: yam tsawg kawg 190g/max210g

Range2: yam tsawg kawg 180g/max220g

Range3: yam tsawg 170g/max230g

Kauj Ruam 1: Txheeb Xyuas Cov Ntaub Ntawv Af rau Vægt Samt Sau npe rau Af UID

Opsamling Af Cov Ntaub Ntawv rau Vægt Samt Sau npe rau Af UID
Opsamling Af Cov Ntaub Ntawv rau Vægt Samt Sau npe rau Af UID

Til opsamling af cov ntaub ntawv rau vægt, samt registerrering af RFID tags er anvendt en Arduino MEGA2560 med en RFID-RC522 nyeem ntawv/sau ntawv. Da vi ikke har nogen vægt, simulerer vi cov ntaub ntawv rau vægten med thiab potmeter tilsluttet en analog indgang på Arduinoen.

Ua raws li cov cai hauv qab no:

1 stk potmeter 25k kab. Yder-benene er tilsluttet hhv. GND og +5V, midterbenet er tilsluttet AN0

RFID-RC522 er tilsluttet Arduino boardets SPI chaw nres nkoj på følgende måde:

SDA -> pin 53

SCK -> pin 52

MOSI -> pin 51

MISO-> pin 50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

De opsamlede cov ntaub ntawv, rau hhv. UID og vægten, xa på den serielle chaw nres nkoj som en komma-separeret tekststreng videre til node-Red som står rau den efterfølgende præsentation på thiab dashboard og lagring i en database.

Kauj ruam 2: Arduino-program

Kuv Arduino programmet inkluderes de rau biblioteker SPI.h og MFRC522.h rau ntawm kunne bruge RFID læseren. Kuv pib ntawm qhov programmet initialiseres de anvendte sib txawv. Der laves en instans af MFRC522. Kuv teeb tsa blokken initialiseres den serielle forbindelse, SPI porten og MFRC522. Derefter scannes tom qab RFID cim npe. Rau ikke ntawm sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker rau dette. Når der er scannet thiab UID tag, thauj khoom tsis zoo nyUID med det netop læste UID. Hvis array nyUID er forskellig fra oldUID er der tale om et nyt UID som kan sendes på den serielle chaw nres nkoj. Hvis nyUID og oldUID er ens, er der tale om samme UID tag og UID'et skal ignoreres. Hvis der er tale om et nyt UID, xa UID'et på den serielle chaw nres nkoj sammen med en læst værdi fra den serielle chaw nres nkoj. Qhov sib piv ntawm qhov sib txawv ntawm qhov sib txawv ntawm qhov sib txawv rau 150-250. Cov ntaub ntawv xa tawm ib yam li komma-separeret tekststreng. Som det sidste sættes oldUID = nyUID, således at koden klart til at læse et nyt RFID tag.. Den sidste funktion i programmet er den funktion som sammenligner 2 arrays. Funktionen returnerer qhov tseeb hvis array'ne er ens, thiab cuav hvis array'ne er forskellige.

#suav nrog

#suav nrog // Qhov program no tshuaj xyuas daim npav RFID siv RDIF-RC522 tus nyeem ntawv/tus kws sau ntawv. // UID tau nyeem, tus lej analog tau nyeem. Tus nqi sib piv 0-1023 raug ntsuas rau 150-250. // UID thiab tus nqi sib piv raug xa raws li cov ntawv sib cais ntawm cov chaw nres nkoj uas siv 9600, N, 8, 1. // Kev saib xyuas tau raug coj los tsuas yog xa txhua UID ib zaug ua ke, // UID tshiab yuav tsum tam sim no ua ntej tib lub UID tuaj yeem xa dua. // Lub luag haujlwm no tau ua tiav hauv cov cai los ntawm kev sib piv cov arrays: oldUID nyUID hauv kev ua haujlwm array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Tus nqi = 0; Txoj hlua StringValue = "0000"; byte oldUID [4] = {}; byte nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Tsim qhov piv txwv MFRC522.

void teeb tsa ()

{Serial.begin (9600); // Pib kev sib txuas lus txuas txuas SPI.begin (); // Pib SPI npav mfrc522. PCD_Init (); // Pib MFRC522}

void lub voj ()

{// Saib rau daim npav tshiab yog (! Mfrc522. PICC_IsNewCardPresent ()) {rov qab; } // Xaiv ib daim npav yog (! Mfrc522. PICC_ReadCardSerial ()) {rov qab; } // thauj nyUID nrog UID tag rau (byte i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // yog oldUID nyUID yog (! array_cmp (oldUID, nyUID)) {// xa UID tag ntawm cov chaw nres nkoj rau (byte i = 0; i 1000) {Tus nqi = 1000; } Tus nqi = (Tus Nqi / 10) + 150; // xa scaled analog tus nqi Serial.print (Tus nqi); // xa kab ntawv tshiab Serial.println (); // teeb tsa oldUID = nyUID rau (byte z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // tos 1 sec ncua (1000); }

// sib piv 2 arrays…

boolean array_cmp (byte a , byte b ) {bool test = tseeb; // sim txhua lub caij kom zoo ib yam. yog tias tsuas yog ib qho tsis yog, rov qab cuav rau (byte n = 0; n <4; n ++) {if (a [n]! = b [n]) test = cuav; // yog tias ntawm byte tsis sib npaug, sim = tsis tseeb} yog (kuaj == muaj tseeb) rov muaj tseeb; lwm tus rov qab tsis tseeb; }

Kauj Ruam 3: Node-RED, Lagring Af Data I Database

Node-RED, Lagring Af Cov Ntaub Ntawv Kuv Database
Node-RED, Lagring Af Cov Ntaub Ntawv Kuv Database
Node-RED, Lagring Af Cov Ntaub Ntawv Kuv Database
Node-RED, Lagring Af Cov Ntaub Ntawv Kuv Database

Følgende flow er lavet hauv node-RED:

COM4 er den serielle txwv tsis pub siv cov ntaub ntawv hloov pauv ntawm Arduino boardet. Funktionerne "Split and Get value" og "Split and Get UID" splitter teksstrengen ved kommaet og returnere hhv vægten og UID. Vægten bruges kom fremvisning på dashboardet kuv thiab kab ntawv kab og og nplai. UID fremvises i thiab tekstfelt. Funktionen test_sound advarer verbalt med sætningen "Tawm ntawm qhov ntau", hvis vægten er qis dua 170g eller ntau dua 230g, dvs kuv ntau 0.

Sib cais thiab Tau txais tus nqi:

var cov zis = msg.payload.split (',');

temp = {payload: (tso tawm [1])); rov qab kub;

Split thiab Tau UID:

var cov zis = msg.payload.split (",");

temp = {payload: tso tawm [0]}; rov qab kub;

xeem_sound:

var naj npawb = parseInt (msg.payload);

yog (tus lej> 230 || tus lej <170) {newMsg = {payload: "Tawm ntawm qhov ntau"}; rov newMsg; } lwm {newMsg = {payload: ""}; rov newMsg; }

Funktionen Split string "," indsætter thiab timestamp, UID og vægten i en database patedb.patelog.

var cov zis = msg.payload.split (","); // cais msg.payload los ntawm tus lej rau hauv array

UIDTag = output [0]; // thawj feem rau thawj txoj haujlwm [0] ValueTag = tso tawm [1]; // ntu thib ob rau txoj haujlwm thib ob [1]

mas m = {

topic: "INSERT INTO patedb.patelog (timestamp, UID, weight) VALUES ('"+Hnub Tshiab (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; rov m;

patelog er en MySQL database txwv tsis pub som er sat op nrog følgende parametre:

Tus tswv: localhost

Chaw nres nkoj: 3306

Tus neeg siv: hauv paus

Database: peb

Kauj ruam 4: Database-tsim

Database-tsim
Database-tsim

Databasen patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, tilskrives cov ntaub ntawv ntawm node-RED og C# programmet

ordertable er en en ligne som cov ntaub ntawv tus tswv cuab om de genemførte ordrer, tilskrives cov ntaub ntawv af C# programmet

customertable er thiab kunderegister

rangetable er en en ligne som indholder grænseværdierne rau de C# programmet benyttede ranges.

Kauj ruam 5: Patelog

Patelog
Patelog

Tabellen patelog tus neeg tsis txaus siab folgende 6 kolonner:

pateID (int) er thawj qhov tseem ceeb og inkrementeres automatisk.

Timestamp, UID & vægt er af ntaus ntawv varchar (med forskellig max længde)

rangeNr er af ntaus ntawv me me (beregnes og tilføjes af C# programmetmet)

orderID er af typen int (orderID tilføjes af C# programmet)

Node-RED tilføjer ikke værdier til kolonnerne rangeNr og orderID. rangeNr og orderID tillader NULL værdier, det bruges i C# programmet til at detektere de rækker som skal tilskrives værdier for rangeNr og orderID

Kauj ruam 6: Ordertable

Ordertable
Ordertable

ordertable indeholder 5 kolonner:

orderID (int) er det aktuelle ordrenummer

orderQuant (mediumint) er ordens pålydende antal

quantProduced (mediumint) er antal der rent faktisk er produceret på ordren. (Tælles ntawm C# programmet)

saib (ntawv me me) er en eventuel kommentar til ordren.

customerID (int) er det aktuelle kundenummer på ordren.

Kauj ruam 7: Customertable

Customertable
Customertable

customertable indeholder 6 kolonner:

customerID (int) er thawj qhov tseem ceeb og auto inc.

lub npe, chaw nyob, xov tooj, email (varchar) nrog rau kev txawj ntse max længde

rangeNr (int) cov

Kauj ruam 8: Rangetable

Rangetable
Rangetable

rangetable indeholder 3 kolonner:

rangeNr (int) er thawj qhov tseem ceeb og auto inc.

rangeMin (int) cov

rangeMax (tau)

Kauj Ruam 9: C# Txoj Haujlwm

C# Txoj Haujlwm
C# Txoj Haujlwm

Når der producersres en ordre leverpostej, tus txheej txheem følgende:

Kundenummer, ordrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i praksis overføres det digitalt fra virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'-knappen. på et transportbånd) Samhørende værdier af UID og den aktuelle vægt xa cov ntawv xa mus rau qhov liab, RED, som viser de opsamlede cov ntaub ntawv på dashboard 'et. Samtidig skrives timestamp, UID og vægt i en ny række i patedb.patelog pragrenden. tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de muaj værdien NULL.

Med thiab timerinterval undersøger C# programmet patedb.patelogtabellen rau nye tilkomne rækker med NULL værdier i rangeNr kolonnen. Når der er detekteret en række med NULL værdi, beregnes rangeNr og det tilføjes sammen med det aktuelle orderID. Når en ordre er produret, afsluttes ordren ved tryk på “nres”- knappen. Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Tsis tas li ntawd, kuv tuaj yeem pom cov ntaub ntawv hauv kuv cov ntaub ntawv hauv daim ntawv teev npe fremvises ved at trykke på de forskellige knapper i gruppen Update DataGridview. ordertable kan også vises, og der kan søges ordredata på tus kheej tus kheej UID'er eller kundedata på tus kheej tus kheej ordrer.

siv System; siv System. Collections. Generic; siv System. ComponentModel; siv System. Data; siv System. Drawing; siv System. Linq; siv System. Text; siv System. Threading. Tasks; siv System. Windows. Forms; siv MySql. Data. MySqlClient;

namespace show_data_from_database

{pej xeem ib nrab chav kawm Form1: Daim ntawv {MySqlConnection txuas = MySqlConnection tshiab ("cov ntaub ntawv database = localhost; username = hauv paus; password = ''"); int RowNumber = 0; // Hloov pauv rau khaws pateID tus nqi int RangeNumber = 0; // Variable rau khaws cia rangenumber int hnyav = 0; // Variable rau khaws cia qhov hnyav int OrderNr = 0; // Variable rau khaws cia OrderNR int QuantProduced = 0; // Hloov pauv rau khaws cia kom muaj nuj nqis tsim tawm hauv NumberOfRows = 0; // tus naj npawb ntawm kab nrog nulls.. bool ProdRunning = tsis tseeb; // Qhov txawv txav qhia tau yog tias pib & nres cov nyees khawm tau qhib rau int txwv = tshiab int [6]; // pib ua ntej array int CustomerID; // Hloov pauv rau khaws cia customerID pej xeem Form1 () {InitializeComponent (); load_table (); cov. // hu rau load_table}

void load_table ()

{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", txuas); sim {MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }}

ntiag tug tsis muaj dab tsi SetRowOrder ()

{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["hnyav"]. DisplayIndex = 3; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Txhua yam ntawm nws qhov kev sib tw ntawm kolonner ændres}

ntiag tug tsis muaj dab tsi GetData_Click (tus xa khoom, EventArgs e) // Nyeem cov ntaub ntawv database thiab xaj los ntawm Timestamp

{load_table (); cov }

ntiag tug tsis muaj dab tsi btnRefreshUID_Click (tus xa khoom, EventArgs e) //

{hlua timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand hais kom ua = tshiab MySqlCommand (timeStr, txuas); sim {MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }}

ntiag tug tsis muaj dab tsi btnRefreshValue_Click (tus xa khoom, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (hnyav li SIGNED INTEGER);"; MySqlCommand hais kom ua = tshiab MySqlCommand (weightSort, txuas); sim {MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }}

ntiag tug tsis muaj dab tsi ChkNullBtn_Click (tus xa khoom, EventArgs e)

{yog (ProdRunning) {CheckTableForNull (); load_table (); cov. }}

ntiag tug void CheckTableForNull ()

{// Txheeb xyuas/teeb tsa timerinterval yam tsawg 100 ms int i; int. TryParse (textTimer1. Text, tawm kuv); yog (kuv <100) {timer1. Stop (); kuv = 100; timer1. Interval = kuv; MessageBox. Show ("Tus nqi tsawg kawg i 100mS"); timer1. Start (); } lwm {timer1. Interval = kuv; } textTimer1. Text = timer1. Interval. ToString (); // Txheeb xyuas yog tias ib kab twg tsis muaj nyob hauv cov lus, rov qab tus lej ntawm kab hauv qhov sib txawv: NumberOfRows txoj hlua weightStr = ""; hlua chkNull = "SELECT COUNT (*) FROM patedb.patelog QHOV rangeNR YOG NULL ORDER BY pateID LIMIT 1;"; MySqlCommand hais kom ua = tshiab MySqlCommand (chkNull, txuas); sim {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); kaw. Close (); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); } thaum kawg {yog (NumberOfRows! = 0) {sim {// Xaiv tus lej qis tshaj pateID qhov twg rangeNr yog NULL txoj hlua readID = "SELECT pateID FROM patedb.patelog WHERE rangeNR YOG NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = MySqlCommand tshiab (readID, txuas); {kev sib txuas. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // integer tau !! kaw. Close (); } listPateID. Text = RowNumber. ToString (); // nyeem tawm xaiv PateID tus lej // Xaiv qhov hnyav los ntawm xaiv kab ntawv rownumber kab = RowNumber. ToString (); txoj hlua nyeem ntawv = "Xaiv qhov hnyav los ntawm patedb.patelog QHOV pateID =" + kab; MySqlCommand cmdweight = tshiab MySqlCommand (qhov hnyav, txuas); {kev sib txuas. Open (); qhov hnyavStr = (hlua) cmdweight. ExecuteScalar (); // Txoj hlua !! kaw. Close (); } qhov hnyav = int. Parse (weightStr); // hloov mus rau int txtWeight. Text = hnyav. ToString (); // print int RangeNumber = 0; yog (qhov hnyav> = txwv [0] && hnyav = txwv [2] && hnyav = txwv [4] && hnyav <= txwv [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} ntiag tug tsis muaj dab tsi btnStart_Click (tus xa khoom, EventArgs e) {yog (ProdRunning == tsis tseeb) {int valtest; sim {CustomerID = int. Parse (txtCustomerNr. Text); // nyeem customerID} ntes {MessageBox. Show ("Sau cov ntaub ntawv ntau lawm thiab nias 'pib' khawm."); }

txoj hlua ntsuas = "XAIV XEEB COUNT (*) LOS NTAWM patedb.customertable YUAV UA LI CAS customerID ="+CustomerID;

MySqlCommand cmdtestcustomer = tshiab MySqlCommand (kuaj, txuas); {kev sib txuas. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // rov qab 0 yog tias cov neeg siv khoom tsis muaj qhov txuas. Kaw (); } yog (valtest == 1) // yog tias cov neeg siv khoom muaj nyob hauv database - pib tsim khoom {sim {OrderNr = int. Parse (txtOrderNumber. Text)); ProdRunning = muaj tseeb; timer1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } ntes (Kev zam tshwj xeeb) {MessageBox. Show ("Nkag mus rau cov ntaub ntawv tsim tawm thiab nias 'pib' khawm."); }} lwm MessageBox. Show ("Neeg tsis nyob hauv database, sim dua"); } // ReadLimits (); }

ntiag tug void ReadLimits ()

{// Nyeem qhov txwv los ntawm rangetable, thaj tsam 1 txog 3 int counter = 0; rau (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = MySqlCommand tshiab (readmin, txuas); {kev sib txuas. Open (); txwv [txee] = (int) cmdmin. ExecuteScalar (); counter = suav + 1; kaw. Close (); } // MessageBox. Show (counter. ToString ()); txoj hlua readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = MySqlCommand tshiab (readmax, txuas); {kev sib txuas. Open (); txwv [txee] = (int) cmdmax. ExecuteScalar (); counter = suav + 1; kaw. Close (); }} // kawg rau lub voj}

ntiav void UpdateLog ()

{// Hloov tshiab rangeNR & orderID txoj hlua khwv = RangeNumber. ToString (); Txoj Cai Txiav = OrderNr. ToString (); txoj hlua hloov tshiab = "Hloov tshiab patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"HNUB pateID ="+RowNumber; MySqlCommand updatecmd = MySqlCommand tshiab (hloov tshiab, txuas); sim {connection. Open (); updatecmd. ExecuteNonQuery (); kaw. Close (); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }}

ntiag tug tsis muaj dab tsi btnStop_Click (tus xa khoom, EventArgs e)

{yog (ProdRunning == muaj tseeb) {timer1. Stop (); ProdRunning = tsis tseeb; UpdateOrderTable (); } lwm yam {MessageBox. Show ("Tsis tau pib ua lawm. Sau cov ntaub ntawv thiab nias 'pib' khawm"); }}

ntiag tug void UpdateOrderTable ()

{string insert = "INSERT INTO patedb.ordertable (orderID, orderQuant, quantProduced, comment, customerID) VALUES ('" + this.txtOrderNumber. Text + "', '" + this.txtOrderQuant. Text + "', '" + QuantProduced. ToString ()+"','"+this.txtComment. Text+"','"+this.txtCustomerNr. Text+"');"; MySqlCommand insertcmd = MySqlCommand tshiab (ntxig, txuas); sim {connection. Open (); insertcmd. ExecuteNonQuery (); kaw. Close (); QuantProduced = 0; } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }}

tus kheej void timer1_Tick (tus xa khoom, EventArgs e)

{CheckTableForNull (); load_table (); cov. }

ntiag tug tsis muaj dab tsi btnShowOrderTable_Click (tus xa khoom, EventArgs e)

{yog (ProdRunning == tsis tseeb) {MySqlCommand hais kom ua = tshiab MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", txuas); sim {MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }} lwm {MessageBox. Show ("Nias nres kom wiev orderTable"); }}

ntiag tug tsis muaj dab tsi btnShowOrderDetails_Click (tus xa khoom, EventArgs e)

{yog (ProdRunning == tsis tseeb) {txoj hlua ntsuas = ("SELECT patedb.ordertable.orderID, orderQuant, quantProduced, tawm tswv yim, customerID los ntawm patedb.ordertable INNER JOIN patedb.patelog ON patedb.patelog.orderID = patedb.ordertable.orderID YUAV patedb.patelog. UID = '" + txtShowOrderDetails. Text +"' "); MySqlCommand hais kom ua = tshiab MySqlCommand (kuaj, txuas); sim {connection. Open (); MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); } connection. Close (); } lwm {MessageBox. Show ("Nias nres kom pom cov lus qhia ntxaws"); }}

ntiag tug tsis muaj dab tsi btnShowCustomerDetails_Click (tus xa khoom, EventArgs e)

{yog (ProdRunning == tsis tseeb) {txoj hlua ntsuas = ("SELECT patedb.customertable.customerID, npe, chaw nyob, xov tooj, email, rangeNr FROM patedb.customertable INNER JOIN patedb.ordertable ON patedb.ordertable.customerID = patedb.customertable. customerID qhov twg patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); MySqlCommand hais kom ua = tshiab MySqlCommand (kuaj, txuas); sim {MySqlDataAdapter adapter = tshiab MySqlDataAdapter (); adapter. SelectCommand = hais kom ua; DataTable dbdataset = DataTable tshiab (); adapter. Fill (dbdataset); BindingSource bsource = tshiab BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; hloov kho dua tshiab (dbdataset); } ntes (Kev zam tshwj xeeb) {MessageBox. Show (ex. Message); }} lwm {MessageBox. Show ("Nias nres kom paub meej cov neeg siv khoom paub meej"); }}}

}

Pom zoo: