ዝርዝር ሁኔታ:

EAL-Industri4.0-RFID Dataopsamling Til Database 10 ደረጃዎች (ከስዕሎች ጋር)
EAL-Industri4.0-RFID Dataopsamling Til Database 10 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: EAL-Industri4.0-RFID Dataopsamling Til Database 10 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: EAL-Industri4.0-RFID Dataopsamling Til Database 10 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: War on Cash (Video 2 of 7) 2024, ሀምሌ
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Database
EAL-Industri4.0-RFID Dataopsamling Til Database

Dette projekt omhandler opsamling af vægtdata, af identiteter vha. RFID ፣ lagring af data i en MySQL database vha. node-RED, samt fremvisning og behandling af de opsamlede data i et C# ፕሮግራም i form af en Windows Form Application. Vi forestiller os følgende:

Vi ሃር en produktionslinje ሶም አምራች leverpostej i 200g foliebakker. Alle færdigbagte leverpostejer udstyres efter afkøling med et RFID tag i plasticlåget/labelen ፣ som indeholder et unikt ID (UID = Unique Identifier, er en 32 ቢት ኮዴ ፣ 8 ሄክሳዴሲማሌ ካራክቴር) ለ entydig Identifikation af hver enkelt bakke leverpostej. ዳ 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 enkelt leverpostej til en spec leverpostejer til én specifik kunde. Kunderne er supermarkedskæder:

1. ኢርማ። Vægten på Irmas luksus leverpostej skal holde sig inden ለ +/- 5%፣ altså ቢያንስ 190g og maksimum 210g።

2. ብሩግሰን። Vægten på Brugsens leverpostej skal holde sig inden ለ +/- 10%፣ altså ቢያንስ 180g og maksimum 220g።

3. አልዲ። Vægten på Aldis ቅናሽ leverpostej skal holde sig inden ለ +/- 15%፣ altså ቢያንስ 170 ግ og maksimum 230g።

Der er således følgende sorteringer:

Range0: ከክልል ውጭ

ክልል 1 - ቢያንስ 190 ግ/ከፍተኛ 210 ግ

ክልል 2 - ቢያንስ 180 ግ/ከፍተኛ 220 ግ

ደረጃ 3 - ቢያንስ 170 ግ/ከፍተኛ 230 ግ

ደረጃ 1 - ለ Vægt Samt Registrering Af UID መረጃን ከፍ ያለ መረጃ

ለ Vægt Samt Registrering Af UID የተጨናነቀ የአፍ መረጃ
ለ Vægt Samt Registrering Af UID የተጨናነቀ የአፍ መረጃ

Til opsamling af data for vægt, samt registrering af RFID tags er anvendt en Arduino MEGA2560 med en RFID-RC522 አንባቢ/ጸሐፊ። ዳ vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analog indgang på Arduinoen.

Fgenlgende opstilling er anvendt:

1 stk potmeter 25k lineært። Yder-benene er tilsluttet hhv. GND og +5V ፣ midterbenet er tilsluttet AN0

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

ኤስዲኤ -> ፒን 53

SCK -> ፒን 52

MOSI -> ፒን 51

MISO-> pin50

IRQ -> ኤን.ሲ

GND -> GND

RST -> ፒን 5

3.3V -> 3.3 ቪ

ደ opsamlede ውሂብ ፣ ለ hhv። UID og vægten, sendes på den serielle port som en komma-separeret tekststreng videre til node-Red som står for den efterfølgende præsentation på et dashboard og lagring i en database.

ደረጃ 2: Arduino- ፕሮግራም

እኔ Arduino programmet inkluderes ደ ወደ biblioteker SPI.h og MFRC522.h ለ kunne bruge RFID læseren ላይ። I starten af programmet initialiseres de anvendte ተለዋዋጭ። ዴር ላቭስ en በቅጽበት በ MFRC522። እኔ ማዋቀር blokken initialiseres ዴን serielle forbindelse, SPI porten ዐግ MFRC522. ዴሬፍተር ከ RFID መለያዎች በኋላ ይቃኛል። ለ ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en ጉቶ ኮዴ ሶም tjekker ለ dette. Når der er scannet et UID መለያ ፣ የአራቱን nyUID med det netop læste UID ን ይጭናል። Hvis ድርድር nyUID er forskellig fra oldUID er der tale om et nyt UID som kan sendes på den serielle port. 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 ፣ UID’et på den serielle port sammen med en læst værdi fra den serielle port ይልካል። ዴን analoge værdi skaleres til området 150-250. ውሂብ ሶማ en komma-separeret tekststreng ይልካል. ሶም 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 ተመላሽ እውነተኛ hvis array'ne er ens, ዐግ የሐሰት hvis array'ne er forskellige.

#ያካትቱ

#ያካትቱ // ይህ ፕሮግራም የ RDIF-RC522 አንባቢ/ጸሐፊ ሰሌዳ በመጠቀም የ RFID ካርዶችን ይቃኛል። // UID ይነበባል ፣ የአናሎግ ፒን ይነበባል። የአናሎግ እሴት 0-1023 ወደ 150-250 ከፍ ብሏል። // ዩአይዲ እና የአናሎግ እሴት 9600 ፣ N ፣ 8 ፣ 1. ን በመጠቀም በተከታታይ ወደብ ላይ እንደ ኮማ ተለያይተው ጽሑፍ ይላካሉ። // እያንዳንዱን UID በተከታታይ አንድ ጊዜ ብቻ ለመላክ ጥንቃቄ ተደርጓል ፣ // አዲስ UID መሆን አለበት ተመሳሳይ ዩአይዲ እንደገና ከመላኩ በፊት ይገኛል። // ድርድር ድርድሮችን በማወዳደር ይህ ተግባር በኮድ ውስጥ ተፈፃሚ ነው oldUID nyUID in array array_cmp (oldUID ፣ nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int እሴት = 0; ሕብረቁምፊ StringValue = "0000"; ባይት oldUID [4] = {}; ባይት nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN ፣ RST_PIN); // MFRC522 ምሳሌን ይፍጠሩ።

ባዶነት ማዋቀር ()

{Serial.begin (9600); // ተከታታይ ግንኙነት SPI.begin () ያስጀምሩ; // የ SPI አውቶቡስ mfrc522. PCD_Init (); // MFRC522} ያስጀምሩ

ባዶነት loop ()

{// (! Mfrc522. PICC_IsNewCardPresent ()) {ከተመለሱ አዲስ ካርዶችን ይፈልጉ። } // (! Mfrc522. PICC_ReadCardSerial ()) {ከተመለሰ; } // nyUID ን በ UID መለያ ለ (ባይት i = 0 ፤ i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // ከሆነ oldUID nyUID ከሆነ (! array_cmp (oldUID ፣ nyUID)) {// የ UID መለያ በተከታታይ ወደብ ለ (ባይት i = 0 ፤ i 1000) {እሴት = 1000; } እሴት = (እሴት / 10) + 150; // ሚዛናዊ የአናሎግ እሴት ላክ Serial.print (እሴት); // አዲስ መስመር ላክ Serial.println (); // አዘጋጅ oldUID = nyUID ለ (ባይት z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // 1 ሰከንድ መዘግየት ይጠብቁ (1000); }

// 2 ድርድሮችን ያወዳድሩ…

ቡሊያን ድርድር_cmp (ባይት ሀ ፣ ባይት ለ ) {bool test = true; // እያንዳንዱ ንጥረ ነገር ተመሳሳይ እንዲሆን ይሞክሩት። አንድ ካልሆነ ፣ ለ (ባይት n = 0; n <4; n ++) {ከሆነ (ሀ [n]! = ለ [n]) ሙከራ = ሐሰት; // ባይት እኩል ካልሆነ ፣ ፈተና = ሐሰት} ከሆነ (ፈተና == እውነት) እውነት ከተመለሰ ፤ አለበለዚያ ሐሰትን መመለስ; }

ደረጃ 3-መስቀለኛ-ቀይ ፣ ላንግሪንግ አፍ መረጃ I ዳታቤዝ

መስቀለኛ- RED ፣ Lagring Af Data I ዳታቤዝ
መስቀለኛ- RED ፣ Lagring Af Data I ዳታቤዝ
መስቀለኛ- RED ፣ Lagring Af Data I ዳታቤዝ
መስቀለኛ- RED ፣ Lagring Af Data I ዳታቤዝ

Følgende ፍሰት er lavet i node-RED:

COM4 er den serielle forbindelse hvor data modtages fra Arduino boardet. Funktionerne “የተከፈለ እና ዋጋን ያግኙ” og “Split and Get UID” splitter teksstrengen ved kommaet og returnere hhv vægten og UID። Vægten bruges til fremvisning på dashboardet i et linechart og en scale. UID fremvises i et tekstfelt. Funktionen test_sound advarer verbalt med sætningen "ከክልል ውጪ" ፣ hvis vægten er under 170g eller under 230g, dvs i range 0.

የተከፈለ እና ዋጋን ያግኙ:

var output = msg.payload.split (',');

temp = {የክፍያ ጭነት (ውፅዓት [1])}; የመመለሻ ሙቀት;

ተከፋፍለው UID ን ያግኙ ፦

var output = msg.payload.split (",");

temp = {የክፍያ ጭነት ፦ ውፅዓት [0]}; የመመለሻ ሙቀት;

የሙከራ_ድምጽ

var ቁጥር = parseInt (msg.payload);

ከሆነ (ቁጥር> 230 || ቁጥር <170) {newMsg = {payload: «ከክልል ውጪ»}; newMsg ን መመለስ; } ሌላ {newMsg = {payload: ""}; newMsg ን መመለስ; }

Funktionen Split string "፣" indsætter et timestamp ፣ UID og vægten i en ጎታ patedb.patelog።

var output = msg.payload.split (","); // የተከፋፈለ msg.poma በኮማ ወደ ድርድር

UIDTag = ውፅዓት [0]; // የመጀመሪያ ክፍል ወደ መጀመሪያው ቦታ [0] ValueTag = ውፅዓት [1]; // ሁለተኛ ክፍል ወደ ሁለተኛው ቦታ [1]

var m = {

ርዕስ ፦ patedb.patelog (የጊዜ ማህተም ፣ ዩአይዲ ፣ ክብደት) እሴቶችን ያስገቡ (''+አዲስ ቀን ()። }; መመለስ m;

patelog er en MySQL database forbindelse som er sat op med følgende parametre:

አስተናጋጅ: localhost

ወደብ: 3306

ተጠቃሚ: ሥር

የውሂብ ጎታ: patedb

ደረጃ 4 የውሂብ ጎታ-ዲዛይን

የውሂብ ጎታ-ዲዛይን
የውሂብ ጎታ-ዲዛይን

Databasen patedb ባለአደራ 4 tabeller

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

የትዕዛዝ ሠንጠረዥ በባለቤትነት የተያዘ የባለቤትነት መረጃ ኦም ደ genemførte ordrer ፣ መረጃን በ C# ፕሮግራም

customertable er et kunderegister

rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede ክልሎች።

ደረጃ 5: ፓተሎግ

ፓተሎግ
ፓተሎግ

Tabellen patelog ባለአደራ folgende 6 kolonner:

pateID (int) er ዋና ቁልፍ ዐግ inkrementeres automatisk.

የጊዜ ማህተም ፣ ዩአይዲአይ እና የርቀት ምሳሌ (var forskellig max længde)

rangeNr er af typen tinyint (beregnes og tilføjes af C# programmet)

በትዕዛዝ (በ ID# ትዕዛዝ)

መስቀለኛ- 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

ደረጃ 6: የትዕዛዝ ሰንጠረዥ

የትዕዛዝ ሰንጠረዥ
የትዕዛዝ ሰንጠረዥ

የታዘዘ ባለአደራ 5 ኮሎን

orderID (int) er det aktuelle ordrenummer

orderQuant (መካከለኛ) er ordens pålydende antal

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

አስተያየት (tinytext) er en eventuel kommentar til ordren.

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

ደረጃ 7: ሊበጅ የሚችል

ሊበጅ የሚችል
ሊበጅ የሚችል

ሊበጅ የሚችል ባለአደራ 6 kolonner:

clientID (int) er primary key og auto inc.

ስም ፣ አድራሻ ፣ ስልክ ፣ ኢሜል (varchar) med forskellig max længde

rangeNr (int)

ደረጃ 8 - ሊለካ የሚችል

ሊለካ የሚችል
ሊለካ የሚችል

የማይንቀሳቀስ ባለአደራ 3 ኮሎን

rangeNr (int) er primary key og auto inc.

rangeMin (int)

rangeMax (int)

ደረጃ 9: C# ፕሮግራም

ሲ# ፕሮግራም
ሲ# ፕሮግራም

Nrr der produres en ordre leverpostej, er processn 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 sendes serielt til node-RED, som viser de opsamlede data på dashboard 'et. ሳምቲዲግ የሰዓት ማህተም ፣ ዩአይዲ og vægt i en ny række i patedb.patelog tabellen. tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de værdien NULL አላቸው።

Med et timerinterval undersøger C# programmet patedb.patelogtabellen ለ ናይ 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. Når en ordre er afsluttet, kan kan de opsamlede data i patelog tabellen fremvises ved at trykke på de forskellige knapper i gruppen አዘምን DataGridview. የታዘዘ ሰንጠረዥ ኦስሴ vises ፣ og der kan søges ordredata på individueller UID’er eller kundedata på individuelle ordrer።

ሲስተምን መጠቀም ፤ ስርዓት. Collections. Generic; System. ComponentModel በመጠቀም; System. Data በመጠቀም; ስርዓትን በመጠቀም መሳል; System. Linq በመጠቀም; ስርዓት በመጠቀም። ጽሑፍ; System. Threading. Tasks በመጠቀም; System. Window. Forms ን በመጠቀም; MySql. Data. MySqlClient ን በመጠቀም;

የስም ቦታ ትዕይንት_ዳታ_ዳታቤዝ

{የሕዝብ ከፊል ክፍል ቅጽ1 ፦ ቅጽ {MySqlConnection connection = new MySqlConnection ("datasource = localhost; የተጠቃሚ ስም = ስር ፤ የይለፍ ቃል = ''"); int RowNumber = 0; // pateID እሴት በ RangeNumber = 0 ውስጥ ለማከማቸት ተለዋዋጭ; // rangenumber int ክብደት = 0; // ክብደቱን int OrderNr = 0 ለማከማቸት ተለዋዋጭ; // OrderNR int QuantProduced = 0 ን ለማከማቸት ተለዋዋጭ; // የተመረተውን ብዛት ለማከማቸት ተለዋዋጭ - NumberOfRows = 0; // የረድፎች ብዛት ከንቱዎች.. bool ProdRunning = false; // የመነሻ እና የማቆሚያ ቁልፎች int ውስጥ ገብተው ከሆነ የሚለዋወጥ ተለዋዋጭ ገደቦች = አዲስ int [6] ፤ // ድርድር int CustomerID ን ማስጀመር ፤ // የደንበኛ መታወቂያ የሕዝብ ቅጽ 1 () {InitializeComponent (); load_table (); // ይደውሉ load_table}

ባዶ ጭነት_ሰንጠረዥ ()

{MySqlCommand command = new MySqlCommand («ከ * patedb.patelog ORSTER BY timestamp DESC ፤» ፣ ግንኙነት) ፤ ይሞክሩ {MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; SetRowOrder (); አስማሚ ወቅታዊ (dbdataset); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }}

የግል ባዶነት SetRowOrder ()

{dataGridView1. Columns ["pateID"]። DisplayIndex = 0; // የእሷ kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // የእሷ kan rækkefølgen af kolonner ændres dataGridView1. Columns ["UID"]. DisplayIndex = 2; // የእሷ kan rækkefølgen af kolonner ændres dataGridView1. Columns ["ክብደት"]. DisplayIndex = 3; // የእሷ kan rækkefølgen af kolonner ændres dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // የእሷ kan rækkefølgen af kolonner ændres dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // የእሷ kan rækkefølgen af kolonner ændres}

የግል ባዶነት GetData_Click (የነገር ላኪ ፣ EventArgs e) // የውሂብ ጎታ ሰንጠረዥን እና በ Timestamp ትዕዛዞችን ያነባል

{load_table (); }

የግል ባዶነት btnRefreshUID_Click (የነገር ላኪ ፣ EventArgs e) //

{string timeStr = "ከ patedb.patelog ORIDER በ UID ምረጥ"; MySqlCommand ትዕዛዝ = አዲስ MySqlCommand (timeStr ፣ ግንኙነት); ይሞክሩ {MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; SetRowOrder (); አስማሚ ወቅታዊ (dbdataset); } ያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }}

የግል ባዶነት btnRefreshValue_Click (የነገር ላኪ ፣ EventArgs e)

{string weightSort = "ከ patedb.patelog ትዕዛዙን በካስት ይምረጡ (ክብደት እንደ ተፈረመ ኢንቲጀር) ፤"; MySqlCommand ትዕዛዝ = አዲስ MySqlCommand (weightSort ፣ ግንኙነት); ይሞክሩ {MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; SetRowOrder (); አስማሚ ወቅታዊ (dbdataset); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }}

የግል ባዶ ChkNullBtn_Click (የነገር ላኪ ፣ EventArgs e)

{ከሆነ (ProdRunning) {CheckTableForNull () ፤ load_table (); }}

የግል ባዶነት CheckTableForNull ()

{// የጊዜ መርሐ ግብርን ቢያንስ 100 ms int i ይፈትሹ/ያዘጋጁ/ያዋቅሩ። int. TryParse (textTimer1. ጽሑፍ ፣ ውጭ i); ከሆነ (i <100) {timer1. Stop (); እኔ = 100; ሰዓት ቆጣሪ 1. ኢንተርቫል = እኔ; MessageBox. Show (“አነስተኛ እሴት i 100mS”); ሰዓት ቆጣሪ 1. ጀምር (); } ሌላ {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // በሠንጠረዥ ውስጥ ባዶ የሆኑ ማናቸውም ረድፎች ካሉ ፣ በተለዋዋጭ ውስጥ የረድፎች ብዛት እንደሚመልስ ያረጋግጡ - NumberOfRows string weightStr = ""; ሕብረቁምፊ chkNull = "ቆጠራ ይምረጡ (*) ከ patedb.patelog ክልል rangeR በ PateID LIMIT 1 ሙሉ ትዕዛዝ ነው"; MySqlCommand ትዕዛዝ = አዲስ MySqlCommand (chkNull ፣ ግንኙነት); ሞክር {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); ግንኙነት. (); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); } በመጨረሻ {ከሆነ (NumberOfRows! = 0) {ይሞክሩት {// rangeNr NULL string readID = «pateID ከ patedb.patelog ይምረጡ pateID ከ pateID ASC LIMIT 1; MySqlCommand cmdID = አዲስ MySqlCommand (readID ፣ ግንኙነት); {connection. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // ኢንቲጀር !! ግንኙነት. (); } listPateID. Text = RowNumber. ToString (); // የተመረጠውን የ PateID ቁጥር ያንብቡ/ ከተመረጠው የ rownumber string ረድፍ = RowNumber. ToString () ክብደትን ይመርጣል። ሕብረቁምፊ readweight = "ክብደትን ከ patedb.patelog የት ይምረጡ pateID =" + ረድፍ; MySqlCommand cmdweight = አዲስ MySqlCommand (ተነባቢ ክብደት ፣ ግንኙነት); {connection. Open (); weightStr = (ሕብረቁምፊ) cmdweight. ExecuteScalar (); // ሕብረቁምፊ !! ግንኙነት. (); } ክብደት = int. Parse (weightStr); // ወደ int txtWeight. Text = weight. ToString () ይለውጡ; // አትም int RangeNumber = 0; ከሆነ (ክብደት> = ገደቦች [0] && ክብደት = ገደቦች [2] && ክብደት = ገደቦች [4] && ክብደት <= ገደቦች [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} የግል ባዶነት btnStart_Click (የነገር ላኪ ፣ EventArgs e) {ከሆነ (ProdRunning == false) {int valtest; ይሞክሩ {CustomerID = int. Parse (txtCustomerNr. Text); // clientID ን አንብብ {MessageBox. Show (“የምርት ውሂብን አስገባ እና የ“ጀምር”ቁልፍን ተጫን”)። }

ሕብረቁምፊ ሙከራ = "ቆጠራን ይምረጡ (*) ከ patedb.customertable WHERE clientID ="+CustomerID;

MySqlCommand cmdtestcustomer = አዲስ MySqlCommand (ሙከራ ፣ ግንኙነት); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // ደንበኛ ግንኙነት ከሌለ 0 ይመልሳል። ዝጋ (); } ከሆነ (valtest == 1) // ደንበኛ በውሂብ ጎታ ውስጥ ካለ - ማምረት ይጀምሩ {ይሞክሩ {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = እውነት; ሰዓት ቆጣሪ 1. ጀምር (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } መያዝ (ለየት ያለ) {MessageBox. Show ('' የምርት ውሂብ ያስገቡ እና 'ጀምር' የሚለውን ቁልፍ ይጫኑ። »); }} ሌላ MessageBox. Show (“ደንበኛ በውሂብ ጎታ ውስጥ የለም ፣ እንደገና ይሞክሩ”); } // ReadLimits (); }

የግል ባዶነት ReadLimits ()

{// ገደቦችን ከሚያስተላልፉ ገደቦች ያነባል ፣ ከ 1 እስከ 3 int counter = 0; ለ (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "rangeMin from patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = አዲስ MySqlCommand (ንባብ ፣ ግንኙነት); {connection. Open (); ገደቦች [ቆጣሪ] = (int) cmdmin. ExecuteScalar (); ቆጣሪ = ቆጣሪ + 1; ግንኙነት. (); } // MessageBox. Show (counter. ToString ()); ሕብረቁምፊ readmax = "ክልል ይምረጡ MAX ከ patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = አዲስ MySqlCommand (readmax ፣ ግንኙነት); {connection. Open (); ገደቦች [ቆጣሪ] = (int) cmdmax. ExecuteScalar (); ቆጣሪ = ቆጣሪ + 1; ግንኙነት. (); }} // ለሉፕ ማብቂያ}

የግል ባዶነት UpdateLog ()

{// የዘመነ ክልልNR & orderID string Range = RangeNumber. ToString (); ሕብረቁምፊ ትዕዛዝ = OrderNr. ToString (); ሕብረቁምፊ ዝመና = "አዘምን patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand updatecmd = new MySqlCommand (ዝመና ፣ ግንኙነት); ሞክር {connection. Open (); updatecmd. ExecuteNonQuery (); ግንኙነት. (); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }}

የግል ባዶነት btnStop_Click (የነገር ላኪ ፣ EventArgs e)

{ከሆነ (ProdRunning == true) {timer1. Stop (); ProdRunning = ሐሰት; UpdateOrderTable (); } ሌላ {MessageBox. Show ((ገና ምርት አልተጀመረም። ውሂብ ያስገቡ እና ‹ጀምር› ቁልፍን ይጫኑ)); }}

የግል ባዶነት UpdateOrderTable ()

{string insert = "አስገባ patedb.ordertable (orderID ፣ orderQuant ፣ quantProduced, comment, customerID) VALUES ('" + this.txtOrderNumber. Text + "', '" + this.txtOrderQuant. Txt + "', '" + QuantProduced. ToString ()+"'' ''+this.txtComment. Text+'' '' ''+this.txtCustomerNr. Text+'');"; MySqlCommand insertcmd = አዲስ MySqlCommand (ማስገቢያ ፣ ግንኙነት); ሞክር {connection. Open (); insertcmd. ExecuteNonQuery (); ግንኙነት. (); QuantProduced = 0; } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }}

የግል ባዶ ሰዓት ቆጣሪ1_Tick (የነገር ላኪ ፣ EventArgs e)

{CheckTableForNull (); load_table (); }

የግል ባዶነት btnShowOrderTable_Click (የነገር ላኪ ፣ EventArgs e)

{ከሆነ (ProdRunning == ሐሰተኛ) {MySqlCommand command = new MySqlCommand ("ከ * patedb.ordertable ORDER በ orderID DESC ምረጥ ፤" ፣ ግንኙነት) ፤ ይሞክሩ {MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; አስማሚ ወቅታዊ (dbdataset); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }} ሌላ {MessageBox. Show ("wiev orderTable to stop stop"); }}

የግል ባዶነት btnShowOrderDetails_Click (የነገር ላኪ ፣ EventArgs e)

{ከሆነ (ProdRunning == ሐሰተኛ) {string test = ("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 (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; አስማሚ ወቅታዊ (dbdataset); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); } ግንኙነት። (); } ሌላ {MessageBox. Show (“የትዕዛዝ ዝርዝሮችን ለማየት ማቆሚያውን ይጫኑ”) ፤ }}

የግል ባዶነት btnShowCustomerDetails_Click (የነገር ላኪ ፣ EventArgs e)

{ከሆነ (ProdRunning == ሐሰተኛ) {string test = ("patedb.customertable.customerID ፣ ስም ፣ አድራሻ ፣ ስልክ ፣ ኢሜል ፣ ክልልNr ከ patedb.customertable INNER JOIN patedb.ordertable on patedb.ordertable.customerID = patedb.customertable. clientID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' ")); MySqlCommand ትዕዛዝ = አዲስ MySqlCommand (ሙከራ ፣ ግንኙነት); ይሞክሩ {MySqlDataAdapter አስማሚ = አዲስ MySqlDataAdapter (); አስማሚ. SelectCommand = ትዕዛዝ; DataTable dbdataset = አዲስ DataTable (); አስማሚ። ይሙሉ (dbdataset); BindingSource bsource = አዲስ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = ምንጭ; አስማሚ ወቅታዊ (dbdataset); } መያዝ (ለየት ያለ) {MessageBox. Show (ex. Message); }} ሌላ {MessageBox. Show (“የደንበኛ ዝርዝሮችን ለመመልከት ማቆሚያ ይጫኑ”) ፤ }}}

}

የሚመከር: