Բովանդակություն:

EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան. 10 քայլ (նկարներով)
EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան. 10 քայլ (նկարներով)

Video: EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան. 10 քայլ (նկարներով)

Video: EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան. 10 քայլ (նկարներով)
Video: IoT & IR 4.0 - Disruptive Era 2024, Նոյեմբեր
Anonim
EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան
EAL-Industri4.0-RFID Dataopsamling Til տվյալների շտեմարան

Մանրամասն նախագծի բոլոր հնարավորությունները, որոնք գրանցվել են, գրանցվել են նույնականացման միջոցով: RFID, հետ մնալով տվյալների և MySQL տվյալների բազայի միջոցով: հանգույց-ԿԱՐՄԻՐ, միևնույն ժամանակ, երբ ես վարվում եմ տվյալների և C# ծրագրով, Windows Form Application- ի միջոցով: Forestiller os følgende:

Vi har en produktionslinje som productrer leverpostej i 200g foliebakker. Ուղղակիորեն օգտագործել և օգտագործել RFID պիտակ և պլաստմասսա/նշան, անշարժ գույք և անհայտ ID (UID = Unique Identifier, er en 32 bits code, 8 hexadecimale karakterer) for entydig identifikation af hver enkelt bakke lever Da færdigvægten af hver enkelt bakke leverpostej kan svinge (afhængig af råvarer, fordampning i ovn mm), og da kunderne hver har et specifikt krav færdigvægten, bruges UID tagget til at knytte hver enkret leverpostej leverpostej leverpostej legerpostej legerpostej lagerpostej legerpostej legerpostej tage, leverpostejer til én specifik kunde. Kunderne er supermarkedskæder:

1. Իրմա: Vægten på Irmas luksus leverpostej skal holde sig inden +/- 5%-ի համար, նվազագույնը `190 գ և առավելագույն 210 գ:

2. Բրյուսսեն: Vægten på Brugsens leverpostej skal holde sig inden համար +/- 10%-ի չափով, նվազագույնը 180 գ և առավելագույն 220 գ:

3. Ալդի. Vægten på Aldis զեղչ leverpostej skal holde sig inden +/- 15%-ի համար, նվազագույնը 170 գ և առավելագույնը 230 գ:

Der er således følgende sorteringer:

Range0: տիրույթից դուրս

Միջակայք 1 ՝ նվազագույնը 190 գ/առավելագույնը ՝ 210 գ

Միջակայք 2 ՝ նվազագույնը 180 գ/առավելագույնը ՝ 220 գ

Միջակայք 3 ՝ նվազագույնը 170 գ/առավելագույնը ՝ 230 գ

Քայլ 1. V Datagt Samt- ի Af UID- ի գրանցման համար Af տվյալների հավաքագրում

Opsamling Af Data for Vægt Samt Registrering Af UID
Opsamling Af Data for Vægt Samt Registrering Af UID

Օգտագործելով տվյալները, դուք կարող եք գրանցել RFID պիտակների միջոցով, ինչպես նաև Arduino MEGA2560- ով և RFID-RC522 ընթերցողով/գրողով: Da vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analogous indgang på Arduinoen.

Følgende opstilling er anvendt:

1 պարկ չափիչ 25k գծագիր: Իդեր-բենեն եր թիլսլուտետ հվ. GND og +5V, midterbenet er tilsluttet AN0

RFID-RC522 er tilsluttet Arduino տախտակներ SPI նավահանգիստ på følgende måde:

SDA -> փին 53

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

De opsamlede տվյալները, hhv- ի համար: UID- ն այնուհետև ուղարկում է սերվերի պորտը ՝ օգտագործելով կոճակ-անջատման տեքստեր ՝ տեսնելով հանգույց-Կարմիր գույնը ՝ տվյալների փոխանցման և կառավարման վահանակի և տվյալների բազայի և տվյալների բազայի հետ աշխատելու համար:

Քայլ 2. Arduino- ծրագիր

Ես Arduino- ն ծրագրում ընդգրկում եմ biblioteker SPI.h og MFRC522.h համար kunne bruge RFID ծառայությունների համար: Ես սկսում եմ ծրագրավորման սկզբնաղբյուրը փոփոխական փոփոխականից: Der laves en instans af MFRC522. Ես Setup blokken initialiseres den serielle forbindelse, SPI porten og MFRC522. Derefter- ը սկանավորում է RFID պիտակներից հետո: For ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. Når der er scannet և UID պիտակը, բեռնում է մի շարք nyUID և ցանցեր ՝ UID- ի միջոցով: Hvis array nyUID er forskellig fra oldUID er der tale om et nyt UID som kan sendes på den serielle port. Hvis nyUID old oldUID er ens, er der tale om samme UID tag og UID'et skal անտեսում է: Hvis der er tale om et nyt UID, sendes UID'et på den serielle port sammen med en læst værdi fra den serielle port. Den analoge værdi skaleres til området 150-250: Տվյալները ուղարկում են մի քանի տեքստային տարբերակներ: Այն կարող է օգտագործվել oldUID = nyUID- ի համար, որն օգտագործվում է կոդերի հավաքման և տեղադրման համար, ինչպես նաև RFID պիտակի համար: Գործող վերադարձող ճշմարիտ hvis array'ne er ens, og false hvis array'ne er forskellige:

#ներառում

#ներառել // Այս ծրագիրը սկանավորում է RFID քարտեր ՝ օգտագործելով RDIF-RC522 ընթերցող/գրող տախտակ: // UID- ը կարդացվում է, կարդացվում է անալոգային քորոց: 0-1023 անալոգային արժեքը մեծացված է մինչև 150-250: // UID- ը և անալոգային արժեքը ուղարկվում են սերիական նավահանգստի վրա ստորակետով անջատված տեքստի միջոցով ՝ օգտագործելով 9600, N, 8, 1. // Careգուշություն է ցուցաբերվել յուրաքանչյուր UID- ը ուղարկել միայն մեկ անգամ անընդմեջ, // պետք է լինի նոր UID ներկա, նախքան նույն UID- ի նորից ուղարկվելը: // Այս գործառույթը կիրարկվում է ծածկագրում ՝ համեմատելով զանգվածները ՝ oldUID nyUID գործառույթում array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Արժեք = 0; String StringValue = "0000"; բայթ oldUID [4] = {}; բայթ nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // Ստեղծեք MFRC522 օրինակ:

դատարկ կարգավորում ()

{Serial.begin (9600); // Սկսել սերիական հաղորդակցություն SPI.begin (); // Գործարկել SPI ավտոբուսը mfrc522. PCD_Init (); // Նախաձեռնել MFRC522}

դատարկ շրջան ()

{// Փնտրեք նոր քարտեր, եթե (! Mfrc522. PICC_IsNewCardPresent ()) {վերադարձեք; } // Ընտրեք քարտերից մեկը, եթե (! Mfrc522. PICC_ReadCardSerial ()) {return; } // բեռնել nyUID- ը UID պիտակով (բայթ i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// ուղարկել UID պիտակը սերիական նավահանգստում (բայթ i = 0; i 1000) {Արժեք = 1000; } Արժեք = (Արժեք / 10) + 150; // ուղարկել մասշտաբային անալոգային արժեք Serial.print (Value); // ուղարկել նոր տող Serial.println (); // սահմանել oldUID = nyUID համար (բայթ z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // սպասել 1 վրկ ուշացում (1000); }

// համեմատել 2 զանգված…

boolean array_cmp (բայթ a , բայթ b ) {bool test = true; // ստուգել, որ յուրաքանչյուր տարր նույնն է: եթե միայն մեկը չէ, վերադարձեք false (բայթ n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // եթե բայթը հավասար չէ, test = false} եթե (test == true) վերադարձնել true; այլապես վերադարձնել կեղծ; }

Քայլ 3. Node-RED, Lagring Af Data I տվյալների շտեմարան

Node-RED, Lagring Af Data I տվյալների շտեմարան
Node-RED, Lagring Af Data I տվյալների շտեմարան
Node-RED, Lagring Af Data I տվյալների շտեմարան
Node-RED, Lagring Af Data I տվյալների շտեմարան

Følgende flow er lavet i node-RED:

COM4 er den serielle forbindelse hvor data modtages fra 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 til fremvisning på dashboardet et linechart og en scale: UID- ն առաջարկում է բառեր և բառեր: Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vægten er under 170g eller over 230g, dvs i range 0.

Պառակտում և ստացեք արժեք.

var ելք = msg.payload.split (',');

temp = {բեռնվածություն. (ելք [1])}; վերադարձի ջերմաստիճան;

Պառակտում և ստացեք UID:

var ելք = msg.payload.split (",");

temp = {payload: output [0]}; վերադարձի ջերմաստիճան;

test_sound:

var number = parseInt (msg.payload);

if (համար> 230 || համար <170) {newMsg = {բեռնվածություն. "Շրջանից դուրս"}; վերադարձնել newMsg; } else {newMsg = {payload: ""}; վերադարձնել newMsg; }

Գործառույթներ Պառակտել տողը "," նշեք և ժամանակագրեք, UID- ը և գտեք տվյալների բազայում patedb.patelog:

var ելք = msg.payload.split (","); // բաժանել msg.payload ստորակետով զանգվածի մեջ

UIDTag = ելք [0]; // առաջին մասը առաջին դիրքում [0] ValueTag = ելք [1]; // երկրորդ մասը երկրորդ դիրքում [1]

var m = {

թեմա. "INSERT INTO patedb.patelog (timestamp, UID, weight) VALUES ('"+new Date (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; վերադարձ մ;

patelog er en MySQL տվյալների շտեմարանը արգելում է որոշ պարամետրերի պարամետրերը.

Հաղորդավար ՝ localhost

Նավահանգիստ `3306

Օգտվող: արմատ

Տվյալների բազան ՝ patedb

Քայլ 4: Տվյալների բազայի ձևավորում

Տվյալների բազայի ձևավորում
Տվյալների բազայի ձևավորում

Տվյալների բազա patedb անշարժ գույք 4 ներդիր

patelog er dataopsamlingstabellen, tilskrives data af node-RED og C# programmet

պատվիրելիս, ինչպես նաև մի քանի անշարժ գույքի վերաբերյալ տվյալների փոխանցման կարգադրիչից, տվյալների փոխանցում C# ծրագրից

customertable er et kunderegister

rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede տիրույթների համար:

Քայլ 5: Պատելոգ

Պատելոգ
Պատելոգ

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) er առաջնային բանալին և inkrementeres ավտոմատ:

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

rangeNr er af typen tinyint (նախընտրում և օգտագործում ենք C# ծրագրավորում)

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 հողագործ NULL værdier, det bruges i C# programmet til at detektere de rækker som skal tilskrives værdier for rangeNr og orderID

Քայլ 6: Պատվիրելի

Պատվիրելի
Պատվիրելի

պատվիրատու անշարժ գույք 5 kolonner:

orderID (int) er det aktuelle ordrenummer

orderQuant (mediumint) er ordens pålydende antal

quantProduced (mediumint) er antal der rent faktisk er productret på ordren. (T #lles af C# ծրագիր)

մեկնաբանություն (tinytext) er en eventuel kommentar til ordren.

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

Քայլ 7: Պահանջվող

Պահանջվող
Պահանջվող

customertable indeholder 6 kolonner:

clientID (int) er առաջնային բանալին և ավտոմատ ներմուծումը:

անուն, հասցե, հեռախոս, էլ. փոստ (տարբեր) med forskellig max længde

միջակայք Nr (int)

Քայլ 8: Rangetable

Rangetable
Rangetable

rangetable indeholder 3 kolonner:

rangeNr (int) er առաջնային բանալին և ավտոմատ ներառյալ

միջակայք Min (int)

միջակայք Առավելագույն (int)

Քայլ 9: C# ծրագիր

C# ծրագիր
C# ծրագիր

Når der productionres en ordre leverpostej, er proceduren følgende:

Kundenummer, ordrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i reals overføres det digitalt fra virksomhedens ordresystem. Produktionen startes no nu ved tryk på 'start'- knappen. på et transportbånd) Samhørende værdier af UID og den aktuelle vægt sendes serielt til node-RED, som viser de opsamlede data på dashboard 'et. Samtidig skrives timestamp, UID og vægt i en ny række i patedb. patelog tabel. tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.

Med et timerinterval undersøger C# programmet patedb.patelogtabellen for 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 productionret, afsluttes ordren ved tryk på”stop”- knappen: Når ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. Չհաջողվեց կարգաբերել տվյալները, որոնք կարող են օգտագործվել տվյալների և պատուհանների ընտրության ժամանակ, երբ փորձարկվում է forskellige knapper- ը և gruppen Update DataGridview- ը: պատվիրվող կան også vises, og der kan søges ordredata på individualueller UID'er eller kundedata på individualuelle ordrer.

օգտագործելով System; օգտագործելով System. Collections. Generic; օգտագործելով System. ComponentModel; օգտագործելով System. Data; օգտագործելով System. Drawing; օգտագործելով System. Linq; օգտագործելով System. Text; օգտագործելով System. Threading. Tasks; օգտագործելով System. Windows. Forms; օգտագործելով MySql. Data. MySqlClient;

namespace show_data_from_database

{public partial class Form1: Ձև {MySqlConnection connection = new MySqlConnection ("datasource = localhost; username = root; password = '" "); int RowNumber = 0; // pateID արժեքը int RangeNumber = 0 պահելու համար // Փոփոխական համարի միջին քաշի պահպանման համար փոփոխական = 0; // Փոփոխական քաշը պահելու համար OrderNr = 0; // OrderNR int QuantProduced = 0 պահելու համար փոփոխական: // Փոփոխական արտադրված քանակի պահպանման համար `NumberOfRows = 0; // nulls տողերի քանակը.. bool ProdRunning = false; // Փոփոխական, որը ցույց է տալիս, թե արդյոք մեկնարկի և կանգառի կոճակները ակտիվացված են int սահմաններ = նոր int [6]; // զանգվածի սկզբնավորում int CustomerID; // Հաճախորդի ID հրապարակային Form1 () պահպանման համար փոփոխական () {InitializeComponent (); բեռի_սեղան (); // զանգի բեռի_սեղան}

դատարկ բեռ_սեղան ()

{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", կապ); փորձեք {MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; SetRowOrder (); ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }}

մասնավոր դատարկ SetRowOrder ()

{dataGridView1. Colunns ["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. Colunns ["UID"]. DisplayIndex = 2; // Her kan rækkefølgen af kolonner ændres dataGridView1. Colunns ["weight"]. DisplayIndex = 3; // Her kan rækkefølgen af kolonner ændres dataGridView1. Colunns ["rangeNr"]. DisplayIndex = 4; // Her kan rækkefølgen af kolonner ændres dataGridView1. Colunns ["orderID"]: DisplayIndex = 5; // Her kan rækkefølgen af kolonner ændres}

private void GetData_Click (օբյեկտ ուղարկող, EventArgs e) // Կարդում է տվյալների բազայի աղյուսակը և պատվերները ըստ Timestamp- ի

{բեռ_սեղան (); }

մասնավոր դատարկություն btnRefreshUID_Click (օբյեկտ ուղարկող, EventArgs e) //

{string timeStr = "ԸՆՏՐԵԼ * Patedb.patelog- ից Պատվիրել UID- ով;"; MySqlCommand հրաման = նոր MySqlCommand (timeStr, կապ); փորձեք {MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; SetRowOrder (); ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }}

մասնավոր դատարկություն btnRefreshValue_Click (օբյեկտ ուղարկող, EventArgs ե)

{string weightSort = "ԸՆՏՐԵԼ * Patedb.patelog- ից Պատվիրել արագությամբ (քաշը, ԻՆՉՊԵՍ ՍՏԱՎԱ INT ԻՆՏԵԳԵՐԵՐԻՆ);"; MySqlCommand հրաման = նոր MySqlCommand (քաշի տեսակավորում, կապ); փորձեք {MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; SetRowOrder (); ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }}

մասնավոր դատարկություն ChkNullBtn_Click (օբյեկտ ուղարկող, EventArgs ե)

{if (ProdRunning) {CheckTableForNull (); բեռի_սեղան (); }}

մասնավոր դատարկություն CheckTableForNull ()

{// Ստուգել/սահմանել ժամանակային միջնաժամկետ նվազագույն 100 ms int i; int. TryParse (textTimer1. Text, out i); եթե (i <100) {timer1. Stop (); i = 100; ժամանակաչափ 1. Interval = i; MessageBox. Show («Նվազագույն արժեքը 100 մՍ»); timer1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Ստուգեք, եթե աղյուսակում առկա է null տող, վերադարձնում է փոփոխականների տողերի թիվը. NumberOfRows string weightStr = ""; string chkNull = "ԸՆՏՐԵԼ ՀԱՄԱԿ (*) ՊԱՏԵԲ. patelog- ից, ՈՐՏԵ range միջակայքը NR է NULL պատվեր` pateID LIMIT 1 -ով; "; MySqlCommand հրաման = նոր MySqlCommand (chkNull, կապ); փորձեք {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); կապ. Փակել (); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); } վերջապես {if (NumberOfRows! = 0) {try {// Ընտրում է pateID- ի ամենացածր համարը, որտեղ rangeNr- ը NULL string է readID = "SEAT pateID FROM patedb.patelog WHERE rangeNR IS NULL ORDER by pateID ASC LIMIT 1;"; MySqlCommand cmdID = նոր MySqlCommand (readID, կապ); {կապ. Բաց (); RowNumber = (int) cmdID. ExecuteScalar (); // ամբողջ թիվ !! կապ. Փակել (); } listPateID. Text = RowNumber. ToString (); // կարդալ ընտրված PateID համարը // Ընտրում է քաշը ընտրված տողերի շարքի տողից = RowNumber. ToString (); string readweight = "ԸՆՏՐԵԼ քաշը patedb.patelog WHERE pateID =" + տող; MySqlCommand cmdweight = նոր MySqlCommand (ընթերցման քաշ, միացում); {կապ. Բաց (); weightStr = (տող) cmdweight. ExecuteScalar (); // լարային !! կապ. Փակել (); } քաշը = int. Parse (weightStr); // փոխակերպել int txtWeight. Text = քաշի. ToString (); // տպել int RangeNumber = 0; եթե (քաշը> = սահմանափակումներ [0] && քաշը = սահմանափակումները [2] && քաշը = սահմանափակումները [4] && քաշը <= սահմանները [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); } QuantProduced = QuantProduced + 1; }}} մասնավոր դատարկություն btnStart_Click (օբյեկտ ուղարկող, EventArgs ե) {if (ProdRunning == false) {int valtest; փորձեք {CustomerID = int. Parse (txtCustomerNr. Text); // կարդալ customerID} catch {MessageBox. Show («Մուտքագրեք արտադրության տվյալները և սեղմեք« սկսել »կոճակը»:); }

string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+CustomerID;

MySqlCommand cmdtestcustomer = նոր MySqlCommand (փորձարկում, կապ); {կապ. Բաց (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // վերադարձնում է 0 -ը, եթե հաճախորդը կապ չունի: Փակել (); } if (valtest == 1) // եթե հաճախորդ կա տվյալների բազայում - սկսեք արտադրությունը {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = ճշմարիտ; timer1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (բացառություն բացառությամբ) {MessageBox. Show («Մուտքագրեք արտադրության տվյալները և սեղմեք« սկսել »կոճակը»:); }} else MessageBox. Show ("Հաճախորդը տվյալների բազայում չէ, նորից փորձեք"); } // ReadLimits (); }

մասնավոր դատարկ ReadLimits ()

{// Կարդում է rangetable- ից սահմանափակումներ, 1 -ից 3 int հաշվիչ = 0; համար (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = նոր MySqlCommand (readmin, կապ); {կապ. Բաց (); սահմաններ [հաշվիչ] = (int) cmdmin. ExecuteScalar (); հաշվիչ = հաշվիչ + 1; կապ. Փակել (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = նոր MySqlCommand (readmax, կապ); {կապ. Բաց (); սահմաններ [հաշվիչ] = (int) cmdmax. ExecuteScalar (); հաշվիչ = հաշվիչ + 1; կապ. Փակել (); }} // վերջ հանգույցի համար}

մասնավոր դատարկ UpdateLog ()

{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); string Order = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = նոր MySqlCommand (թարմացում, կապ); փորձեք {connection. Open (); updatecmd. ExecuteNonQuery (); կապ. Փակել (); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }}

մասնավոր դատարկություն btnStop_Click (օբյեկտ ուղարկող, EventArgs ե)

{if (ProdRunning == true) {timer1. Stop (); ProdRunning = կեղծ; UpdateOrderTable (); } else {MessageBox. Show («Արտադրություն դեռ չի սկսվել: Մուտքագրեք տվյալները և սեղմեք« սկսել »կոճակը)); }}

մասնավոր դատարկ 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 (ներդիր, միացում); փորձեք {connection. Open (); insertcmd. ExecuteNonQuery (); կապ. Փակել (); QuantProduced = 0; } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }}

private void timer1_Tick (օբյեկտ ուղարկող, EventArgs ե)

{CheckTableForNull (); բեռի_սեղան (); }

մասնավոր դատարկություն btnShowOrderTable_Click (օբյեկտ ուղարկող, EventArgs ե)

{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BAY orderID DESC;", կապ); փորձեք {MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }} else {MessageBox. Show ("Սեղմեք stop to wiev orderTable"); }}

մասնավոր դատարկություն btnShowOrderDetails_Click (օբյեկտ ուղարկող, EventArgs ե)

{if (ProdRunning == false) {string test = ("SELECT patedb.ordertable.orderID, orderQuant, quantProduced, comment, customerID FROM patedb.ordertable INNER JOIN patedb.patelog ON patedb.patelog.orderID = patedb.ordertable.orderID WHERE patedb.patelog. UID = '" + txtShowOrderDetails. Text +"' "); MySqlCommand հրաման = նոր MySqlCommand (փորձարկում, կապ); փորձեք {connection. Open (); MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); } կապ. Փակել (); } else {MessageBox. Show («Պատվերի մանրամասները դիտելու համար սեղմեք կանգառ»); }}

մասնավոր դատարկություն btnShowCustomerDetails_Click (օբյեկտ ուղարկող, EventArgs ե)

{if (ProdRunning == false) {string test = ("SELECT patedb.customertable.customerID, name, address, phone, email, rangeNr FROM patedb.customertable INNER JOIN patedb.ordertable ON patedb.ordertable.customerID = patedb.customertable. customerID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); MySqlCommand հրաման = նոր MySqlCommand (փորձարկում, կապ); փորձեք {MySqlDataAdapter ադապտեր = նոր MySqlDataAdapter (); ադապտեր. ԸնտրելՀրաման = հրաման; DataTable dbdataset = նոր DataTable (); ադապտեր: Լրացրեք (dbdataset); BindingSource bsource = նոր BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = բեսուրս; ադապտեր: Թարմացում (dbdataset); } բռնել (բացառություն բացառությամբ) {MessageBox. Show (օր. հաղորդագրություն); }} else {MessageBox. Show ("Սեղմեք կանգառ ՝ հաճախորդի տվյալները իմանալու համար"); }}}

}

Խորհուրդ ենք տալիս: