Სარჩევი:
- ნაბიჯი 1: V Datagt Samt– ის Af მონაცემების Opsamling Vægt Samt– ის რეგისტრაცია Af UID– ისთვის
- ნაბიჯი 2: Arduino- პროგრამა
- ნაბიჯი 3: Node-RED, Lagring Af Data I Database
- ნაბიჯი 4: მონაცემთა ბაზის დიზაინი
- ნაბიჯი 5: პატელოგი
- ნაბიჯი 6: შესანახი
- ნაბიჯი 7: მოსახერხებელი
- ნაბიჯი 8: Rangetable
- ნაბიჯი 9: C# პროგრამა
ვიდეო: EAL-Industri4.0-RFID მონაცემთა დამთვალიერებელი მონაცემთა ბაზა: 10 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:20
შეიმუშავეთ ყველა ვარიანტი, რათა დარეგისტრირდეთ, დარეგისტრირდით იდენტიფიცირებული მომხმარებლის მიერ. RFID, მონაცემების ჩამორჩენა MySQL მონაცემთა ბაზაში. node-RED, როგორც წესი, ვცდილობ და ვიმოქმედო მონაცემების და C# პროგრამის სახით Windows Form Application– ის საშუალებით. ტყის შემქმნელისთვის:
მე ვამზადებ პროდუქტს და ვამზადებ 200 გ ფოლიბაქერს. შემდგომი გამოყენების და გამოყენების შემდგომი და RFID ტეგები პლასტმასის/ლეიბლის, უკმარისობის და უნიკალურ ID- ს (UID = უნიკალური იდენტიფიკატორი, 32 კოდის კოდი, 8 თექვსმეტიანი კარაქტერი) ენდიდიის იდენტიფიკაციისთვის. Hver enkelt bakke lever მას შემდეგ, რაც მან დაარწმუნა, რომ შევეცადე გამოვიყენო (ვიმსჯელებ råvarer, fordampning და ovn mm), და სხვა შემთხვევებში, დამუშავების შემდეგ, bruges UID tagget til at knytte hver enkelt leverpostej leverpostej leverpostej leverpostejer til én specifik kunde. Kunderne er supermarkedskæder:
1. ირმა. Vægten på Irmas luksus leverpostej skal holde sig inden for +/- 5%, მინიმალური მინიმუმ 190 გ და მაქსიმალური 210 გ.
2. ბრუგსენი. Vægten på Brugsens leverpostej skal holde sig inden for +/- 10%, მინიმუმ 180 გ და მაქსიმალური 220 გ.
3. ალდი. Vægten på Aldis ფასდაკლება leverpostej skal holde sig inden for +/- 15%, მინიმუმ 170 გ და მაქსიმუმი 230 გ.
ეს არის დახარისხების შემქმნელი:
დიაპაზონი 0: დიაპაზონის მიღმა
დიაპაზონი 1: მინიმალური 190 გ/მაქსიმალური 210 გ
დიაპაზონი 2: მინიმალური 180 გ/მაქსიმალური 220 გ
დიაპაზონი 3: მინიმალური 170 გ/მაქსიმალური 230 გ
ნაბიჯი 1: V Datagt Samt– ის Af მონაცემების Opsamling Vægt Samt– ის რეგისტრაცია Af UID– ისთვის
ამ მონაცემების შესამოწმებლად, თქვენ უნდა დაარეგისტრიროთ RFID ტეგები და შეცვალოთ Arduino MEGA2560 და RFID-RC522 მკითხველი/მწერალი. ეს არ ნიშნავს იმას, რომ ვიმსჯელებთ მონაცემებს v medgten med და potmeter tilsluttet en analogue indgang på Arduinoen– ისთვის.
ფილიალები ანანთის საწინააღმდეგოდ:
1 მკვრივი ჭურჭელი 25 კმ ხაზზე. Yder-benene er tilsluttet hhv. GND og +5V, midterbenet er tilsluttet AN0
RFID-RC522 er tilsluttet Arduino დაფები SPI პორტი, რომელიც მოიცავს შემდეგ ფაილებს:
SDA -> პინი 53
SCK -> pin52
MOSI -> pin51
MISO-> pin50
IRQ -> NC
GND -> GND
RST -> pin5
3.3V -> 3.3V
დე opsamlede მონაცემები, for hhv. UID გამოჩნდა, გამოაგზავნა სერიული პორტი და შეაგროვა ტექსტი ვიდეოში კვანძში-Red som ster for den efterfølgende præsentation და dashboard და lagring მონაცემთა ბაზაში.
ნაბიჯი 2: Arduino- პროგრამა
მე Arduino პროგრამულად შევიტანე ბიბლიოთეკური SPI.h და MFRC522.h პროგრამის გამოყენებით RFID პროგრამების გამოყენებით. დავიწყე პროგრამული უზრუნველყოფის საწყისი ცვლადი ცვლილებების შეყვანისას. Der laves en instans af MFRC522. მე დავაყენე დაბლოკილი საწყისი სერიები, SPI პორტატული და MFRC522. წაშალეთ სკანირება RFID ტეგების შემდეგ. Ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette. არ არის სკანირებული და UID ტეგით, იტვირთება არა მხოლოდ nyUID, არამედ UID– ის გამოყენებით. მასივი nyUID er forskellig fra oldUID er der tale om და nyt UID som kan sendes på den serielle port. მას არ აქვს ძველი UID და აქვს ზღაპარი ყველა UID ტეგისა და UID– ის უგულებელყოფის შესახებ. 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. მონაცემები აგზავნის რამდენიმე ტექსტურ ტექსტს. თქვენ უნდა აირჩიოთ ძველიUID = nyUID, შეარჩიოთ კოდი და გამოიყენოთ RFID ტეგები. ეს არის ფუნქცია და პროგრამული უზრუნველყოფა, როგორც ფუნქცია, ასევე sammenligner 2 მასივი. ფუნქციონალური დაბრუნება ჭეშმარიტი მისი მასივი არის და ყალბი მისი მასივი forskellige.
#ჩართეთ
#მოიცავს // ეს პროგრამა სკანირებს RFID ბარათებს RDIF-RC522 მკითხველის/მწერლის დაფის გამოყენებით. // 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 მაგალითი.
ბათილად დაყენება ()
{Serial.begin (9600); // სერიული კომუნიკაციის წამოწყება SPI.begin (); // დაიწყოს SPI ავტობუსი mfrc522. PCD_Init (); // MFRC522} ინიცირება
ბათილი მარყუჟი ()
{// მოძებნეთ ახალი ბარათები, თუ (! Mfrc522. PICC_IsNewCardPresent ()) {დაბრუნება; } // აირჩიეთ ერთი ბარათი, თუ (! Mfrc522. PICC_ReadCardSerial ()) {დაბრუნება; } // ჩატვირთვა nyUID UID ტეგით for (byte 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 (მნიშვნელობა); // ახალი ხაზის გაგზავნა Serial.println (); // დააყენეთ oldUID = nyUID for (byte z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // დაელოდეთ 1 წამი დაგვიანებით (1000); }
// შეადარეთ 2 მასივი…
boolean array_cmp (byte a , byte b ) {bool test = true; // შეამოწმეთ თითოეული ელემენტი ერთნაირი. თუ მხოლოდ ერთი არ არის, დააბრუნეთ false (ბაიტი n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // თუ ბაიტი არ არის ტოლი, ტესტი = მცდარი} თუ (ტესტი == ჭეშმარიტი) დაბრუნდება ჭეშმარიტი; სხვაგვარად ცრუ დაბრუნება; }
ნაბიჯი 3: Node-RED, Lagring Af Data I Database
F flowlgende flow er lavet i node-RED:
COM4 არის სერიული აკრძალვა მონაცემთა მოდიფიკაციისთვის Arduino დაფაზე. ფუნქციები "გაყავით და მიიღეთ მნიშვნელობა" და "გაყავით და მიიღეთ UID" გამყოფი ტექნიკა და კომუნიკაცია და უკან დაბრუნება და UID. იგი იშლება და აკონტროლებს პანელს და ხაზს და მასშტაბებს. UID იყენებს ტექსტს და ტექსტს. Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vtengten er under 170g eller over 230g, dvs and range 0.
გაყავით და მიიღეთ ღირებულება:
var output = msg.payload.split (',');
temp = {დატვირთვა: (გამომავალი [1])}; დაბრუნების ტემპერატურა;
გაყავით და მიიღეთ UID:
var output = msg.payload.split (",");
temp = {payload: output [0]}; დაბრუნების ტემპერატურა;
test_ sound:
var ნომერი = parseInt (msg.payload);
if (ნომერი> 230 || ნომერი <170) {newMsg = {დატვირთვა: "დიაპაზონის მიღმა"}; newMsg დაბრუნება; } else {newMsg = {დატვირთვა: ""}; newMsg დაბრუნება; }
ფუნქციონალური გაყოფა სტრიქონი "," მითითებული და დროის ნიშნული, UID და მონაცემთა ბაზა patedb.patelog.
var output = msg.payload.split (","); // გაყოფილი msg.payload მძიმით მასივში
UIDTag = გამომავალი [0]; // პირველი ნაწილი პირველ პოზიციაზე [0] ValueTag = გამომავალი [1]; // მეორე ნაწილი მეორე პოზიციაზე [1]
var m = {
თემა: "INSERT INTO patedb.patelog (დროის ნიშნული, UID, წონა) VALUES ('"+ახალი თარიღი (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; დაბრუნება მ;
patelog er en MySQL მონაცემთა ბაზა აკრძალულია რამდენიმე პარამეტრის გათვალისწინებით:
მასპინძელი: localhost
პორტი: 3306
მომხმარებელი: root
მონაცემთა ბაზა: patedb
ნაბიჯი 4: მონაცემთა ბაზის დიზაინი
მონაცემთა ბაზა patedb indeholder 4 tabeller
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 i C# programmet benyttede მერყეობს.
ნაბიჯი 5: პატელოგი
Tabellen patelog indeholder folgende 6 kolonner:
pateID (int) er ძირითადი გასაღები და inkrementeres ავტომატური.
დროითი ბეჭედი, UID & vægt er af typen varchar (med forskellig max længde)
rangeNr er af typen tinyint (მუშაობს C# პროგრამით)
orderID er af typen int (orderID tilføjes af C# programmet)
Node-RED tilføjer ikke værdier til kolonnerne rangeNr და orderID. დიაპაზონი Nr და ბრძანებაID დამუშავება NULL værdier, det bruges i C# programmet til at detektere de rækker som skal tilskrives værdier for rangeNr და orderID
ნაბიჯი 6: შესანახი
ორდერიანი მფლობელი 5 კოლონერი:
orderID (int) er det aktuelle ordrenummer
orderQuant (mediumint) er ordens pålydende antal
quantProduced (mediumint) er antal der rent faktisk er productionret på ordren. (პროგრამული უზრუნველყოფა C#)
კომენტარი (tinytext) er en eventuel kommentar til ordren.
clientID (int) er det aktuelle kundenummer på ordren.
ნაბიჯი 7: მოსახერხებელი
მზრუნველი განუყოფელი მფლობელი 6 kolonner:
clientID (int) er ძირითადი გასაღები და ავტომატური ჩანაწერი.
სახელი, მისამართი, ტელეფონი, ელ.ფოსტა (varchar) med forskellig max længde
დიაპაზონი Nr (int)
ნაბიჯი 8: Rangetable
რანჟირებული უქონელი 3 kolonner:
rangeNr (int) er ძირითადი გასაღები და ავტომატური ჩართვა
დიაპაზონი Min (int)
დიაპაზონი მაქსიმუმი (int)
ნაბიჯი 9: C# პროგრამა
Når der productsres en ordre leverpostej, er the 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 den aktuelle vægt sende 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 tabel. tidspunkt ikke tilskrives værdier til rangeNr და orderID vil de have værdien NULL.
Med და დროის შუალედი 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 productionret, afsluttes ordren ved tryk på”stop”- knappen. N ordr ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata. თქვენ შეგიძლიათ შეცვალოთ მონაცემები და შეცვალოთ მონაცემები, რათა გამოვიყენოთ და შეცვალონ მონაცემთა ბაზის განახლება DataGridview– ში. ordertable kan også vises, და der kan søges ordredata på individualueller UID'er eller kundedata på individualuelle ordrer.
სისტემის გამოყენება; 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
{საჯარო ნაწილობრივი კლასი ფორმა 1: ფორმა {MySqlConnection connection = new MySqlConnection ("datasource = localhost; username = root; password = ''"); int RowNumber = 0; // ცვლადი pateID მნიშვნელობის შესანახად int RangeNumber = 0; // ცვლადი რენგენუმერული წონის შესანახად = 0; // ცვლადი წონის შესანახად OrderNr = 0; // ცვლადი შენახვის მიზნით OrderNR int QuantProduced = 0; // ცვლადი წარმოებული რაოდენობის შესანახად, NumberOfRows = 0; // რიგების რაოდენობა ნულებით.. bool ProdRunning = false; // ცვლადი, რომელიც მიუთითებს დაწყების და გაჩერების ღილაკების გააქტიურებაზე int limit = new int [6]; // მასივის ინიციალიზაცია int CustomerID; // ცვლადი შესყიდვისთვის clientID საჯარო ფორმა 1 () {ინიციალიზაცია კომპონენტი (); load_table (); // დარეკვა load_table}
void load_table ()
{MySqlCommand command = new MySqlCommand ("SELECT * FARM patedb.patelog ORDER BY timestamp DESC;", კავშირი); სცადეთ {MySqlDataAdapter ადაპტერი = ახალი MySqlDataAdapter (); ადაპტერი. SelectCommand = ბრძანება; DataTable dbdataset = ახალი DataTable (); ადაპტერი. შევსება (dbdataset); BindingSource bsource = ახალი BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); ადაპტერი. განახლება (dbdataset); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }}
პირადი სიცარიელე SetRowOrder ()
{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // მისი გაგზავნა შესაძლებელია dataGridView1. Columns ["დროის ნიშნული"]. DisplayIndex = 1; // მისი გაგზავნა შესაძლებელია dataGridView1. Columns ["UID"]. DisplayIndex = 2; // მისი გაცნობა შეიძლება იყოს dataGridView1. Columns ["წონა"]. DisplayIndex = 3; // მისი გაგზავნა შესაძლებელია dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // მისი გაგზავნა შესაძლებელია მონაცემების გაცნობისას.1.სვეტები ["orderID"]. DisplayIndex = 5; // Her kan rækkefølgen af kolonner ændres}
პირადი სიცარიელე GetData_Click (ობიექტის გამგზავნი, EventArgs e) // კითხულობს მონაცემთა ბაზის ცხრილს და ბრძანებებს Timestamp- ის მიხედვით
{load_table (); }
პირადი სიცარიელე btnRefreshUID_Click (ობიექტის გამგზავნი, EventArgs e) //
{string timeStr = "SELECT * FARM 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); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }}
პირადი სიცარიელე btnRefreshValue_Click (ობიექტის გამგზავნი, EventArgs e)
{string weightSort = "SELECT * FARM patedb.patelog ORDER BAST CAST (წონა როგორც ხელმოწერილი ინტეგრატორი);"; MySqlCommand ბრძანება = ახალი MySqlCommand (წონის დალაგება, კავშირი); სცადეთ {MySqlDataAdapter ადაპტერი = ახალი MySqlDataAdapter (); ადაპტერი. SelectCommand = ბრძანება; DataTable dbdataset = ახალი DataTable (); ადაპტერი. შევსება (dbdataset); BindingSource bsource = ახალი BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); ადაპტერი. განახლება (dbdataset); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }}
პირადი სიცარიელე ChkNullBtn_Click (ობიექტის გამგზავნი, EventArgs e)
{if (ProdRunning) {CheckTableForNull (); load_table (); }}
პირადი სიცარიელე CheckTableForNull ()
{// შეამოწმეთ/დააყენეთ დროის შუალედი მინიმუმ 100 ms int i; int. TryParse (textTimer1. Text, out i); if (i <100) {timer1. Stop (); i = 100; ტაიმერი 1. ინტერვალი = i; MessageBox. Show ("მინიმალური მნიშვნელობა i 100mS"); ტაიმერი 1. დაწყება (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // შეამოწმეთ არის თუ არა ცხრილი ცხრილში არსებული null- ით, აბრუნებს რიგების რაოდენობას ცვლადში: NumberOfRows string weightStr = ""; string chkNull = "აირჩიე რაოდენობა (*) patedb.patelog საიდანაც დიაპაზონი NR არის ნულოვანი შეკვეთა pateID LIMIT 1 -ით;"; MySqlCommand ბრძანება = ახალი MySqlCommand (chkNull, კავშირი); სცადეთ {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); კავშირი. დახურვა (); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); } საბოლოოდ {if (NumberOfRows! = 0) {try {// ირჩევს ყველაზე დაბალ pateID ნომერს, სადაც rangeNr არის NULL string readID = "აირჩიეთ pateID FAT FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = ახალი MySqlCommand (წაკითხვა, კავშირი); {connection. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // მთელი რიცხვი !! კავშირი. დახურვა (); } listPateID. Text = RowNumber. ToString (); // წაიკითხეთ შერჩეული PateID ნომერი // ირჩევს წონას შერჩეული რიგითი რიცხვიდან string = RowNumber. ToString (); string readweight = "წონის არჩევა patedb.patelog WHERE pateID =" + მწკრივი; MySqlCommand cmdweight = ახალი MySqlCommand (წაკითხვის წონა, კავშირი); {connection. Open (); weightStr = (სიმებიანი) cmdweight. ExecuteScalar (); // სიმებიანი !! კავშირი. დახურვა (); } წონა = int. Parse (weightStr); // გადაიყვანე int txtWeight. Text = წონა. ToString (); // ბეჭდვა int RangeNumber = 0; თუ (წონა> = ლიმიტები [0] && წონა = ლიმიტები [2] && წონა = ლიმიტები [4] && წონა <= ლიმიტები [5]) {დიაპაზონის რაოდენობა = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); } QuantProduced = QuantProduced + 1; }}} პირადი სიცარიელე btnStart_Click (ობიექტის გამგზავნი, EventArgs e) {if (ProdRunning == false) {int valtest; სცადეთ {CustomerID = int. Parse (txtCustomerNr. Text); // წაიკითხეთ customerID} დაჭერა {MessageBox. Show ("შეიყვანეთ წარმოების მონაცემები და დააჭირეთ ღილაკს" დაწყება "."); }
string test = "SELECT COUNT (*) 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 = ჭეშმარიტი; ტაიმერი 1. დაწყება (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } დაჭერა (გამონაკლისის გარდა) {MessageBox. Show ("შეიყვანეთ წარმოების მონაცემები და დააჭირეთ ღილაკს" დაწყება "."); }} else MessageBox. Show ("მომხმარებელი არ არის მონაცემთა ბაზაში, სცადე ხელახლა"); } // ReadLimits (); }
პირადი სიცარიელე ReadLimits ()
{// კითხულობს შეზღუდვებს rangetable– დან, დიაპაზონი 1 – დან 3 int counter = 0; for (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "დიაპაზონის არჩევა მინიმუმიდან patedb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = ახალი MySqlCommand (წაკითხვა, კავშირი); {connection. Open (); ლიმიტები [counter] = (int) cmdmin. ExecuteScalar (); მრიცხველი = მრიცხველი + 1; კავშირი. დახურვა (); } // MessageBox. Show (counter. ToString ()); string readmax = "დიაპაზონის არჩევა მაქსიმუმი patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = ახალი MySqlCommand (readmax, კავშირი); {connection. Open (); ლიმიტები [counter] = (int) cmdmax. ExecuteScalar (); მრიცხველი = მრიცხველი + 1; კავშირი. დახურვა (); }} // დასრულება მარყუჟისთვის}
პირადი სიცარიელე UpdateLog ()
{// UPDATE rangeNR & orderID string Range = RangeNumber. ToString (); string Order = OrderNr. ToString (); string update = "UPDATE patedb.patelog SET rangeNr ="+Range+','+"orderID ="+OrderNr+"WHERE pateID ="+RowNumber; MySqlCommand განახლება cmd = ახალი MySqlCommand (განახლება, კავშირი); სცადეთ {connection. Open (); updatecmd. ExecuteNonQuery (); კავშირი. დახურვა (); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }}
პირადი სიცარიელე 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 (); კავშირი. დახურვა (); QuantProduced = 0; } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }}
შეტყობინების ბათილად ქრონომეტრი
{CheckTableForNull (); load_table (); }
პირადი სიცარიელე btnShowOrderTable_Click (ობიექტის გამგზავნი, EventArgs e)
{if (ProdRunning == false) {MySqlCommand command = new MySqlCommand ("SELECT * FROM patedb.ordertable ORDER by orderID DESC;", connection); სცადეთ {MySqlDataAdapter ადაპტერი = ახალი MySqlDataAdapter (); ადაპტერი. SelectCommand = ბრძანება; DataTable dbdataset = ახალი DataTable (); ადაპტერი. შევსება (dbdataset); BindingSource bsource = ახალი BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; ადაპტერი. განახლება (dbdataset); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }} 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 (); ადაპტერი. SelectCommand = ბრძანება; DataTable dbdataset = ახალი DataTable (); ადაპტერი. შევსება (dbdataset); BindingSource bsource = ახალი BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; ადაპტერი. განახლება (dbdataset); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); } კავშირი. დახურვა (); } else {MessageBox. Show ("შეკვეთის დეტალების სანახავად დააჭირეთ ღილაკს"); }}
პირადი სიცარიელე 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); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox. Show (მაგ. შეტყობინება); }} else {MessageBox. Show ("დააჭირეთ გაჩერებას, რომ გაეცნოთ მომხმარებლის დეტალებს"); }}}
}
გირჩევთ:
როგორ გავხადოთ ტენიანობა და ტემპერატურა რეალურ დროში მონაცემთა ჩამწერი Arduino UNO და SD ბარათით - DHT11 მონაცემთა მრიცხველის სიმულაცია Proteus– ში: 5 ნაბიჯი
როგორ გავხადოთ ტენიანობა და ტემპერატურა რეალურ დროში მონაცემთა ჩამწერი Arduino UNO და SD ბარათით | DHT11 მონაცემთა მრიცხველის სიმულაცია Proteus- ში: შესავალი: გამარჯობა, ეს არის Liono Maker, აქ არის YouTube ბმული. ჩვენ ვაკეთებთ შემოქმედებით პროექტს Arduino– სთან და ვმუშაობთ ჩამონტაჟებულ სისტემებზე. Data-Logger: მონაცემთა მრიცხველი (ასევე მონაცემების ჩამწერი ან მონაცემთა ჩამწერი) არის ელექტრონული მოწყობილობა, რომელიც დროთა განმავლობაში აფიქსირებს მონაცემებს
შექმენით მონაცემთა ბაზა XAMPP– ით: 4 ნაბიჯი
მონაცემთა ბაზის შექმნა XAMPP– ით: XAMPP არის სრულიად უფასო Apache განაწილება, რომელიც შეიცავს MariaDB, PHP და Perl. XAMPP გთავაზობთ გრაფიკულ ინტერფეისს SQL– სთვის, რომელიც საშუალებას გაძლევთ შეინახოთ ინფორმაცია მონაცემთა ბაზაში, რომელსაც ჩვენ დღეს შევქმნით. როდესაც პირველად დავიწყე მონაცემთა ბაზების გამოყენება პროექტებისთვის
დააკავშირეთ Raspberry Pi IOT მონაცემთა ბაზა MS Excel– თან - შექმენით: 3 ნაბიჯი
დააკავშირეთ Raspberry Pi IOT მონაცემთა ბაზა MS Excel– თან - შექმენით: IOT მონაცემების აღების სამყაროში ერთი ქმნის უამრავ მონაცემს, რომელიც უცვლელად ინახება მონაცემთა ბაზის სისტემაში, როგორიცაა Mysql ან Oracle. ამ მონაცემებზე წვდომისა და მანიპულირების მიზნით, ერთ -ერთი ყველაზე ეფექტური მეთოდია Microsoft Office- ის პროდ
ციფრული 3D სურათის დამთვალიერებელი - "DigiStereopticon": 6 ნაბიჯი (სურათებით)
ციფრული 3D სურათის დამთვალიერებელი - "DigiStereopticon": სტერეოსკოპიული ფოტოგრაფია დაკარგულია. ეს ალბათ იმით არის განპირობებული, რომ ადამიანებს არ მოსწონთ სპეციალური სათვალეების ტარება ოჯახის ფოტოების სანახავად. აქ არის სახალისო პატარა პროექტი, რომლის გაკეთებაც შეგიძლიათ ერთ დღეზე ნაკლებ დროში თქვენი 3D სურათის გადასაღებად
შექმენით მონაცემთა ბაზა ღია ოფისში: 7 ნაბიჯი
შექმენით მონაცემთა ბაზა ღია ოფისში: მონაცემთა ბაზები შეიძლება მართლაც გამოსადეგი იყოს. ისინი შეიძლება გაკეთდეს პირადი ნივთებისთვის, მაგალითად, CD კოლექციისთვის, ან ბიზნესისთვის, იმისთვის, თუ რამდენი მანქანა აქვთ. ახლა მე ვაჩვენებ, თუ როგორ უნდა გავაკეთოთ მონაცემთა ბაზა Openoffice.Org- ში