Агуулгын хүснэгт:
- Алхам 1: VUgt Samt бүртгүүлэх Af UID -д зориулсан Аф өгөгдлийг хамруулах
- Алхам 2: Arduino програм
- Алхам 3: Node-RED, Lagring Af Data I мэдээллийн сан
- Алхам 4: Өгөгдлийн сангийн дизайн
- Алхам 5: Пателог
- Алхам 6: Захиалах боломжтой
- Алхам 7: Тохиромжтой
- Алхам 8: Өөрчлөх боломжтой
- Алхам 9: C# програм
Видео: EAL-Industri4.0-RFID Dataopsamling Til мэдээллийн сан: 10 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:05
Төсөлд хамрагдсан хүмүүс бүртгүүлж, бүртгэлээ бүртгүүлж байна. Өгөгдөл, MySQL мэдээллийн сангаас хоцрогдсон RFID. зангилаа-УЛААН, samt fremvisning OG behandling Аф де opsamlede өгөгдөл би et C# програм, би ма хэлбэр EN Windows Form Application. Ой модны аж ахуй эрхлэгч:
Vi har EN produktionslinje som үйлдвэрлэгч leverpostej би 200g foliebakker. Мэдээлэл, RFID хаягийг өөрчилж болно. Да 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 envert lagerposte leverpostejer til тодорхой ойлголт өгөх болно. Өдөр тутмын супермаркетууд:
1. Ирма. Тайлбарыг буцааж англи (Америкийн Нэгдсэн Улс) руу орчуулах Орчуулах +/- 5%, хамгийн багадаа 190 гр, хамгийн ихдээ 210 гр.
2. Брюгсен. Brugsens leverpostej skal holde sig inden to +/- 10%, хамгийн багадаа 180 гр, хамгийн ихдээ 220 гр.
3. Алди. Aldis хямдралтай үнээр +/- 15%, хамгийн багадаа 170 гр, хамгийн ихдээ 230 гр үнээр худалдаж аваарай.
Хичээлийн дараалал:
Range0: хүрээнээс гадуур
1 -р хүрээ: хамгийн багадаа 190г/хамгийн ихдээ 210 гр
Хэмжээ2: хамгийн багадаа 180г/хамгийн ихдээ 220г
3 -р хүрээ: хамгийн багадаа 170 гр/хамгийн ихдээ 230 гр
Алхам 1: VUgt Samt бүртгүүлэх Af UID -д зориулсан Аф өгөгдлийг хамруулах
RFID хаягийг бүртгэх, RFID хаягийг бүртгэх, RFID-RC522 уншигч/зохиолч. Энд ямар ч асуудал байхгүй, жишээ нь, Arduinoen -ийн аналог болон өгөгдлийн симуляторын өгөгдөл.
Дахин тодруулж хэлэхэд:
1 ширхэг потметр 25к шугамтай. Yder-benene er tilsluttet hhv. GND OG +5V, midterbenet Эр tilsluttet AN0
RFID-RC522 нь Arduino самбарыг SPI порт дээр байрлуулсан болно:
SDA -> зүү 53
SCK -> pin52
MOSI -> pin51
MISO-> pin50
IRQ -> NC
GND -> GND
RST -> pin5
3.3V -> 3.3V
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 de to biblioteker SPI.h OG MFRC522.h for at at kundne bruge RFID læseren. Би хувьсагчийг эхлүүлэх програмыг эхлүүлсэн. Der laves en instans af MFRC522. Би Setup blokken initialiseres den serielle forbindelse, SPI porten OG MFRC522. Derefter нь RFID хаягийг сканнердах болно. Учир нь ikke үед sende DET samme UID afsted flere gange efter hinanden, Эр дер lavet EN хожуул kode SOM tjekker нь dette. Сканнер болон UID хаягийг өөрчилж, UID -ийг ачаалах болно. Нэвтрүүлгийн массив нь хуучин UID -ийг хайж олоход чухал үүрэг гүйцэтгэдэг. Hvis nyUID og oldUID er ens, er der tale om samme UID tag og UID'et skal knowes. Энэ нь UID -ийг ашиглахаас өөр аргагүй юм. Тэмдэглэл нь 150-250 хүртэл байдаг. Өгөгдөл SOM EN komma-separeret tekststreng. OldUID = nyUID -ийн үндсэн кодууд, RFID шошго, кодын жагсаалтууд дээр суурилсан.. 2 програмын функц, програм хангамжийн функцууд байдаг. Funktionen returnerer үнэн hvis array'e er ens, og хуурамч hvis array'e er forskellige.
#оруулах
#include // Энэ програм нь RDIF-RC522 уншигч/зохиолчийн самбар ашиглан RFID картуудыг шалгадаг. // UID уншдаг, аналог зүү уншдаг. Аналог утга 0-1023 нь 150-250 хүртэл масштабтай байна. // UID ба аналог утгыг цуваа порт дээр таслалаар тусгаарласан текст хэлбэрээр 9600, N, 8, 1 ашиглан илгээдэг. ижил UID -ийг дахин илгээхээс өмнө байгаа. // Энэ функцийг array_cmp (oldUID , nyUID ) функц дахь oldUID nyUID -ийг харьцуулж кодонд хэрэгжүүлдэг.
constexpr uint8_t RST_PIN = 5;
constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int Утга = 0; String StringValue = "0000"; байт хуучинUID [4] = {}; байт nyUID [4] = {};
MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 жишээ үүсгэх.
хүчингүй тохиргоо ()
{Serial.begin (9600); // Цуваа холболтыг эхлүүлэх SPI.begin (); // SPI автобусыг эхлүүлэх mfrc522. PCD_Init (); // MFRC522 эхлүүлэх}
хоосон давталт ()
{// (! Mfrc522. PICC_IsNewCardPresent ()) {return бол шинэ карт хайх; } // Хэрэв (! Mfrc522. PICC_ReadCardSerial ()) {return; } // nyUID -ийг UID хаягаар ачаална уу (byte i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // if oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// UID хаягийг цуваа порт дээр илгээх (byte i = 0; i 1000) {Value = 1000; } Утга = (Утга / 10) + 150; // масштабтай аналог утгыг илгээх Serial.print (Утга); // newline Serial.println () илгээх; // тохируулах oldUID = nyUID (байт z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // 1 сек хүлээх (1000); }
// 2 массивыг харьцуулах …
boolean array_cmp (байт a , байт b ) {bool тест = үнэн; // элемент бүрийг ижил эсэхийг шалгаарай. хэрэв зөвхөн нэг нь байхгүй бол false (= byte n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // хэрэв байт тэнцүү биш бол test = false} if (test == true) true буцаана; өөрөөр худлаа буцаах; }
Алхам 3: Node-RED, Lagring Af Data I мэдээллийн сан
Følgende flow er lavet i node-RED:
COM4 эх сурвалж нь Arduino самбар дээр өгөгдлийн горимыг тохируулах боломжийг олгодог. Funktionerne "Хуваах ба үнэ цэнийг олж авах" OG "Split and Get UID" задлагчийг текстээр нь буцааж өгөх, HHV vægten OG UID. Хяналтын самбар дээр би график графикийг хэмжиж үзэх боломжтой. UID fremvises болон текст текст. Funktionen test_sound advarer verbalt med sætningen "Хүрээнээс гадуур", 170г -ээс доош 230 гр -аас дээш хэмжээтэй, dvs i хүрээ 0.
Хуваах ба үнэ цэнийг авах:
var output = msg.payload.split (',');
temp = {ачаалал: (гаралт [1])}; буцах температур;
Хуваах ба UID авах:
var output = msg.payload.split (",");
temp = {ачаалал: гаралт [0]}; буцах температур;
туршилтын дуу:
var number = parseInt (msg.payload);
if (тоо> 230 || дугаар <170) {newMsg = {ачааллын ачаалал: "Хүрээнээс гадуур"}; newMsg буцаах; } өөр {newMsg = {ачаалал: ""}; newMsg буцаах; }
Funktionen Split string "," indsætter et timestamp, UID болон бусад мэдээллийн сан patedb.patelog.
var output = 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
Хэрэглэгч: root
Мэдээллийн сан: patedb
Алхам 4: Өгөгдлийн сангийн дизайн
Өгөгдлийн сан patedb indeholder 4 таблер
patelog er dataopsamlingstabellen, tilskrives өгөгдлийн зангилаа-RED og C# programmet
ordertable er en tabel som indeholder data om de genemførte ordrer, tilskrives data af C# programmet
customertable er et kunderegister
rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede range.
Алхам 5: Пателог
Таблетын жагсаалт 6 -р хэсэгт багтсан болно:
pateID (int) Эр үндсэн түлхүүр OG inkrementeres automatisk.
Цагийн тэмдэг, UID & файлыг бичих (med forskellig max længde)
хүрээNr er typen tinyint (C# программын хувьд)
orderID эх бичвэр int (захиалгын ID C# программын хувьд)
Зангилаа-RED tilføjer ikke værdier til kolonnerne rangeNr OG orderID. rangeNr og orderID хөрвүүлэгч NULL тохиргоог хийх, би C# програмыг ашиглах боломжтой
Алхам 6: Захиалах боломжтой
ordertable indeholder 5 колоннер:
orderID (int) er det aktuelle ordrenummer
orderQuant (mediumint) эр ordens pålydende antal
quantProduced (mediumint) компани нь түрээслэх боломжтой. (C# програмтай холбоотой асуудлууд)
сэтгэгдэл (жижиг текст) er en eventuel kommentar til ordren.
customerID (int) захиалга өгөх болно.
Алхам 7: Тохиромжтой
customertable indeholder 6 колоннер:
customerID (int) er үндсэн түлхүүр og auto inc.
нэр, хаяг, утас, имэйл (varchar) med forskellig max længde
хүрээNr (int)
Алхам 8: Өөрчлөх боломжтой
rangetable indeholder 3 колоннер:
rangeNr (int) er key key og auto inc.
rangeMin (int)
rangeMax (int)
Алхам 9: C# програм
Үйлдвэрлэгчид дараах журмыг хэрэгжүүлж байна:
Хичээл, захиалга, зохион байгуулалт нь C# программын онцлог шинж чанарууд юм. pd et transportbånd) UHD-ээс бусад цэгүүд-RED, мэдээллийн самбар дээрх мэдээллийн самбарын мэдээллийн самбарын хяналтын самбар болон бусад хэсэгт UID-ийн цагийн хуваарь, UID-ийн өгөгдлийг хадгалдаг. tidspunkt ikke tilskrives værdier til rangeNr og orderID vil de have værdien NULL.
Мэдээлэл, цаг хугацааны интервал доорх C# програмыг боловсруулсан болно. NEr der er detekteret en række med NULL værdi, beregnes rangeNr og det tilføjes sammen med det aktuelle orderID. Үйлдвэрлэгч, үйлдвэрлэгч, захиалагч нар "зогсох" товчийг дарна уу. Төлбөр тооцоо хийх шаардлагагүй болно. Мэдээлэл, өгөгдөл, өгөгдлийн жагсаалт нь өгөгдөл, өгөгдөл дамжуулах товчлуур, өгөгдлийг шинэчлэх боломжийг олгодог. захиалга өгөх боломжтой, хувь хүний захиалга өгөх боломжтой.
System. Collections. Generic ашиглан; System. ComponentModel ашиглах; System. Data ашиглах; System. Drawing ашиглах; System. Linq ашиглах; System. Text ашиглах; System. Threading. Tasks ашиглах; System. Windows. Forms ашиглах; MySql. Data. MySqlClient ашиглах;
нэрийн орон зайг харуулах_ өгөгдлийн сангаас
{public partial class Form1: Form {MySqlConnection connection = new MySqlConnection ("data source = localhost; username = root; password = ''"); int RowNumber = 0; // pateID утгыг хадгалах хувьсагч int RangeNumber = 0; // Rangeenberber int weight = 0 хадгалах хувьсагч. // int OrderNr = 0 жинг хадгалах хувьсагч. // OrderNR int QuantProduced хадгалах хувьсагч = 0; // Үйлдвэрлэсэн тоо хэмжээг хадгалах хувьсагч int NumberOfRows = 0; // хоосон мөрийн тоо.. bool ProdRunning = false; // Эхлэх ба зогсоох товчлуурууд идэвхжсэн эсэхийг заагч хувьсагч int limit = new int [6]; // int CustomerID массивыг эхлүүлэх; // customerID нийтийн Form1 () {InitializeComponent () -ийг хадгалах хувьсагч; load_table (); // дуудлага load_table}
хүчингүй load_table ()
{MySqlCommand тушаал = шинэ MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY by timestamp DESC;", холболт); {MySqlDataAdapter адаптер = шинэ MySqlDataAdapter () -ийг туршиж үзээрэй; адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); адаптер Шинэчлэх (dbdataset); } барих (Exception ex) {MessageBox. Show (ex. Message); }}
хувийн хоосон SetRowOrder ()
{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Түүний мэдээлэл өгөгдөлGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Түүний мэдээлэл өгөгдөлGridView1. Columns ["UID"]. DisplayIndex = 2; // Түүний мэдээлэл өгөгдөлGridView1. Columns ["weight"]. DisplayIndex = 3; // Түүний мэдээлэл өгөгдөлGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Түүний мэдээлэл өгөгдөлGridView1. Columns ["orderID"]. DisplayIndex = 5; // Түүний кан колоннер Андрес}
private void GetData_Click (объект илгээгч, EventArgs e) // Өгөгдлийн сангийн хүснэгт, захиалгыг Timestamp -аар уншдаг
{load_table (); }
private void btnRefreshUID_Click (объект илгээгч, EventArgs e) //
{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID;"; MySqlCommand тушаал = шинэ MySqlCommand (timeStr, холболт); {MySqlDataAdapter адаптер = шинэ MySqlDataAdapter () -ийг туршиж үзээрэй; адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); адаптер Шинэчлэх (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
private void btnRefreshValue_Click (объект илгээгч, EventArgs e)
{string weightSort = "SELECT * FROM patedb.patelog ORSTER BY CAST (жин бүхэл бүтэн гарын үсэг зурсан);"; MySqlCommand тушаал = шинэ MySqlCommand (weightSort, холболт); {MySqlDataAdapter адаптер = шинэ MySqlDataAdapter () -ийг туршиж үзээрэй; адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); адаптер Шинэчлэх (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}
хувийн void ChkNullBtn_Click (объект илгээгч, EventArgs e)
{if (ProdRunning) {CheckTableForNull (); load_table (); }}
хувийн хоосон CheckTableForNull ()
{// Таймер хоорондын интервалыг хамгийн багадаа 100 мс int i шалгах/тохируулах; int. TryParse (textTimer1. Text, гарч ирсэн i); if (i <100) {timer1. Stop (); би = 100; таймер 1. Интервал = i; MessageBox. Show ("Хамгийн бага утга i 100mS"); таймер 1. Эхлэх (); } өөр {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Хүснэгтэнд null байгаа мөр байгаа эсэхийг шалгаарай, хувьсагч дахь мөрийн тоог буцаана: NumberOfRows string weightStr = ""; string chkNull = "СОНГОХ САНАА (*) FROM patedb.patelog WHERE rangeNR нь NULL ORDER BY pateID LIMIT 1;"; MySqlCommand тушаал = шинэ MySqlCommand (chkNull, холболт); {connection. Open () -ийг туршиж үзээрэй; NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); холбох. Close (); } барих (Exception ex) {MessageBox. Show (ex. Message); } эцэст нь {if (NumberOfRows! = 0) {try {// rangeNr нь NULL string readID = "pateID FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1; MySqlCommand cmdID = шинэ MySqlCommand (readID, холболт); {холболт. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // бүхэл тоо !! холбох. Close (); } listPateID. Text = RowNumber. ToString (); // сонгосон PateID дугаарыг унших // Сонгосон дугаарын мөрийн жинг сонгоно = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + мөр; MySqlCommand cmdweight = шинэ MySqlCommand (унших жин, холболт); {холболт. Open (); weightStr = (мөр) cmdweight. ExecuteScalar (); // мөр !! холбох. Close (); } жин = int. Parse (weightStr); // int txtWeight. Text = weight. ToString () руу хөрвүүлэх; // хэвлэх int RangeNumber = 0; if (жин> = хязгаар [0] && жин = хязгаар [2] && жин = хязгаар [4] && жин <= хязгаар [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } барих (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} хувийн void btnStart_Click (объект илгээгч, EventArgs e) {if (ProdRunning == false) {int valtest; {CustomerID = int. Parse (txtCustomerNr. Text) оролдоно уу; // read customerID} catch {MessageBox. Show ("Үйлдвэрлэлийн өгөгдлийг оруулаад 'эхлэх' товчийг дарна уу."); }
string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+CustomerID;
MySqlCommand cmdtestcustomer = шинэ MySqlCommand (тест, холболт); {холболт. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // харилцагч холболт байхгүй бол 0 буцаана. Close (); } if (valtest == 1) // хэрэв үйлчлүүлэгч мэдээллийн санд байгаа бол - үйлдвэрлэлээ эхлүүлэх {оролдох {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = үнэн; таймер 1. Эхлэх (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Үйлдвэрлэлийн өгөгдлийг оруулаад 'эхлэх' товчийг дарна уу."); }} else MessageBox. Show ("Хэрэглэгч мэдээллийн санд байхгүй байна, дахин оролдоно уу"); } // ReadLimits (); }
хувийн хоосон ReadLimits ()
{// Хязгаарыг унших боломжтой, 1 -ээс 3 хүртэлх int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "SELECT rangeMin FROM patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = шинэ MySqlCommand (readmin, холболт); {холболт. Open (); хязгаар [тоолуур] = (int) cmdmin. ExecuteScalar (); тоолуур = тоолуур + 1; холбох. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = шинэ MySqlCommand (readmax, холболт); {холболт. Open (); хязгаар [тоолуур] = (int) cmdmax. ExecuteScalar (); тоолуур = тоолуур + 1; холбох. Close (); }} // давталтын төгсгөл}
хувийн хоосон UpdateLog ()
{// UPDATE rangeNR & orderID мөр 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 (); холбох. Close (); } барих (Exception ex) {MessageBox. Show (ex. Message); }}
private void btnStop_Click (объект илгээгч, EventArgs e)
{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 (); холбох. Close (); QuantProduced = 0; } барих (Exception ex) {MessageBox. Show (ex. Message); }}
private void timer1_Tick (объект илгээгч, EventArgs e)
{CheckTableForNull (); load_table (); }
private void btnShowOrderTable_Click (объект илгээгч, EventArgs e)
{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", холболт); {MySqlDataAdapter адаптер = шинэ MySqlDataAdapter () -ийг туршиж үзээрэй; адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; адаптер Шинэчлэх (dbdataset); } барих (Exception ex) {MessageBox. Show (ex. Message); }} өөр {MessageBox. Show ("Stop to wiev orderTable" дээр дарна уу)); }}
private void btnShowOrderDetails_Click (объект илгээгч, 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 тушаал = шинэ MySqlCommand (тест, холболт); {connection. Open () -ийг туршиж үзээрэй; MySqlDataAdapter адаптер = шинэ MySqlDataAdapter (); адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; адаптер Шинэчлэх (dbdataset); } барих (Exception ex) {MessageBox. Show (ex. Message); } холболт. Close (); } else {MessageBox. Show ("Захиалгын дэлгэрэнгүйг харахын тулд зогсоох дээр дарна уу"); }}
private void btnShowCustomerDetails_Click (объект илгээгч, 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 тушаал = шинэ MySqlCommand (тест, холболт); {MySqlDataAdapter адаптер = шинэ MySqlDataAdapter () -ийг туршиж үзээрэй; адаптер. SelectCommand = тушаал; DataTable dbdataset = шинэ DataTable (); адаптер Дүүргэх (dbdataset); BindingSource bsource = шинэ BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; адаптер Шинэчлэх (dbdataset); } барих (Exception ex) {MessageBox. Show (ex. Message); }} өөр {MessageBox. Show ("Хэрэглэгчийн дэлгэрэнгүй мэдээллийг харахын тулд зогсоох дээр дарна уу"); }}}
}
Зөвлөмж болгож буй:
Утасгүй мэдээллийн самбар (Bluetooth): 5 алхам (зурагтай)
Утасгүй мэдээллийн самбар (Bluetooth): Бүх зүйл дижитал хэлбэрт шилжсэн орчин үеийн ертөнцөд уламжлалт зарлалын самбар яагаад шинэ дүр төрхтэй болдоггүй юм бэ? Тиймээс Bluetooth удирдлагатай мэдэгдлийн самбарыг маш энгийн байдлаар хийх боломжийг олгодог. коллежид байдаг шиг
IoT Хос температурын мэдээллийн сервер: 12 алхам (зурагтай)
IoT Хос температурын өгөгдлийн сервер: Энэ бол зааварчилгаа бичих миний анхны оролдлого тул надад амар байгаарай! Хэрэв та үүнийг тийм ч муу биш гэж бодож байгаа бол анх удаа зохиогчдын уралдаанд миний төлөө саналаа өгөөрэй, энэ бол хүлэмжинд байгаа 2 температурыг алсаас хянах миний Lock-Down төсөл юм
Аляскийн мэдээллийн сан: 5 алхам (зурагтай)
Alaska Datalogger: Аляска нь цаг уурын өөрчлөлтийг ахиулах ирмэг дээр байна. Нүүрсний уурхайн төрөл бүрийн канарууд бүхий хүн амын гар хүрээгүй ландшафтын өвөрмөц байр суурь нь судалгааны олон боломжийг олгодог. Манай найз Монти бол археологич бөгөөд
UCL-IIOT-Мэдээллийн сан, зангилааны улаан дохиоллын систем: 7 алхам
UCL-IIOT-Мэдээллийн бааз, зангилааны улаан дохиоллын систем: Энэхүү бүтцийн зорилго нь Arduino-г Node-red болон мэдээллийн баазтай холбох талаар заахад өгөгдлийг бүртгэж, дараа нь ашиглахын тулд цуглуулах боломжтой болно. 5 өгөгдлийн дугаар гаргадаг энгийн arduino дохиоллын систем, тус бүр нь тусдаа
Ус хөргөх насос-усан сан-радиатор (rasperry Pie 2-B): 3 алхам (зурагтай)
Усан хөргөлтийн насос-усан сан-радиатор (rasperry Pie 2-B): Сайн байна уу.Юуны өмнө халуун цавуу оролцуулахгүй, 3D хэвлэх, лазер огтлох, cnc, үнэтэй багаж хэрэгсэл байхгүй. эд зүйлс. Хөнгөн цагаан, нийлэг хийхэд тохиромжтой ямар нэгэн зүйлийг сийлэх, элс, цооног өрөмдөх зориулалттай хос үзүүр бүхий өрмийн машин