فهرست مطالب:
- مرحله 1: نمونه برداری از داده های Af برای Vægt Samt Registrering Af UID
- مرحله 2: برنامه آردوینو
- مرحله 3: Node-RED ، Lagring Af Data I Database
- مرحله 4: طراحی پایگاه داده
- مرحله 5: Patelog
- مرحله 6: قابل سفارش
- مرحله 7: قابل سفارش است
- مرحله 8: قابل کشت
- مرحله 9: برنامه C#
تصویری: EAL-Industri4.0-RFID Dataopsamling پایگاه داده Til: 10 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
Dette projekt omhandler opsamling af vægtdata ، ثبت نام در هویت خود. RFID ، تأخیر در داده ها و پایگاه داده MySQL vha. node-RED ، می توانید از داده ها و برنامه C# در برنامه فرم Windows استفاده کنید. Vi forestiller os følgende:
Vi har en produktionslinje som productrer leverpostej i 200g foliebakker. پس از پیاده سازی و برچسب RFID و پلاستیک ، برچسب ، نامشخص و شناسه unikt (UID = شناسه منحصر به فرد ، er en 32 bit code، 8 hexadecimale karakterer) برای 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 enkelt leverpostej tig، leverpostej tajg، leverpostej، leverpostej 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 مرتب کننده:
محدوده 0: خارج از محدوده
محدوده 1: حداقل 190 گرم/حداکثر 210 گرم
محدوده 2: حداقل 180 گرم/حداکثر 220 گرم
محدوده 3: حداقل 170 گرم/حداکثر 230 گرم
مرحله 1: نمونه برداری از داده های Af برای 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 analog indgang på Arduinoen.
Følgende opstilling er anvendt:
قابلمه 1 متر 25 خط خطی. 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:
SDA -> پین 53
SCK -> pin52
MOSI -> pin51
MISO-> pin50
IRQ -> NC
GND -> GND
RST -> pin5
3.3V -> 3.3V
De opsamlede data، for hhv. UID æ ﺎ ، port port portﺎ port port en en en en en n n n Red Red Red Red Red Red Red Red Red for for for for dash dash dash dash dash dash dash
مرحله 2: برنامه آردوینو
من آردوینو را به biblioteker SPI.h و MFRC522.h برای kunne bruge RFID l inkseren اضافه کردم. من از متغیر اولیه برنامه نویسی متغیر شروع می کنم. Der laves en instans af MFRC522. I Setup blokken initialiseres den serielle forbindelse، SPI porten og MFRC522. پس از برچسب های RFID ، اسکن کننده را اسکن می کند. برای ikke at sende det samme UID afsted flere gange efter hinanden، er der lavet en stump kode som tjekker for dette. N tagr der er scannet et UID برچسب nyUID med net netop læste UID را بارگیری می کند. Hvis array nyUID er forskellig fra oldUID er der tale om and nyt UID som kan sendes på den serielle port. Hvis nyUID و oldUID er ens ، er der tale om samme UID tag و UID'et skal ignoreres. 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 و همچنین در تگ RFID استفاده کنید. عملکردهای بازگشتی واقعی hvis array'ne er ens ، و false hvis array'ne er forskellige.
#عبارتند از
#include // این برنامه با استفاده از برد خواننده/نویسنده RDIF-RC522 کارت های RFID را اسکن می کند. // UID خوانده می شود ، یک پین آنالوگ خوانده می شود. مقدار آنالوگ 0-1023 تا 150-250 مقیاس بندی می شود. // مقدار UID و آنالوگ بصورت متن جداگانه با کاما بر روی پورت سریال با استفاده از 9600 ، N ، 8 ، 1. ارسال می شود. // دقت شده است که فقط هر 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.
void setup ()
{Serial.begin (9600) ؛ // راه اندازی ارتباط سری SPI.begin ()؛ // شروع گذرگاه SPI mfrc522. PCD_Init ()؛ // راه اندازی MFRC522}
حلقه خالی ()
{// اگر (! mfrc522. PICC_IsNewCardPresent ()) {return؛ } // اگر (! 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 را برای (byte n = 0؛ n <4؛ n ++) {if (a [n]! = b [n]) test = false؛ // اگر در بایت برابر نباشد ، test = false} if (test == true) true برگرداند ؛ در غیر این صورت false false؛ }
مرحله 3: Node-RED ، Lagring Af Data I Database
Følgende flow er lavet i node-RED:
COM4 er den serielle forbidelse hvor modtages data fra Arduino boardet. عملکرد "Split and Get value" و "Split and Get UID" splitter teksstrengen ved kommaet and returnere hhv vægten og UID. Vægten با استفاده از خط داشبورد و خط مقیاس و در مقیاس آن را خراب می کند. UID به صورت متنی و متن را کنترل می کند. Funktionen test_sound advarer verbalt med sætningen "خارج از محدوده" ، hvis vægten er under 170g eller over 230g، dvs i range 0.
تقسیم و دریافت ارزش:
var output = msg.payload.split ('،')؛
temp = {payload: (خروجی [1])} ؛ دمای بازگشت ؛
تقسیم و دریافت UID:
var output = msg.payload.split ("،")؛
temp = {payload: output [0]}؛ دمای بازگشت ؛
تست_صوت:
var number = parseInt (msg.payload)؛
if (number> 230 || number <170) {newMsg = {payload: "خارج از محدوده"}؛ بازگشت newMsg؛ } else {newMsg = {payload: ""}؛ بازگشت 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 = {
topic: "INSERT INTO patedb.patelog (timestamp، UID، weight) VALUES ('"+تاریخ جدید (). toISOString ()+"'،" "+UIDTag+" '، ""+ValueTag+"')؛" }؛ بازگشت m؛
patelog er en پایگاه داده MySQL منع استفاده از پارامترهای پیش فرض:
میزبان: localhost
بندر: 3306
کاربر: root
پایگاه داده: patedb
مرحله 4: طراحی پایگاه داده
فهرست بندی کننده دارنده اطلاعات پایگاه داده patedb 4
patelog er dataopsamlingstabellen، tilskrives data af node-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 C# programmet benyttede range.
مرحله 5: Patelog
Tabellen patelog indeholder folgende 6 kolonner:
pateID (int) er کلید اصلی و inkrementeres automatisk.
Timestamp، UID & vægt er af typen 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 خاکورزش 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.
customerID (int) er det aktuelle kundenummer på ordren.
مرحله 7: قابل سفارش است
customertable indeholder 6 kolonner:
مشتری اصلی (int) er کلید اصلی و خودکار inc.
نام ، آدرس ، تلفن ، ایمیل (varchar) med forskellig max længde
محدوده شماره (int)
مرحله 8: قابل کشت
صاحب دار قابل فروش 3 kolonner:
rangeNr (int) er کلید اصلی و خودکار inc.
rangeMin (int)
rangeMax (int)
مرحله 9: برنامه C#
Når der productionres en ordre leverpostej ، er proceduren følgende:
Kundenummer، ordrenummer، ordreantal og en eventuel kommentar indtastes i C# programmet (من بیش از آن که دیجیتالی را از طریق سیستم های رایانه ای دریافت کنم ، شروع می کنم. på et transportbånd) Samhørende værdier af UID den den aktuelle vægt sendeil tilelt 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 order 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 productret ، afsluttes ordren ved tryk på "stop"- knappen. Når ordren afsluttes، tilføjes en række til patedb.ordertable med de aktuelle ordredata. به منظور دستیابی به اطلاعات ، می توانید داده ها و اطلاعات مربوط به سیستم عامل را در هنگام کار با برنامه های کاربردی و به روز رسانی DataGridview مرور کنید. دستورات قابل سفارش også ، و 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 ؛
فضای نام show_data_from_database
{public partial class Form1: Form {MySqlConnection connection = new MySqlConnection ("datasource = localhost؛ username = root؛ password = '" ")؛ int RowNumber = 0؛ // متغیر برای ذخیره مقدار pateID int RangeNumber = 0؛ // متغیر برای ذخیره rangenumber int weight = 0؛ // متغیر برای ذخیره وزن int OrderNr = 0؛ // متغیر برای ذخیره OrderNR int QuantProduced = 0؛ // متغیر برای ذخیره مقدار تولید شده در NumberOfRows = 0؛ // تعداد سطرها با nulls.. bool ProdRunning = false؛ // متغیر نشان می دهد که آیا دکمه های شروع و توقف فعال شده است int limit = new int [6] ؛ // مقداردهی اولیه آرایه int CustomerID ؛ // متغیر برای ذخیره مشتری عمومی Form1 () {InitializeComponent ()؛ load_table ()؛ // تماس load_table}
void load_table ()
{MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC؛" ، اتصال) ؛ سعی کنید {MySqlDataAdapter adapter = new MySqlDataAdapter ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ SetRowOrder ()؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }}
خلأ خصوصی SetRowOrder ()
{dataGridView1. Columns ["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. 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؛ // Her kan rækkefølgen af kolonner ændres}
خلأ خصوصی GetData_Click (فرستنده شیء ، EventArgs e) // جدول پایگاه داده و دستورات توسط Timestamp را می خواند
{load_table ()؛ }
void خصوصی btnRefreshUID_Click (فرستنده شیء ، EventArgs e) //
{string timeStr = "SELECT * FROM patedb.patelog ORDER BY UID؛"؛ فرمان MySqlCommand = MySqlCommand جدید (timeStr ، اتصال) ؛ سعی کنید {MySqlDataAdapter adapter = new MySqlDataAdapter ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ SetRowOrder ()؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }}
void خصوصی btnRefreshValue_Click (فرستنده شیء ، EventArgs e)
{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (وزن به عنوان امضا کننده INTEGER)؛"؛ دستور MySqlCommand = MySqlCommand جدید (weightSort ، اتصال) ؛ سعی کنید {MySqlDataAdapter adapter = new MySqlDataAdapter ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ SetRowOrder ()؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }}
خلأ خصوصی ChkNullBtn_Click (فرستنده شیء ، EventArgs e)
{if (ProdRunning) {CheckTableForNull ()؛ load_table ()؛ }}
خالی خصوصی CheckTableForNull ()
{// بررسی/تنظیم زمان زمان حداقل 100 میلی ثانیه int i؛ int. TryParse (textTimer1. Text ، out i) ؛ if (i <100) {timer1. Stop ()؛ i = 100 ؛ timer1. Interval = i؛ MessageBox. Show ("حداقل مقدار i 100mS") ؛ timer1. Start ()؛ } else {timer1. Interval = i؛ } textTimer1. Text = timer1. Interval. ToString ()؛ // بررسی کنید که آیا سطرهایی با null موجود در جدول ، تعداد سطرها را در متغیر بر می گرداند: NumberOfRows string weightStr = ""؛ string chkNull = "SELECT COUNT (*) FROM patedb.patelog WHERE rangeNR IS NULL ORDER by PateID LIMIT 1؛"؛ فرمان MySqlCommand = MySqlCommand جدید (chkNull ، اتصال) ؛ سعی کنید {connection. Open ()؛ NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()) ؛ اتصال. بستن ()؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ } در نهایت {if (NumberOfRows! = 0) {try {// کمترین شماره pateID را انتخاب می کند که rangeNr NULL string است readID = "SEAT PATID FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1؛"؛ MySqlCommand cmdID = MySqlCommand جدید (readID ، اتصال) ؛ {connection. Open ()؛ RowNumber = (int) cmdID. ExecuteScalar ()؛ // عدد صحیح !! اتصال. بستن ()؛ } listPateID. Text = RowNumber. ToString ()؛ // خواندن شماره PateID انتخاب شده // وزن را از ردیف رشته انتخابی rownumber = RowNumber. ToString () انتخاب می کند. string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + row؛ MySqlCommand cmdweight = MySqlCommand جدید (وزن مجدد ، اتصال) ؛ {connection. Open ()؛ weightStr = (رشته) cmdweight. ExecuteScalar ()؛ // رشته !! اتصال. بستن ()؛ } weight = int. Parse (weightStr)؛ // تبدیل به int txtWeight. Text = weight. ToString ()؛ // int int RangeNumber = 0؛ if (وزن> = محدودیت [0] && وزن = محدودیت [2] && وزن = محدودیت [4] && وزن <= محدودیت [5]) {محدوده تعداد = 3 ؛ }} txtRange. Text = RangeNumber. ToString ()؛ UpdateLog ()؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ } QuantProduced = QuantProduced + 1؛ }}} private 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 جدید (آزمایش ، اتصال) ؛ {connection. Open ()؛ valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()) ؛ // اگر مشتری اتصال نداشته باشد 0 را برمی گرداند. بستن ()؛ } if (valtest == 1) // اگر مشتری در پایگاه داده وجود دارد - تولید را شروع کنید {try {OrderNr = int. Parse (txtOrderNumber. Text) ؛ ProdRunning = true؛ timer1. Start ()؛ textTimer1. Text = timer1. Interval. ToString ()؛ ReadLimits ()؛ } catch (به استثناء) {MessageBox. Show ("داده های تولید را وارد کرده و دکمه" شروع "را فشار دهید.") ؛ }} else MessageBox. Show ("مشتری در پایگاه داده نیست ، دوباره امتحان کنید") ؛ } // ReadLimits ()؛ }
خصوصی خالی ReadLimits ()
{// محدودیت ها را از rangetable می خواند ، محدوده 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 ، اتصال) ؛ {connection. Open ()؛ محدودیت ها [شمارنده] = (int) cmdmin. ExecuteScalar ()؛ شمارنده = شمارنده + 1؛ اتصال. بستن ()؛ } // MessageBox. Show (counter. ToString ()) ؛ string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr؛ MySqlCommand cmdmax = MySqlCommand جدید (readmax ، اتصال) ؛ {connection. Open ()؛ محدودیت ها [شمارنده] = (int) cmdmax. ExecuteScalar ()؛ شمارنده = شمارنده + 1؛ اتصال. بستن ()؛ }} // پایان حلقه}
خلأ خصوصی UpdateLog ()
{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString ()؛ رشته Order = OrderNr. ToString ()؛ string update = "UPDATE patedb.patelog SET rangeNr ="+Range+'،'+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber؛ MySqlCommand updatecmd = MySqlCommand جدید (بروز رسانی ، اتصال) ؛ سعی کنید {connection. Open ()؛ updatecmd. ExecuteNonQuery ()؛ اتصال. بستن ()؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }}
void خصوصی btnStop_Click (فرستنده شیء ، EventArgs e)
{if (ProdRunning == true) {timer1. Stop ()؛ ProdRunning = false؛ 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؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }}
private void timer1_Tick (فرستنده شیء ، EventArgs e)
{CheckTableForNull ()؛ load_table ()؛ }
خصوصی خالی btnShowOrderTable_Click (فرستنده شیء ، EventArgs e)
{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER by orderID DESC؛"، connection)؛ سعی کنید {MySqlDataAdapter adapter = new MySqlDataAdapter ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }} else {MessageBox. Show ("برای wiev orderTable را فشار دهید")؛ }}
خصوصی خالی 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 ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ } connection. Close ()؛ } else {MessageBox. Show ("برای مشاهده جزئیات سفارش ، توقف را فشار دهید") ؛ }}
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 adapter = new MySqlDataAdapter ()؛ adapter. SelectCommand = command؛ DataTable dbdataset = DataTable جدید ()؛ آداپتور. پر (dbdataset) ؛ BindingSource bsource = new BindingSource ()؛ bsource. DataSource = dbdataset؛ dataGridView1. DataSource = bsource؛ آداپتور به روز رسانی (dbdataset) ؛ } catch (Exception ex) {MessageBox. Show (ex. Message) ؛ }} else {MessageBox. Show ("برای اطلاع از جزئیات مشتری stop را فشار دهید") ؛ }}}
}
توصیه شده:
نحوه اتصال NodeMCU ESP8266 به پایگاه داده MySQL: 7 مرحله
نحوه اتصال NodeMCU ESP8266 به پایگاه داده MySQL: MySQL یک سیستم مدیریت پایگاه داده رابطه ای (RDBMS) است که به طور گسترده استفاده می شود و از زبان پرس و جو ساختار یافته (SQL) استفاده می کند. در برخی موارد ، ممکن است بخواهید داده های حسگر Arduino/NodeMCU را در پایگاه داده MySQL بارگذاری کنید. در این دستورالعمل ، نحوه اتصال
نرم افزار پایگاه داده Ms Access را برای آماده سازی حقوق در شرکت خود ایجاد کنید: 6 مرحله
ایجاد نرم افزار پایگاه داده Ms Access برای آماده سازی حقوق و دستمزد در شرکت شما: من به شما دستورالعمل کوتاهی برای ایجاد یک سیستم حقوق و دستمزد با استفاده از دسترسی MS برای ایجاد حقوق ماهیانه و چاپ برگه های حقوق به راحتی با این کار می دهم. به این ترتیب می توانید پرونده های ماهانه جزئیات حقوق را در پایگاه داده نگه دارید و می توانید دیر ویرایش یا بازبینی کنید
NODEMCU LUA ESP8266 اتصال به پایگاه داده MySQL: 6 مرحله
NODEMCU LUA ESP8266 اتصال به پایگاه داده MySQL: این دستورالعمل برای افراد ضعیف نیست زیرا از XAMPP (Apache ، MySQL و PHP) ، HTML و البته LUA استفاده می کند. اگر در مقابله با این موارد اطمینان دارید ، ادامه مطلب را بخوانید! من از XAMPP استفاده می کنم زیرا می توان آن را روی یک قلم درایو یا هارد دیسک خود تنظیم کرد و پیکربندی شده است
UCL-IIOT-سیستم هشدار با پایگاه داده و Node-red: 7 مرحله
UCL-IIOT-سیستم زنگ هشدار با پایگاه داده و Node-red: هدف از این ساخت آموزش آموزش اتصال Arduino با Node-red و پایگاه داده است ، بنابراین می توانید داده ها را ثبت کرده و همچنین برای استفاده های بعدی جمع آوری کنید. برای این ساخت از من استفاده می کنم یک سیستم هشدار ساده آردوینو که 5 عدد داده را خارج می کند ، هر کدام با یک
نحوه دریافت داده ها از پایگاه داده Firebase در NodeMCU: 7 مرحله
نحوه واکشی داده ها از پایگاه داده Firebase در NodeMCU: برای این دستورالعمل ، ما داده ها را از پایگاه داده در Google Firebase واکشی کرده و با استفاده از NodeMCU برای تجزیه و تحلیل بیشتر می آوریم. حساب ایجاد پایگاه داده Firebase. 3) بارگیری