Sisällysluettelo:
- Vaihe 1: Af -tietojen tarkistaminen Vægt Samt -rekisteröintiä varten
- Vaihe 2: Arduino-ohjelma
- Vaihe 3: Solmu-PUNAINEN, Lagring Af Data I -tietokanta
- Vaihe 4: Tietokannan suunnittelu
- Vaihe 5: Patelog
- Vaihe 6: Tilattavissa
- Vaihe 7: Muokattava
- Vaihe 8: Mittausalue
- Vaihe 9: C# -ohjelma
Video: EAL-Industri4.0-RFID Dataopsamling Til-tietokanta: 10 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Dette projekt omhandler opsamling af vægtdata, registration of af identiteter vha. RFID, valtava tieto i en MySQL -tietokanta vha. node-RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application. Viisi metsämiestä:
Vi har en produktionslinje som produrer leverpostej i 200g foliebakker. Alle færdigbagte leverpostejer udstyres efter afføling med et RFID tag in plasticlåget/labelen, som indeholder et unikt ID (UID = Unique Identifier, er en 32 bits kode, 8 hexadecimale karakterer) tunnistetietojen saamiseksi hver enkelt bakke leverpostej. 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 specific krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverpostej til en sper lager leverpostejer til én specificik kunde. Kunderne supermarketskæder:
1. Irma. Vægten på Irmas luksus leverpostej skal holde sig inden +/- 5%, vähintään 190 g ja enintään 210 g.
2. Brugsen. Vægten på Brugsens leverpostej skal holde sig inden +/- 10%, vähintään 180 g ja enintään 220 g.
3. Aldi. Vægten på Aldis alennus leverpostej skal holde sig inden +/- 15%, vähintään 170g ja maksimi 230g.
Der er således følgende sorteringer:
Alue0: alueen ulkopuolella
Alue 1: vähintään 190 g/enintään 210 g
Alue2: vähintään 180 g/enintään 220 g
Alue 3: vähintään 170 g/enintään 230 g
Vaihe 1: Af -tietojen tarkistaminen Vægt Samt -rekisteröintiä varten
Til opsamling af data for vægt, same registering af RFID tags er anvendt fi Arduino MEGA2560 med en RFID-RC522 reader/write. Da vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analog indgang på Arduinoen.
Følgende opstilling er anvendt:
1 tk potterimittari 25k lineart. Yder-benene er tilsluttet hhv. GND og +5V, puolivälissä tai tilsluttet AN0
RFID-RC522 tai trdluttet Arduino-levyt SPI-portti, jossa on seuraava legenda:
SDA -> nasta 53
SCK -> nasta52
MOSI -> pin51
MISO-> nasta50
IRQ -> NC
GND -> GND
RST -> nasta 5
3.3V -> 3.3V
De opsamlede data, hhv. UID ja tiedot, lähetetään serielle port som en komma-separeret tekststreng videre to node node-Red som står for den efterfølgende præsentation on dashboard and lagring in en database.
Vaihe 2: Arduino-ohjelma
I Arduino -ohjelmoitava mustesovellus kirjastolle SPI.h og MFRC522.h ja kun RFID -tekniikka. Käynnistän ohjelmoidun alustavan muuttujan. Der laves in instans af MFRC522. I Setup blokken initialiseres den serielle draindelse, SPI porten og MFRC522. Derefter -skannaus ja RFID -tunnisteet. Ike at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. Jos se on skannausverkko ja UID -tunniste, se sisältää jokaisen nyUID -tunnuksen, joka sisältää UID -verkon. Hvis array nyUID er forskellig from oldUID er der tarle om et now UID som can sendes in på den serielle port. Hvis nyUID og oldUID er ens, er der tarle omme Ume tag and UID'et skal ignore. Hvis der er tarle om et now UID, lähettää UID'et på den serielle port sammen med en læst værdi fra den serielle port. Vertaile skaalareita vertaamalla området 150-250. Data lähettää som en komma-separeret tekststreng. Jos haluat käyttää vanhaa UID = nyUID -tunnusta, voit käyttää koodia ja käyttää sitä RFID -tunnisteella. Funktionen returnerer true hvis array'ne er ens, og false hvis array'ne er forskellige.
#sisältää
#include // Tämä ohjelma skannaa RFID-kortit RDIF-RC522-lukija-/kirjoitustaululla. // UID luetaan, analoginen pin luetaan. Analoginen arvo 0-1023 skaalataan arvoon 150-250. // UID ja analoginen arvo lähetetään pilkuilla erotettuna tekstinä sarjaportissa käyttäen 9600, N, 8, 1. // On huolehdittu siitä, että jokainen UID lähetetään vain kerran peräkkäin, // uusi UID on lähetettävä ennen kuin sama UID voidaan lähettää uudelleen. // Tämä toiminto on toteutettu koodissa vertaamalla matriiseja: oldUID nyUID funktiossa array_cmp (oldUID , nyUID )
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Arvo = 0; Merkkijono StringValue = "0000"; tavu oldUID [4] = {}; tavu nyUID [4] = {};
MFRC522 mfrc522 (SS_PIN, RST_PIN); // Luo MFRC522 -ilmentymä.
mitätön asennus ()
{Serial.begin (9600); // Sarjaliikenteen aloittaminen SPI.begin (); // Käynnistä SPI -väylä mfrc522. PCD_Init (); // Aloita MFRC522}
tyhjä silmukka ()
{// Etsi uusia kortteja, jos (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Valitse yksi korteista, jos (! Mfrc522. PICC_ReadCardSerial ()) {return; } // lataa nyUID UID -tunnisteella (tavu i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // jos oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// lähetä UID -tunniste sarjaporttiin (tavu i = 0; i 1000) {Arvo = 1000; } Arvo = (Arvo / 10) + 150; // lähetä skaalattu analoginen arvo Serial.print (Arvo); // lähetä uusi rivi Serial.println (); // aseta oldUID = nyUID (tavu z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // odota 1 sekunnin viive (1000); }
// vertaa kahta taulukkoa…
boolean array_cmp (tavu a , tavu b ) {bool -testi = true; // testaa jokaisen elementin olevan sama. jos vain yksi ei ole, palauta false (tavu n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // jos tavu ei ole sama, test = false} if (test == true) return true; muuten palauta epätosi; }
Vaihe 3: Solmu-PUNAINEN, Lagring Af Data I -tietokanta
Følgende flow er lavet i node-RED:
COM4 tai serielle kieltää hvor -datamuodot Arduino -piirilevystä. Toiminnot "Split and Get value" ja "Split and Get UID" -jakajan tekstit, jotka on kirjoitettu ja palautettu hhv vægten og UID. Vægten bruges til fremvisning på dashboardet et linechart og en scale. UID -taajuudet ja tekstit. Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vægten er under 170g eller over 230g, dvs i range 0.
Jaa ja hanki arvo:
var output = msg.payload.split (',');
temp = {hyötykuorma: (tuotos [1])}; paluulämpötila;
Jaa ja hanki UID:
var output = msg.payload.split (",");
lämpötila = {hyötykuorma: lähtö [0]}; paluulämpötila;
testi_ääni:
var numero = parseInt (msg.payload);
if (luku> 230 || luku <170) {newMsg = {hyötykuorma: "Alueen ulkopuolella"}; palauta uusi viesti; } else {newMsg = {hyötykuorma: ""}; palauta uusi viesti; }
Funktionen Split string "," indsætter et timestamp, UID og vægten and en database patedb.patelog.
var output = msg.payload.split (","); // jakaa viesti.payload pilkulla taulukkoon
UIDTag = lähtö [0]; // ensimmäinen osa ensimmäiseen asemaan [0] ValueTag = output [1]; // toinen osa toiseen asentoon [1]
var m = {
topic: "INSERT INTO patedb.patelog (aikaleima, UID, paino) ARVOT ('"+uusi päivämäärä (). toISOString ()+"",' "+UIDTag+" "," "+ValueTag+" '); " }; paluu m;
patelog er fi MySQL -tietokanta kielsi som er sat op med følgende -parametrin:
Isäntä: localhost
Portti: 3306
Käyttäjä: root
Tietokanta: patedb
Vaihe 4: Tietokannan suunnittelu
Tietokanta patedb indeholder 4 tabeller
patelog er dataopsamlingstabellen, siirtää tietoja solmun-RED og C# ohjelmalla
ordertable er en tabel som indeholder data om de genemførte ordrer, tilskrives data af C# programmet
asiakassuunnitelma ja rekisteröinti
rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede Ranges.
Vaihe 5: Patelog
Tabellen patelog indeholder folgende 6 kolonner:
pateID (int) er ensisijainen avain ja tulostusautomaatti.
Aikaleima, käyttäjätunnus ja erikoisluvut (med forskellig max længde)
alue Nr er af typen tinyint (beregnes og tilføjes af C# programmet)
orderID er af typen int (orderID tilføjes af C# programmet)
Solmu-PUNAINEN tilkkutila 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
Vaihe 6: Tilattavissa
tilattava indeholder 5 kolonner:
orderID (int) er detele aktuelle ordrenummer
orderQuant (mediumint) er ordens pålydende antal
quantProduced (mediumint) er antal der rent faktisk er produret på ordren. (Tælles af C# programmet)
kommentoi (tinytext) er entuletuel kommentar til ordren.
customerID (int) er aktuelle kundenummer på ordren.
Vaihe 7: Muokattava
customertable indeholder 6 kolonner:
customerID (int) er ensisijainen avain ja auto inc.
nimi, osoite, puhelin, sähköposti (varchar) med forskellig max længde
alueNr (int)
Vaihe 8: Mittausalue
vaihteluväli indeholder 3 kolonner:
rangeNr (int) er ensisijainen avain ja auto inc.
rangeMin (int)
rangeMax (int)
Vaihe 9: C# -ohjelma
Når der produres en ordre leverpostej, er proceduren følgende:
Kundenummer, orderrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i praksis overføres det digitalt from virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. Når en leverpostej er færdigproduceret og låget er den monte) på et transportbånd) Samhørende Værdier af UID og den aktuelle vægt lähettää serielt till node-RED, som viser de opsamlede data in då dashboard 'et. Samtidig skrives timestamp, UID og vægt i en ny række i patedb.patelog tabellen. Da der på nuv tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.
Med ja timerinterval undergersger C# ohjelmoitu 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 produret, 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, can can de opsamlede data and patelog tabellen fremvises ved at trykke på de forskellige knapper i gruppen Update DataGridview. ordertable kan også vises, og der kan søges ordredata på yksilöeller UID'er eller kundedata på individualelle ordrer.
käyttämällä järjestelmää, käyttämällä System. Collections. Generic; käyttämällä System. ComponentModel; käyttämällä System. Dataa; käyttäen System. Drawing; käyttämällä System. Linq; käyttämällä System. Text; käyttämällä System. Threading. Tasks; käyttämällä System. Windows. Forms; käyttämällä MySql. Data. MySqlClient;
nimitila show_data_from_database
{public partial class Form1: Lomake {MySqlConnection connection = new MySqlConnection ("datasource = localhost; käyttäjätunnus = root; password = ''"); int Rivinumero = 0; // Muuttuja pateID -arvon tallentamiseen int RangeNumber = 0; // Muuttuja rangenumeron tallentamiseen int paino = 0; // Muuttuja painon tallentamiseen int OrderNr = 0; // Muuttuja OrderNR: n tallentamiseen int QuantProduced = 0; // Muuttuja tuotetun määrän tallentamiseen int NumberOfRows = 0; // rivien lukumäärä, jossa on nolla.. bool ProdRunning = false; // Muuttuja, joka ilmaisee, onko käynnistys- ja pysäytyspainikkeet aktivoitu int limits = new int [6]; // formatize array int CustomerID; // Muuttuja asiakastunnuksen julkisen lomakkeen tallentamiseen Form1 () {InitializeComponent (); load_table (); // call load_table}
void load_table ()
{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}
yksityinen mitätön SetRowOrder ()
{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Hänen kanavansa on kolonnerin data dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["weight"]. 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; // Hänen kan rækkefølgen af kolonner ændres}
private void GetData_Click (objektin lähettäjä, EventArgs e) // lukee tietokantataulukon ja tilaukset aikaleiman mukaan
{load_table (); }
private void btnRefreshUID_Click (objektin lähettäjä, EventArgs e) //
{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand -komento = uusi MySqlCommand (timeStr, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}
private void btnRefreshValue_Click (objektin lähettäjä, EventArgs e)
{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (paino ALKUPERÄISEKSI);"; MySqlCommand -komento = uusi MySqlCommand (weightSort, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}
private void ChkNullBtn_Click (objektin lähettäjä, EventArgs e)
{if (ProdRunning) {CheckTableForNull (); load_table (); }}
yksityinen mitätön CheckTableForNull ()
{// Tarkista/aseta ajastimen väli vähintään 100 ms int i; int. TryParse (textTimer1. Text, out i); jos (i <100) {timer1. Stop (); i = 100; ajastin 1. väli = i; MessageBox. Show ("Vähimmäisarvo i 100mS"); ajastin 1. Käynnistä (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Tarkista, onko taulukossa tyhjiä rivejä, ja palauttaa rivien määrän muuttujassa: NumberOfRows merkkijono weightStr = ""; string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR ON NULL ORDER pateyd LIMIT 1;"; MySqlCommand -komento = uusi MySqlCommand (chkNull, yhteys); kokeile {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); Sulje (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } lopuksi {if (NumberOfRows! = 0) {try {// Valitsee pienimmän pateID -numeron, jossa alueNr on NULL -merkkijono readID = "SELECT pateID FROM patedb.patelog WHERE rangeNR ON NULL ORDER BET pateid ASC LIMIT 1;"; MySqlCommand cmdID = uusi MySqlCommand (readID, yhteys); {connection. Open (); Rivinumero = (int) cmdID. ExecuteScalar (); //kokonaisluku!! Sulje (); } listPateID. Text = Rivinumero. ToString (); // lukee valitun PateID -numeron // Valitsee valitun rownumber -merkkijonon rivin = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + rivi; MySqlCommand cmdweight = uusi MySqlCommand (lukupaino, yhteys); {connection. Open (); weightStr = (merkkijono) cmdweight. ExecuteScalar (); // Jono !! Sulje (); } paino = int. Parse (weightStr); // muuntaa int txtWeight. Text = paino. ToString (); // tulosta int RangeNumber = 0; if (paino> = rajat [0] && paino = rajat [2] && paino = rajat [4] && paino <= rajat [5]) {AlueNumero = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } QuantProduced = QuantProduced + 1; }}} private void btnStart_Click (objektin lähettäjä, EventArgs e) {if (ProdRunning == false) {int valtest; try {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} catch {MessageBox. Show ("Syötä tuotantotiedot ja paina käynnistyspainiketta."); }
string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+Asiakastunnus;
MySqlCommand cmdtestcustomer = uusi MySqlCommand (testi, yhteys); {connection. Open (); valtest = Muunna. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // palauttaa 0, jos asiakasta ei ole yhteys. Close (); } if (valtest == 1) // jos asiakas on tietokannassa - aloita tuotanto {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = tosi; ajastin1. Käynnistä (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Poikkeus esim.) {MessageBox. Show ("Syötä tuotantotiedot ja paina käynnistyspainiketta."); }} else MessageBox. Show ("Asiakas ei ole tietokannassa, yritä uudelleen"); } // Lukurajat (); }
private void ReadLimits ()
{// Lukee rajat taulukosta, alue 1–3 int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = uusi MySqlCommand (readmin, yhteys); {connection. Open (); limits [laskuri] = (int) cmdmin. ExecuteScalar (); laskuri = laskuri + 1; Sulje (); } // MessageBox. Show (counter. ToString ()); merkkijono readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = uusi MySqlCommand (readmax, yhteys); {connection. Open (); limits [laskuri] = (int) cmdmax. ExecuteScalar (); laskuri = laskuri + 1; Sulje (); }} // silmukan loppu}
yksityinen mitätön UpdateLog ()
{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); merkkijono Järjestys = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+Rivinumero; MySqlCommand updatecmd = uusi MySqlCommand (päivitys, yhteys); kokeile {connection. Open (); updatecmd. ExecuteNonQuery (); Sulje (); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}
private void btnStop_Click (objektin lähettäjä, EventArgs e)
{if (ProdRunning == true) {timer1. Stop (); ProdRunning = epätosi; UpdateOrderTable (); } else {MessageBox. Show ("Tuotantoa ei ole vielä aloitettu. Anna tiedot ja paina käynnistyspainiketta"); }}
private 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 = new MySqlCommand (insert, connection); kokeile {connection. Open (); insertcmd. ExecuteNonQuery (); Sulje (); QuantProduced = 0; } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }}
private void timer1_Tick (objektin lähettäjä, EventArgs e)
{CheckTableForNull (); load_table (); }
private void btnShowOrderTable_Click (objektin lähettäjä, EventArgs e)
{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }} else {MessageBox. Show ("Paina stop to wiev orderTable"); }}
private void btnShowOrderDetails_Click (objektin lähettäjä, EventArgs e)
{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 -komento = uusi MySqlCommand (testi, yhteys); kokeile {connection. Open (); MySqlDataAdapter -sovitin = uusi MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); } yhteys. Sulje (); } else {MessageBox. Show ("Paina stop -painiketta nähdäksesi tilaustiedot"); }}
private void btnShowCustomerDetails_Click (objektin lähettäjä, EventArgs e)
{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. clientID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +" ""); MySqlCommand -komento = uusi MySqlCommand (testi, yhteys); kokeile {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapter. SelectCommand = komento; DataTable dbdataset = uusi DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } saalis (poikkeus esim.) {MessageBox. Show (esim. viesti); }} else {MessageBox. Show ("Paina stop -näppäintä saadaksesi asiakastiedot"); }}}
}
Suositeltava:
EAL - Industry 4.0 GPS -tiedonkeruu Rc -autossa: 4 vaihetta
EAL - Industry 4.0 GPS -tiedonkeruu Rc Car -autossa: Tässä Instructable -ohjelmassa puhumme siitä, miten asennamme GPS -moduulin RC -autoon ja postitamme kerätyt tiedot verkkosivulle helpon valvonnan varmistamiseksi. Olemme aiemmin tehneet ohjeen siitä, miten teimme RC -auton, joka löytyy täältä. Tämä käyttää
EAL- sulautettu - yhdistelmälukko: 4 vaihetta
EAL- Embedded- Yhdistelmälukko: Tämä projekti on yksi kouluprojekti, jonka olen valinnut oppiaineeksi 2.1 C-ohjelmointi EAL: ssa. Tämä on ensimmäinen kerta, kun tein Arduino-projektin ja C-ohjelmoinnin. Tämä on projekti, jossa esitetään yhdistelmälukko. Yhdistelmälukko
EAL- sulautettu sisäilma: 5 vaihetta
EAL-sulautettu sisäilma: Kouluprojektimme tehtävänä oli integroida arduino automaattiseen järjestelmään. Valitsimme tehdä sisäilma -anturin, joka tunnistaa lämpötilan, kosteuden ja desibelin tason sisätiloissa. Porasimme pari reikää kaappiin
EAL - SmartStorage: 3 vaihetta
EAL - SmartStorage: Tämä on Kasper Borger Tuliniusin SmartStorage -projekti
EAL-Industry 4.0-Smart Rocket: 8 vaihetta (kuvilla)
EAL-Industry 4.0-Smart Rocket: Tämä on kouluprojekti, joka on tehty Tanskan Erhversakademiet Lilleb æ lt -yrityksessä. Projekti tehdään luokassa nimeltä "Industri 4.0". Tehtävänä on ottaa käyttöön alan 4.0 automaattinen järjestelmä Järjestelmän pitäisi pystyä