Satura rādītājs:
- 1. solis: Af datu samplēšana Vægt Samt reģistrēšanai Af UID
- 2. darbība: Arduino programma
- 3. darbība: mezgls SARKANS, Lagring Af Data I datu bāze
- 4. solis: datu bāzes izveide
- 5. solis: Patelog
- 6. solis: pasūtāms
- 7. darbība: pielāgojama
- 8. darbība: diapazona tabula
- 9. solis: C# programma
Video: EAL-Industri4.0-RFID datu paraugu ņemšanas datu bāze: 10 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Dette projekt omhandler opsamling af vægtdata, registrationring af identiteter vha. RFID, satraucoši dati un lv MySQL datu bāze. mezgls-RED, samt fremvisning og behandling af de opsamlede data i et C# program i form af en Windows Form Application. Iepriekšējais mežsaimnieks:
Vi har en produktionslinje som producents leverpostej i 200g foliebakker. Alle færdigbagte leverpostejer udstyres efter afkø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), lai ievadītu identifikāciju af 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 specificikt krav færdigvægten, bruges UID tagget til at knytte hver enkelt leverpostej til en specifikācija lagerlok, leverpostejer til én specificik kunde. Kunderne er supermarkedskæder:
1. Irma. Vægten på Irmas luksus leverpostej skal holde sig inden par +/- 5%, vismaz 190g og maksimum 210g.
2. Brugsen. Vāgten på Brugsens leverpostej skal holde sig inden par +/- 10%, vismaz 180g un maksimums 220g.
3. Aldi. Vægten på Aldis atlaide leverpostej skal holde sig inden par +/- 15%, altså minimums 170g og maksimum 230g.
Der er således følgende sorteringer:
Diapazons0: ārpus diapazona
Diapazons 1: vismaz 190 g/maksimums 210 g
Diapazons2: vismaz 180 g/maksimums 220 g
Diapazons 3: vismaz 170 g/maksimums 230 g
1. solis: Af datu samplēšana Vægt Samt reģistrēšanai Af UID
Til opsamling af data for vægt, samt registreering af RFID tags er anvendt lv Arduino MEGA2560 un lv RFID-RC522 lasītājs/rakstītājs. Da vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analog indgang på Arduinoen.
Labākā opstilling er anvendt:
1 st. Potmetrs 25k lineārt. Yder-benene er tilsluttet hhv. GND og +5V, vidējais spiediens vai tilsluttet AN0
RFID-RC522 ir pieejams Arduino dēļu SPI portam, kas pieejams tālāk:
SDA -> 53. tapa
SCK -> pin52
MOSI -> pin51
MISO-> pin50
IRQ -> NC
GND -> GND
RST -> pin5
3.3V -> 3.3V
De opsamlede dati, hhv. UID un tas tiek nosūtīts, izmantojot seriālo portu, kas ir komatiski atdalīts teksta vidē līdz mezglam-Red som står for den efterfølgende præsentation på et dashboard og laringing en en database.
2. darbība: Arduino programma
I Arduino programmet inklteres de to biblioteker SPI.h og MFRC522.h for at kunne bruge RFID læseren. I starten af programmet initialiseres de anvendte mainīgais. Der laves en instans af MFRC522. I Setup blokken Initialeres den serielle aizliegts, SPI porten og MFRC522. Derefter skenēšana pēc RFID tagiem. Par ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. Nerādot skenēšanas tīklu un UID tagus, tiek noņemts jebkāds nyUID, izmantojot detalizētu UID. Hvis masīvs nyUID vai forskellig no oldUID er der tale om et now UID som kan sendes på den serielle port. Hvis nyUID og oldUID er ens, er der pasaku om samme UID tag un UID'et skal ignorē. Hvis der er tale om et now UID, nosūta 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. Dati nosūta som en komma-separeret tekststreng. Dažos gadījumos OldUID = nyUID, kā arī kods un informācija par RFID tagu. Šī funkcija tiek izmantota, lai programmētu 2 masīvus. Funkcionāla atgriešanās patiesā hvis array'ne er ens, og false hvis array'ne er forskellige.
#iekļaut
#include // Šī programma skenē RFID kartes, izmantojot RDIF-RC522 lasītāja/rakstītāja dēli. // UID tiek nolasīts, analogais pin tiek nolasīts. Analogā vērtība 0-1023 ir mērogota līdz 150-250. // UID un analogā vērtība tiek nosūtīta kā komatatdalīts teksts seriālajā portā, izmantojot 9600, N, 8, 1. // Ir rūpējies, lai katrs UID tiktu nosūtīts tikai vienu reizi pēc kārtas, // jauns UID klāt, pirms to pašu UID var nosūtīt vēlreiz. // Šī funkcija tiek ieviesta kodā, salīdzinot masīvus: oldUID nyUID funkcijā array_cmp (oldUID , nyUID )
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 53; int sensorsPin = A0; int Vērtība = 0; String StringValue = "0000"; baits oldUID [4] = {}; baits nyUID [4] = {};
MFRC522 mfrc522 (SS_PIN, RST_PIN); // Izveidot MFRC522 instanci.
anulēts iestatījums ()
{Sērijas sākums (9600); // Sāciet seriālo sakaru SPI.begin (); // Uzsākt SPI kopni mfrc522. PCD_Init (); // Uzsākt MFRC522}
tukša cilpa ()
{// Meklējiet jaunas kartes, ja (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // Izvēlieties vienu no kartēm, ja (! Mfrc522. PICC_ReadCardSerial ()) {return; } // ielādēt nyUID ar UID tagu (baits i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // ja oldUID nyUID ja (! array_cmp (oldUID, nyUID)) {// nosūtīt UID tagu seriālajā portā (baits i = 0; i 1000) {Vērtība = 1000; } Vērtība = (Vērtība / 10) + 150; // nosūtīt mērogotu analogo vērtību Serial.print (Value); // sūtīt jaunu līniju Serial.println (); // iestatīt oldUID = nyUID (baitam z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // pagaidiet 1 sekundes aizkavi (1000); }
// salīdziniet 2 masīvus …
Būla masīvs_cmp (baits a , baits b ) {bool tests = true; // pārbaudiet, vai katrs elements ir vienāds. ja tikai viens nav, atgrieziet false par (baits n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // ja baits nav vienāds, tests = nepatiess} ja (tests == patiess) atgriežas patiess; cits atgriežas nepatiess; }
3. darbība: mezgls SARKANS, Lagring Af Data I datu bāze
Mēness-sarkanā plūsma
COM4 ir aizliegts izmantot Arduino paneļa datu modifikācijas. Funkcijas "Split and Get value" un "Split and Get UID" sadalītāja teksta teksts tiek parādīts komatā un atgriežas, jo tas ir redzams un UID. Skatiet informāciju par informācijas paneli un lineāru diagrammu un mērogu. UID fremvises un tekstfelt. Funkcijas test_sound advarer verbalt med sætningen "Out of range", hvis vægten er under 170g eller over 230g, dvs i range 0.
Sadalīt un iegūt vērtību:
var izeja = msg.payload.split (',');
temp = {lietderīgā slodze: (izvade [1])}; atgriešanās temperatūra;
Sadalīt un iegūt UID:
var izeja = msg.payload.split (",");
temp = {lietderīgā slodze: izvade [0]}; atgriešanās temperatūra;
testa_skaņa:
var numurs = parseInt (msg.payload);
if (skaitlis> 230 || skaitlis <170) {newMsg = {lietderīgā slodze: "Ārpus diapazona"}; atgriezt newMsg; } else {newMsg = {payload: ""}; atgriezt newMsg; }
Funkcija Sadalīta virkne "," indikators un laika zīmogs, UID un dati un datu bāzes patedb.patelog.
var izeja = msg.payload.split (","); // sadaliet msg.payload ar komatu masīvā
UIDTag = izvade [0]; // pirmā daļa pirmajā pozīcijā [0] ValueTag = output [1]; // otrā daļa otrajā pozīcijā [1]
var m = {
tēma: "INSERT INTO patedb.patelog (laika zīmogs, UID, svars) VALUES ('"+jauns datums (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; atgriezties m;
patelog er lv MySQL datubāze aizliedz som er sat op med følgende parametru:
Saimnieks: localhost
Osta: 3306
Lietotājs: root
Datu bāze: patedb
4. solis: datu bāzes izveide
Databasen patedb indeholder 4 tabeller
patelog er dataopsamlingstabellen, ļauj iegūt datus no mezgla-RED og C# programmet
ordertable er en tabel som indeholder data om de genemførte ordrer, tilskrives data af C# programmet
pielāgojamas tiesības un reģistrs
rangetable er en tabel som indeholder grænseværdierne de i C# programmet benyttede range.
5. solis: Patelog
Tabellen patelog indeholder folgende 6 kolonner:
pateID (int) er primārā atslēga un tintes automātiskais.
Laika zīmogs, UID un citi tipi varchar (med forskellig max længde)
rangeNr er af typen tinyint (beregnes og tilføjes af C# programmet)
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 and detektere de rækker som skal tilskrives værdier for rangeNr og orderID
6. solis: pasūtāms
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 produret på ordren. (Tælles af C# programmet)
komentārs (tinytext) er en eventuel kommentar til ordren.
customerID (int) er det aktuelle kundenummer på ordren.
7. darbība: pielāgojama
customertable indeholder 6 kolonner:
customerID (int) er primārā atslēga un auto inc.
vārds, adrese, tālrunis, e -pasts (varchar) med forskellig max længde
diapazonsNr (int)
8. darbība: diapazona tabula
rangetable indeholder 3 kolonner:
rangeNr (int) er primārā atslēga un auto inc.
diapazonsMin (int)
rangeMax (int)
9. solis: C# programma
Når der produces en ordre leverpostej, er Procedur følgende:
Kundenummer, ordrenummer, ordreantal og en eventuel commentar indtastes i C# programmet (i prakses overføres det digitalt no virksomhedens ordresystem. Produktionen startes nu ved tryk på 'start'- knappen. Når en leverpostej er færdigproduceret og lågeten den monte 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 tabellen. Da der på nuv. tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.
Med et timerinterval underø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 producents, 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å individueller UID'er eller kundedata på individuelle ordrer.
izmantojot System; izmantojot System. Collections. Generic; izmantojot System. ComponentModel; izmantojot System. Data; izmantojot System. Drawing; izmantojot System. Linq; izmantojot System. Text; izmantojot System. Threading. Tasks; izmantojot System. Windows. Forms; izmantojot MySql. Data. MySqlClient;
vārdtelpa show_data_from_database
{publiska daļēja klase Form1: veidlapa {MySqlConnection connection = new MySqlConnection ("datasource = localhost; lietotājvārds = root; parole = ''"); int Rindas numurs = 0; // Mainīgais pateID vērtības glabāšanai int RangeNumber = 0; // Mainīgais lieluma skaitļa glabāšanai int weight = 0; // Mainīgais svara uzglabāšanai int OrderNr = 0; // Mainīgais OrderNR uzglabāšanai int QuantProduced = 0; // Mainīgais saražotā daudzuma uzglabāšanai int NumberOfRows = 0; // rindu skaits ar nullēm.. bool ProdRunning = false; // Mainīgais, kas norāda, vai start & stop pogas ir aktivizētas int limits = new int [6]; // inicializēt masīvu int CustomerID; // Mainīgais, lai uzglabātu customerID public Form1 () {InitializeComponent (); load_table (); // zvanu ielādes_tabula}
void load_table ()
{MySqlCommand komanda = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", savienojums); pamēģini {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void SetRowOrder ()
{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Viņas kan rækkefølgen af kolonner ændres dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Viņas kan rækkefølgen af kolonner ændres dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Viņas kan rækkefølgen af kolonner ændres dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Viņas kan rækkefølgen af kolonner ændres dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Viņas kan rækkefølgen af kolonner ændres dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Viņas kan rækkefølgen af kolonner ændres}
private void GetData_Click (objekta sūtītājs, EventArgs e) // Nolasa datu bāzes tabulu un pasūtījumus pēc laika zīmes
{ielādes_tabula (); }
private void btnRefreshUID_Click (objekta sūtītājs, EventArgs e) //
{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand komanda = new MySqlCommand (timeStr, savienojums); pamēģini {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void btnRefreshValue_Click (objekta sūtītājs, EventArgs e)
{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (svars KĀ PARAKSTĪTS INTEGER);"; MySqlCommand komanda = new MySqlCommand (weightSort, savienojums); pamēģini {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void ChkNullBtn_Click (objekta sūtītājs, EventArgs e)
{if (ProdRunning) {CheckTableForNull (); load_table (); }}
private void CheckTableForNull ()
{// Pārbaudīt/iestatīt taimera intervālu vismaz 100 ms int i; int. TryParse (textTimer1. Text, out i); ja (i <100) {timer1. Stop (); i = 100; taimeris1. Intervāls = i; MessageBox. Show ("Minimālā vērtība i 100mS"); taimeris1. Sākt (); } cits {taimeris1. Intervāls = i; } textTimer1. Text = taimeris1. Interval. ToString (); // Pārbaudiet, vai tabulā ir pieejamas rindas ar nulli, atgriež mainīgo rindu skaitu: NumberOfRows string weightStr = ""; string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR IR NULL ORDER BET pateid LIMIT 1;"; MySqlCommand komanda = new MySqlCommand (chkNull, savienojums); pamēģini {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); savienojums. Aizvērt (); } catch (Exception ex) {MessageBox. Show (ex. Message); } beidzot {if (NumberOfRows! = 0) {try {// Atlasa zemāko pateID skaitli, kur diapazonsNr ir NULL virkne readID = "SELECT pateID FROM patedb.patelog WHERE rangeNR NULL ORDER BY pateid ASC LIMIT 1;"; MySqlCommand cmdID = jauns MySqlCommand (lasīšanas ID, savienojums); {connection. Open (); Rindas numurs = (int) cmdID. ExecuteScalar (); //vesels skaitlis!! savienojums. Aizvērt (); } listPateID. Text = Rindas numurs. ToString (); // nolasīt izvēlēto PateID numuru // Atlasa svaru no atlasītās rindas numura virknes rindas = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + rinda; MySqlCommand cmdweight = jauns MySqlCommand (lasīšanas svars, savienojums); {connection. Open (); weightStr = (virkne) cmdweight. ExecuteScalar (); // Stīga !! savienojums. Aizvērt (); } svars = int. Pars (weightStr); // pārvērst par int txtWeight. Text = svars. ToString (); // drukāt int RangeNumber = 0; ja (svars> = ierobežojumi [0] && svars = ierobežojumi [2] && svars = ierobežojumi [4] && svars <= ierobežojumi [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } catch (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} private void btnStart_Click (objekta sūtītājs, EventArgs e) {if (ProdRunning == false) {int valtest; try {CustomerID = int. Parse (txtCustomerNr. Text); // lasīt klientu ID} catch {MessageBox. Show ("Ievadiet ražošanas datus un nospiediet pogu" Sākt "."); }
string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+Klienta ID;
MySqlCommand cmdtestcustomer = jauns MySqlCommand (tests, savienojums); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // atgriež 0, ja klientam nepastāv savienojums. Aizvērt (); } if (valtest == 1) // ja klients pastāv datu bāzē - sāciet ražošanu {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = taisnība; taimeris1. Sākt (); textTimer1. Text = taimeris1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Ievadiet ražošanas datus un nospiediet pogu" Sākt "."); }} cits MessageBox. Show ("Klients nav datu bāzē, mēģiniet vēlreiz"); } // Lasīšanas ierobežojumi (); }
private void ReadLimits ()
{// Nolasa ierobežojumus no diapazona tabulas, diapazons no 1 līdz 3 int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = jauns MySqlCommand (readmin, savienojums); {connection. Open (); limits [skaitītājs] = (int) cmdmin. ExecuteScalar (); skaitītājs = skaitītājs + 1; savienojums. Aizvērt (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = jauns MySqlCommand (readmax, savienojums); {connection. Open (); limits [skaitītājs] = (int) cmdmax. ExecuteScalar (); skaitītājs = skaitītājs + 1; savienojums. Aizvērt (); }} // beigas cilpai}
private void UpdateLog ()
{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); virkne Kārtība = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+Rindas numurs; MySqlCommand updatecmd = jauns MySqlCommand (atjauninājums, savienojums); pamēģini {connection. Open (); updatecmd. ExecuteNonQuery (); savienojums. Aizvērt (); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void btnStop_Click (objekta sūtītājs, EventArgs e)
{if (ProdRunning == true) {timer1. Stop (); ProdRunning = nepatiess; UpdateOrderTable (); } else {MessageBox. Show ("Ražošana vēl nav sākta. Ievadiet datus un nospiediet pogu" Sākt ""); }}
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 = jauns MySqlCommand (ievietot, savienojums); pamēģini {connection. Open (); insertcmd. ExecuteNonQuery (); savienojums. Aizvērt (); QuantProduced = 0; } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void timer1_Tick (objekta sūtītājs, EventArgs e)
{CheckTableForNull (); load_table (); }
private void btnShowOrderTable_Click (objekta sūtītājs, EventArgs e)
{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", savienojums); pamēģini {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Nospiediet stop, lai saprastu orderTable"); }}
private void btnShowOrderDetails_Click (objekta sūtītājs, EventArgs e)
{if (ProdRunning == false) {string test = ("SELECT patedb.ordertable.orderID, orderQuant, quantProduced, komentārs, customerID FROM patedb.ordertable INNER JOIN patedb.patelog ON ON patedb.patelog.orderID = patedb.ordertable.orderID WHERE patedb.patelog. UID = '" + txtShowOrderDetails. Text +" ""); MySqlCommand komanda = new MySqlCommand (tests, savienojums); pamēģini {connection. Open (); MySqlDataAdapter adapteris = jauns MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); } savienojums. Aizvērt (); } else {MessageBox. Show ("Nospiediet stop, lai apskatītu pasūtījuma informāciju"); }}
private void btnShowCustomerDetails_Click (objekta sūtītājs, 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. customerID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +" ""); MySqlCommand komanda = new MySqlCommand (tests, savienojums); pamēģini {MySqlDataAdapter adapter = new MySqlDataAdapter (); adapteris. SelectCommand = komanda; DataTable dbdataset = new DataTable (); adapter. Fill (dbdataset); BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapteris. Atjaunināt (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Nospiediet stop, lai uzzinātu informāciju par klientu"); }}}
}
Ieteicams:
DFPlayer balstīts audio paraugu ņemšanas līdzeklis ar kapacitatīviem sensoriem: 9 soļi
DFPlayer balstīts audio paraugu ņemšanas iekārta ar kapacitatīviem sensoriem: Ievads Pēc tam, kad esmu eksperimentējis ar dažādu sintezatoru izveidi, es nolēmu izveidot audio paraugu ņemšanas ierīci, kas bija viegli atkārtojama un lēta. Lai būtu laba skaņas kvalitāte (44,1 kHz) un pietiekama atmiņas ietilpība, DFPlayer mod
Darbības sensori atsevišķiem paraugu ņemšanas sūkņiem: 3 soļi
Individuālo paraugu ņemšanas sūkņu darbības sensori: es izveidoju sistēmu, lai kontrolētu paraugu ņemšanas sūkņu labu darbību indivīdiem
RTL-SDR tiešās paraugu ņemšanas režīms: 3 soļi
RTL-SDR tiešās paraugu ņemšanas režīms: daudzi dongļi nevar izmantot frekvences, kas ir zemākas par 30 MHz, tomēr dažas ierīces ir iespējams modificēt, lai to izdarītu, izmantojot metodes izsaukuma tiešo paraugu ņemšanu. Tiešā paraugu ņemšanā mēs izmantojam signālu tieši uz dongļu smadzenēm, efektīvi apejot t
Demonstrācijas automātiskais paraugu ņemšanas līdzeklis: 6 soļi
Demonstrācijas automātiskais paraugu ņemšanas līdzeklis: šī pamācība tika izveidota, izpildot Dienvidfloridas universitātes Makecourse projekta prasības (www.makecourse.com)
Paraugu ņemšanas ātrums/pamācība: 8 soļi (ar attēliem)
Izlases ātrums/pamācības pamācības: Es vēlos izveidot izglītojošu projektu, kas demonstrē aizstājvārdus (un izlases likmes) un ir paredzēts ievietot vietnē kā resursu studentiem, kuri mācās par aizstājēju