Πίνακας περιεχομένων:

EAL-Industri4.0-RFID Dataopsamling Til Database: 10 βήματα (με εικόνες)
EAL-Industri4.0-RFID Dataopsamling Til Database: 10 βήματα (με εικόνες)

Βίντεο: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 βήματα (με εικόνες)

Βίντεο: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 βήματα (με εικόνες)
Βίντεο: Industry 4.0 Internet of Things, Technology Evolution & Big Data. How Technology Changes Our Lives 2024, Ιούλιος
Anonim
EAL-Industri4.0-RFID Dataopsamling Til Database
EAL-Industri4.0-RFID Dataopsamling Til Database

Προσθέστε όλα τα προγράμματα για την εγγραφή σας, καταχωρίζοντας την ταυτότητά σας. RFID, υστερεί σε δεδομένα και στη βάση δεδομένων MySQL. κόμβος-ΚΟΚΚΙΝΟΣ, θα πρέπει να ελέγχετε και να συμπεριφέρεστε κατά την επιλογή δεδομένων και προγράμματος## από την εφαρμογή φόρμας των Windows. Vi forestiller os følgende:

Χάρη στην παραγωγή και την παραγωγή 200 γρ. Foliebakker. Όλες οι συσκευές μπορούν να χρησιμοποιηθούν μετά από την ετικέτα RFID και την ετικέτα πλαστικών/ετικετών, μη δεσμευτικού και unikt ID (UID = Unique Identifier, er en 32 bits kode, 8 hexadecimale karakterer) for entydig identifikation af hver enkelt bakke lever Da færdigvægten af hver enkelt bakke leverpostej kan svinge (afhængig af råvarer, fordampning και ovn mm), και για kunderne hver har et specifikt krav færdigvægten, bruges UID tagget til at knytte hver enkret leverpostej tergeifikt legerpostej t lagger, tifikvergeifikt legerpostej t lagger leverpostejer til én specifik kunde. Kunderne er supermarkedskæder:

1. rmρμα. Βοηθήστε το Irmas luksus leverpostej skal holde sig inden για +/- 5%, τουλάχιστον 190g και μέγιστο 210g.

2. Μπρούγκσεν. Vægten på Brugsens leverpostej skal holde sig inden για +/- 10%, τουλάχιστον 180g και μέγιστο 220g.

3. Άλντι. Έκπτωση για Aldis έκπτωση leverpostej skal holde sig inden για +/- 15%, τουλάχιστον 170g και μέγιστο 230g.

Εκτελέστε μια ταξινόμηση ταξινόμησης:

Εύρος 0: εκτός εμβέλειας

Εύρος 1: ελάχιστο 190g/μέγιστο 210g

Εύρος2: ελάχιστο 180g/μέγιστο220g

Εύρος 3: ελάχιστο 170g/μέγιστο230g

Βήμα 1: Παρακολούθηση δεδομένων Af για εγγραφή Vægt Samt Af UID

Opsamling Af Data for Vægt Samt Registrering Af UID
Opsamling Af Data for Vægt Samt Registrering Af UID

Μπορείτε να χρησιμοποιήσετε δεδομένα για αυτό, να καταχωρίσετε τις ετικέτες RFID και να τις αποθηκεύσετε στο Arduino MEGA2560 med και RFID-RC522 αναγνώστη/συγγραφέα. Παρέχεται η δυνατότητα να χρησιμοποιηθούν δεδομένα, για να εξομοιωθούν τα δεδομένα για το vægten med et potmeter tilsluttet en analog indgang på Arduinoen.

Følgende opstilling er anvendt:

Δοχείο 1 stk 25k lineært. 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 -> pin 53

SCK -> pin52

MOSI -> pin51

MISO-> pin50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

De opsamlede data, για hhv. Το UID είναι διαθέσιμο, αποστέλλεται σε σειρές θύρας σε συνδυασμό με την επιλογή κειμένου για λήψη βίντεο από τον κόμβο-Κόκκινο για την έγκαιρη παρουσίαση και τον πίνακα ελέγχου και την καθυστέρηση σε βάση δεδομένων.

Βήμα 2: Πρόγραμμα Arduino

Έχω προγραμματίσει με Arduino τη βιβλιοθήκη τεχνολογίας SPI.h και MFRC522.h για kunne bruge RFID lseren. Ξεκινάω από την αρχική προετοιμασία της μεταβλητής μετατροπής. Der laves en instans af MFRC522. Εγκατάσταση μπλοκ αρχικών πρωτοτύπων για τη σειρά απαγορεύσεων, SPI porten και MFRC522. Απομακρύνετε τη σάρωση μετά από ετικέτες RFID. Για ikke at sende det samme UID afsted flere gange μετά από ορισμένα, er der lavet en stump kode som tjekker for dette. Δεν είναι δυνατή η ετικέτα scannet και UID, φορτώνει ένα τυπικό nyUID med netop læste UID. Hvis array nyUID er forskellig fra oldUID er der tale om et nyt UID som kan sendes på den serielle port. Οδηγός και παλιόUID μπορεί να είναι, παραμύθι για όλες τις ετικέτες UID και UID'et skal αγνοεί. 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. Δραστηριότητες επιστροφής αληθινές συστοιχίες, και ψευδείς συστοιχίες hors'ne er forskellige.

#περιλαμβάνω

#include // Αυτό το πρόγραμμα σαρώνει κάρτες RFID χρησιμοποιώντας RDIF-RC522 πίνακα ανάγνωσης/εγγραφής. // Διαβάζεται το UID, διαβάζεται ένα αναλογικό pin. Η αναλογική τιμή 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"; byte oldUID [4] = {}; byte 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 για (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 (Value); // αποστολή νέας γραμμής Serial.println (); // ορίστε oldUID = nyUID για (byte z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // περιμένετε 1 δευτερόλεπτο καθυστέρηση (1000); }

// σύγκριση 2 συστοιχιών…

boolean array_cmp (byte a , byte b ) {bool test = true; // δοκιμάστε κάθε στοιχείο να είναι το ίδιο. αν μόνο ένα δεν είναι, επιστρέψτε false για (byte n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false? // αν το byte δεν είναι ίσο, test = false} εάν (test == true) επιστρέψει true. αλλιως επιστρεψε false? }

Βήμα 3: Node-RED, Lagring Af Data I Database

Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database
Node-RED, Lagring Af Data I Database

Følgende flow er lavet i node-RED:

Η COM4 μπορεί να απαγορεύσει τις τροποποιήσεις δεδομένων σε Arduino boardet. Λειτουργία "Split and Get value" και "Split and Get UID" splitter teksstrengen ved kommaet and returnere hhv vægten og UID. Βοηθήστε να πληκτρολογήσετε τον πίνακα ελέγχου και τη γραμμή διαγράμματος και την κλίμακα. Το UID προειδοποιεί και γράφει. Funktionen test_sound advarer verbalt med sætningen "Out of range", hvis vægten er under 170g eller over 230g, dvs i range 0.

Διαχωρισμός και λήψη τιμής:

var εξόδου = msg.payload.split (',');

temp = {ωφέλιμο φορτίο: (έξοδος [1])}; θερμοκρασία επιστροφής?

Διαχωρισμός και λήψη UID:

var output = msg.payload.split (",");

temp = {ωφέλιμο φορτίο: έξοδος [0]}; θερμοκρασία επιστροφής?

test_ound:

var number = parseInt (msg.payload);

if (αριθμός> 230 || αριθμός <170) {newMsg = {ωφέλιμο φορτίο: "Εκτός εμβέλειας"}; επιστροφή newMsg; } else {newMsg = {ωφέλιμο φορτίο: ""}; επιστροφή newMsg; }

Funktionen Split string "," indsætter et timestamp, UID και η δημιουργία βάσης δεδομένων patedb.patelog.

var output = msg.payload.split (","); // split msg.payload με κόμμα σε πίνακα

UIDTag = έξοδος [0]; // πρώτο μέρος στην πρώτη θέση [0] ValueTag = έξοδος [1]; // δεύτερο μέρος στη δεύτερη θέση [1]

var m = {

θέμα: "INSERT INTO patedb.patelog (timestamp, UID, weight) VALUES ('"+new Date (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; επιστροφή m?

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 de i C# programmet benyttede range.

Βήμα 5: Patelog

Patelog
Patelog

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) er πρωτεύον κλειδί και inkrementeres αυτόματο.

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 ή 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. (Tmetlles af C# programmet)

σχόλιο (tinytext) er en eventuel kommentar til ordren.

clientID (int) er det aktuelle kundenummer på ordren.

Βήμα 7: Προσαρμόσιμο

Εξατομικευμένο
Εξατομικευμένο

customertable indeholder 6 kolonner:

clientID (int) er πρωτεύον κλειδί και auto inc.

όνομα, διεύθυνση, τηλέφωνο, email (varchar) med forskellig max længde

εύροςNr (int)

Βήμα 8: Rangetable

Rangetable
Rangetable

rangetable indeholder 3 kolonner:

rangeNr (int) er πρωτεύον κλειδί και auto inc.

rangeMin (int)

rangeMax (int)

Βήμα 9: Πρόγραμμα C#

Πρόγραμμα C#
Πρόγραμμα C#

Når der productionres en ordre leverpostej, er proceduren følgende:

Kundenummer, ordrenummer, ordreantal og en eventuel kommentar indtastes i C# programmet (i praxisres overføres det digitalt fra virksomhedens ordresystem. Produktionen startes nu ved tryk p '' start'- knappen. på et transportbånd) Samhørende værdier af UID den 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 tabel. tidspunkt ikke tilskrives værdier til rangeNr og 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 productionret, 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å vises, και 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

namespace 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; // Μεταβλητή για την αποθήκευση της παραγόμενης ποσότητας int NumberOfRows = 0; // αριθμός σειρών με nulls.. bool ProdRunning = false; // Μεταβλητή που υποδεικνύει εάν τα κουμπιά έναρξης & διακοπής έχουν ενεργοποιηθεί int όρια = νέο int [6]; // αρχικοποίηση πίνακα int CustomerID; // Μεταβλητή για την αποθήκευση του κοινού CustomID 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 (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new 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; // Μπορείτε να ελέγξετε τη συλλογή δεδομένων dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Μπορείτε να το υποβάλετε στο kolonner ændres dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Her kan rækkefølgen af kolonner ændres dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Μπορείτε να ελέγξετε τη συλλογή δεδομένωνGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Μπορείτε να ελέγξετε τη συλλογή δεδομένων dataGridView1. Columns ["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 * FROM patedb.patelog ORDER BY UID;"; Εντολή MySqlCommand = νέα MySqlCommand (timeStr, σύνδεση); δοκιμάστε {MySqlDataAdapter adapter = new MySqlDataAdapter (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new DataTable (); προσαρμογέας. Συμπλήρωση (dbdataset) BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); προσαρμογέας. Ενημέρωση (dbdataset) } catch (Exception ex) {MessageBox. Show (ex. Message); }}

ιδιωτικό κενό btnRefreshValue_Click (αποστολέας αντικειμένων, EventArgs e)

{string weightSort = "SELECT * FROM patedb.patelog ORDER BY CAST (weight AS SIGNED INTEGER);"; Εντολή MySqlCommand = νέα MySqlCommand (weightSort, σύνδεση); δοκιμάστε {MySqlDataAdapter adapter = new MySqlDataAdapter (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new 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 ms int i; int. TryParse (textTimer1. Text, out i); εάν (i <100) {timer1. Stop (); i = 100; χρονόμετρο 1. Interval = i; MessageBox. Show ("Ελάχιστη τιμή i 100mS"); timer1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Ελέγξτε εάν υπάρχουν διαθέσιμες γραμμές με μηδενικές στον πίνακα, επιστρέφει τον αριθμό των γραμμών στη μεταβλητή: NumberOfRows string stringStr = ""; 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 = "SELECT pateID 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 // Επιλέγει το βάρος από την επιλεγμένη σειρά σειράς = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + row; MySqlCommand cmdweight = νέο MySqlCommand (βάρος ανάγνωσης, σύνδεση). {connection. Open (); weightStr = (συμβολοσειρά) cmdweight. ExecuteScalar (); // Χορδή !! σύνδεση. Κλείσιμο (); } βάρος = int. Parse (weightStr); // μετατροπή σε int txtWeight. Text = βάρος. ToString (); // εκτύπωση int RangeNumber = 0; εάν (βάρος> = όρια [0] && βάρος = όρια [2] && βάρος = όρια [4] && βάρος <= όρια [5]) {RangeNumber = 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); // διαβάστε το clientID} 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 (); }

private void ReadLimits ()

{// Διαβάζει όρια από rangetable, εύρος 1 έως 3 int counter = 0; για (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 (); string 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); }}

ιδιωτικό κενό 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;", σύνδεση); δοκιμάστε {MySqlDataAdapter adapter = new MySqlDataAdapter (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new 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 (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new DataTable (); προσαρμογέας. Συμπλήρωση (dbdataset) BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; προσαρμογέας. Ενημέρωση (dbdataset) } catch (Exception ex) {MessageBox. Show (ex. Message); } σύνδεση. Κλείσιμο (); } 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 clientID WHERE patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); Εντολή MySqlCommand = νέα MySqlCommand (δοκιμή, σύνδεση); δοκιμάστε {MySqlDataAdapter adapter = new MySqlDataAdapter (); προσαρμογέας. SelectCommand = εντολή; DataTable dbdataset = new DataTable (); προσαρμογέας. Συμπλήρωση (dbdataset) BindingSource bsource = new BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; προσαρμογέας. Ενημέρωση (dbdataset) } catch (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Πατήστε διακοπή για να μάθετε τα στοιχεία του πελάτη"); }}}

}

Συνιστάται: