সুচিপত্র:

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

বিস্তারিত প্রকল্পের সর্বজনীন অপস্যামলিং এফ ভগডটা, নিবন্ধনকারী এএফ আইডেন্টিটার ভা। আরএফআইডি, মাইএসকিউএল ডাটাবেস এএইচএ ডেটা পিছিয়ে আছে। node-RED, samt fremvisning og व्यवहारের সাথে সাথে ডে অপস্যামলেড ডেটা i et C# প্রোগ্রাম আমি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন এফ এফ। Vi forestiller os følgende:

Vi har en produktionslinje som produrer leverpostej i 200g foliebakker। Alle færdigbagte leverpostejer udstyres efter afkøling med et RFID tag i plasticlåget/labelen, som indeholder et unikt ID (UID = Unique Identifier, er en 32 bits kode, 8 hexadecimale karakterer) for entydig identifikation af hke enkte enkte enqt দা færdigvægten AF hver enkelt bakke leverpostej Kan svinge (afhængig AF råvarer, আমি মিমি ovn fordampning), এবং দা kunderne hver হর এবং specifikt Krav færdigvægten, Bruges ইউআইডি tagget তিল এ knytte hver enkelt leverpostej তিল স্বীকারোক্তি specifik lagerlokation Pa lageret, hvor ডের Kun lagres leverpostejer til specn specifik kunde। Kunderne er supermarkedskæder:

1. ইরমা। Vågten på Irmas luksus leverpostej skal holde sig inden +/- 5%, altså সর্বনিম্ন 190g এবং সর্বোচ্চ 210g।

2. ব্রুগসেন। V/gten på Brugsens leverpostej skal holde sig inden for +/- 10%, altså সর্বনিম্ন 180g এবং সর্বোচ্চ 220g।

3. আলদি। Vldgten på Aldis ডিসকাউন্ট leverpostej skal holde sig inden +/- 15%, altså সর্বনিম্ন 170g এবং সর্বাধিক 230g।

Der er således følgende sorteringer:

পরিসীমা 0: সীমার বাইরে

পরিসীমা 1: সর্বনিম্ন 190 গ্রাম/সর্বোচ্চ 210 গ্রাম

রেঞ্জ 2: সর্বনিম্ন 180 গ্রাম/সর্বোচ্চ 220 গ্রাম

রেঞ্জ 3: সর্বনিম্ন 170 গ্রাম/সর্বোচ্চ 230 গ্রাম

ধাপ 1: V Ugt Samt নিবন্ধিত Af UID- এর জন্য অপস্যামলিং এফ ডেটা

V Ugt Samt রেজিস্ট্রিং এফ UID- এর জন্য Opsamling Af ডেটা
V Ugt Samt রেজিস্ট্রিং এফ UID- এর জন্য Opsamling Af ডেটা

V opgt এর জন্য opsamling এফ ডেটা, samt রেজিস্ট্রেশন এফ আরএফআইডি ট্যাগ er anvendt en Arduino MEGA2560 med en RFID-RC522 পাঠক/লেখক। Da vi ikke har nogen vægt, simulerer vi data for vægten med et potmeter tilsluttet en analog indgang på Arduinoen।

Fgendlgende opstilling er anvendt:

1 stk potmeter 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:

এসডিএ -> পিন 53

SCK -> pin52

MOSI -> pin51

মিসো-> পিন 50

IRQ -> NC

GND -> GND

RST -> pin5

3.3V -> 3.3V

ডি opsamlede ডেটা, hhv এর জন্য। UID ও 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- প্রোগ্রাম

I Arduino programmet inkluderes de to biblioteker SPI.h og MFRC522.h for kunne bruge RFID læseren। আমি প্রোগ্রামটি শুরু করি Der laves en instans af MFRC522। আমি সেট আপ blokken initialiseres den serielle forbindelse, SPI porten og MFRC522। আরএফআইডি ট্যাগের পরে স্ক্যান করা হয়। Ikke at sende det samme UID afsted flere gange efter hinanden, er der lavet en stump kode som tjekker for dette। N derr der er scannet এবং UID ট্যাগ, arary nyUID med det netop læste UID লোড করে। Hvis array nyUID er forskellig fra oldUID er der tale om et nyt UID som kan sentes på den serielle port। Hvis nyUID এবং পুরাতন UID er ens, er der tale om samme UID ট্যাগ এবং UID'et স্কাল উপেক্ষা করে। Hvis der er tale om et nyt UID, পাঠায় 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। ডেটা som en komma-separeret tekststreng পাঠায়। Som det sidste sættes oldUID = nyUID, således at koden klart til at læse et nyt RFID tag.. Den sidste funktion i programmet er den funktion som sammenligner 2 arrays। Funktionen ফিরে আসা সত্য hvis array'ne er ens, og false hvis array'ne er forskellige।

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত // এই প্রোগ্রামটি RDIF-RC522 রিডার/রাইটার বোর্ড ব্যবহার করে RFID কার্ড স্ক্যান করে। // ইউআইডি পড়া হয়, একটি এনালগ পিন পড়া হয়। এনালগ মান 0-1023 স্কেল করা হয় 150-250। // ইউআইডি এবং এনালগ মান 9600, N, 8, 1 ব্যবহার করে সিরিয়াল পোর্টে কমা-পৃথক পাঠ্য হিসাবে পাঠানো হয়। একই UID আবার পাঠানোর আগে উপস্থিত। // এই ফাংশন অ্যারে তুলনা করে কোডে প্রয়োগ করা হয়: oldUID nyUID ফাংশন array_cmp (oldUID , nyUID )

constexpr uint8_t RST_PIN = 5;

constexpr uint8_t SS_PIN = 53; int sensorPin = A0; int মান = 0; St StringValue = "0000"; বাইট oldUID [4] = {}; বাইট nyUID [4] = {};

MFRC522 mfrc522 (SS_PIN, RST_PIN); // MFRC522 উদাহরণ তৈরি করুন।

অকার্যকর সেটআপ()

{Serial.begin (9600); // একটি সিরিয়াল যোগাযোগ SPI.begin () শুরু করুন; // এসপিআই বাস mfrc522. PCD_Init () শুরু করুন; // MFRC522} শুরু করুন

অকার্যকর লুপ ()

{// নতুন কার্ড সন্ধান করুন যদি (! Mfrc522. PICC_IsNewCardPresent ()) {return; } // একটি কার্ড নির্বাচন করুন যদি (! Mfrc522. PICC_ReadCardSerial ()) {return; } // UID ট্যাগ সহ nyUID লোড করুন (বাইট i = 0; i <mfrc522.uid.size; i ++) {nyUID = mfrc522.uid.uidByte ; } // যদি oldUID nyUID if (! array_cmp (oldUID, nyUID)) {// সিরিয়াল পোর্টে UID ট্যাগ পাঠান (byte i = 0; i 1000) {Value = 1000; } মান = (মান / 10) + 150; // স্কেলড এনালগ মান পাঠান Serial.print (মান); // নতুন লাইন Serial.println () পাঠান; // set oldUID = nyUID for (byte z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // অপেক্ষা করুন 1 সেকেন্ড বিলম্ব (1000); }

// 2 টি অ্যারে তুলনা করুন …

বুলিয়ান অ্যারে_সিএমপি (বাইট এ , বাইট বি ) {বুল পরীক্ষা = সত্য; // প্রতিটি উপাদান একই হতে পরীক্ষা করুন। যদি শুধু একটি না হয়, (বাইট n = 0; n <4; n ++) {যদি (a [n]! = b [n]) পরীক্ষা = মিথ্যা; // যদি বাইট সমান না হয়, পরীক্ষা = মিথ্যা} যদি (পরীক্ষা == সত্য) সত্য আসে; অন্যথায় মিথ্যা ফিরে; }

ধাপ 3: নোড-রেড, 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

Fgendlgende প্রবাহ er lavet আমি নোড-লাল:

COM4 er den den serielle নিষিদ্ধ hvor তথ্য modtages fra Arduino boardet। Funktionerne "Split and Get value" এবং "Split and Get UID" splitter teksstrengen ved kommaet og returnere hhv vægten og UID। Vægten bruges til fremvisning på dashboardet i et linechart og en scale। UID fremvises i et tekstfelt। Funktionen test_sound advarer verbalt med sætningen "আউট অফ রেঞ্জ", hvis vægten er under 170g eller over 230g, dvs i range 0।

বিভক্ত করুন এবং মান পান:

var আউটপুট = msg.payload.split (',');

টেম্প = {প্লেলোড: (আউটপুট [1])}; ফিরে তাপমাত্রা;

বিভক্ত করুন এবং ইউআইডি পান:

var আউটপুট = msg.payload.split (",");

temp = {payload: output [0]}; ফিরে তাপমাত্রা;

test_sound:

var সংখ্যা = parseInt (msg.payload);

যদি (সংখ্যা> 230 || সংখ্যা <170) {newMsg = {payload: "out of range"}; newMsg ফেরত দিন; } অন্যথায় {newMsg = {payload: ""}; newMsg ফেরত দিন; }

Funktionen Split string "," indsætter et timestamp, UID এবং vægten i en ডাটাবেস patedb.patelog।

var আউটপুট = msg.payload.split (","); // বিভক্ত msg.payload অ্যারে মধ্যে কমা দ্বারা

UIDTag = আউটপুট [0]; // প্রথম অবস্থানে প্রথম অংশ [0] ValueTag = আউটপুট [1]; // দ্বিতীয় অংশ দ্বিতীয় অবস্থানে [1]

var m = {

বিষয়: atedোকান patedb.patelog (টাইমস্ট্যাম্প, UID, ওজন) মানগুলি }; ফেরত m;

patelog er en MySQL ডাটাবেস নিষিদ্ধ করতে পারে

হোস্ট: লোকালহোস্ট

পোর্ট: 3306

ব্যবহারকারী: মূল

ডাটাবেস: patedb

ধাপ 4: ডাটাবেস-ডিজাইন

ডাটাবেস-ডিজাইন
ডাটাবেস-ডিজাইন

Databasen patedb indeholder 4 tabeller

patelog er dataopsamlingstabellen, tilskrives data af node-RED og C# programmet

অর্ডারযোগ্য er en tabel som indeholder data om de genemførte ordrer, tilskrives data af C# programmet

গ্রাহকযোগ্য er এবং kunderegister

de i C# programmet benyttede রেঞ্জের জন্য rangetable er en tabel som indeholder grænseværdierne।

ধাপ 5: প্যাটেলগ

প্যাটেলগ
প্যাটেলগ

Tabellen patelog indeholder folgende 6 kolonner:

pateID (int) er প্রাথমিক কী এবং স্বয়ংক্রিয় কাজ।

টাইমস্ট্যাম্প, 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। পরিসীমা Nr og order ID tillader 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 কোলনার:

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 Clles af C# programmet)

মন্তব্য (tinytext) er en eventuel kommentar til ordren।

customerID (int) er det aktuelle kundenummer på ordren।

ধাপ 7: গ্রাহকযোগ্য

গ্রাহকযোগ্য
গ্রাহকযোগ্য

গ্রাহকযোগ্য ইন্ডোলহোল্ডার 6 কোলননার:

customerID (int) er প্রাথমিক কী og auto inc।

নাম, ঠিকানা, ফোন, ইমেইল (varchar) med forskellig max længde

rangeNr (int)

ধাপ 8: পরিসরযোগ্য

পরিসরযোগ্য
পরিসরযোগ্য

রেঞ্জেটেবল ইন্ডোল্ডার 3 কোলনার:

rangeNr (int) er প্রাথমিক কী og auto inc।

rangeMin (int)

rangeMax (int)

ধাপ 9: সি# প্রোগ্রাম

সি# প্রোগ্রাম
সি# প্রোগ্রাম

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

Kundenummer, ordrenummer, ordreantal আরো og স্বীকারোক্তি eventuel kommentar indtastes আমি সি # programmet (ঝ praksis overføres Det digitalt FRA virksomhedens ordresystem। Produktionen startes নিউ বেদ tryk Pa 'start'- knappen। NAR স্বীকারোক্তি leverpostej Er færdigproduceret আরো og låget Er monteret, vejes গুহা AF Arduinoen (på et transportbånd) Samhørende værdier af UID og den aktuelle vægt sendes serielt til node-RED, som viser de opsamlede data på dashboard 'et। Samtidig skrives timestamp, UID og vægt i en ny række d tab p tabtel d ptå påtel d ptpat ppattel p ptel. p ptel. p ptl dtppat d dert i påtå d it påtå d it påtå d it påtå d it påt d it påt d it påt d it påt d it påt d it påt d it påt d it pt d it pt d it pt i। tidspunkt ikke tilskrives værdier til rangeNr og order ID vil de have værdien NULL।

মেড এট টাইমিন্টারভাল আন্ডারসগার সি# প্রোগ্রামমেট patedb.patelogtabellen 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 ordr ordren afsluttes, tilføjes en række til patedb.ordertable med de aktuelle ordredata। N ordr en ordre er afsluttet, kan kan de opsamlede data i patelog tabellen fremvises ved at trykke på de forskellige knapper i gruppen Update DataGridview। অর্ডারেটেবল কান ওগসে ভিস, ওগ ডার কান সেজেস অর্ডারডাটা পå ইনডিজুয়েলার ইউআইডি'এর এলার কুন্ডেডাটা পিডি ইনডিজুয়েল অর্ডার।

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 সংরক্ষণ করার জন্য পরিবর্তনশীল; // rangenumber int weight = 0 সংরক্ষণ করার জন্য পরিবর্তনশীল; // ওজন সংরক্ষণের জন্য পরিবর্তনশীল অর্ডারএনআর = 0; // অর্ডার NR int QuantProduced = 0 সংরক্ষণের জন্য পরিবর্তনশীল; // উৎপাদিত পরিমানের সংখ্যা সংরক্ষণের জন্য পরিবর্তনশীল int NumberOfRows = 0; // নল সহ সারির সংখ্যা.. বুল ProdRunning = মিথ্যা; // ভেরিয়েবল ইঙ্গিত করে যে স্টার্ট এবং স্টপ বোতামগুলি সক্রিয় করা হয়েছে কিনা int limit = new int [6]; // array int CustomerID; // গ্রাহক আইডি পাবলিক ফর্ম 1 () {InitializeComponent () সংরক্ষণের জন্য পরিবর্তনশীল; load_table (); // call load_table}

অকার্যকর load_table ()

{MySqlCommand কমান্ড = নতুন MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", connection); চেষ্টা করুন {MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); 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 ই) // টাইমস্ট্যাম্প দ্বারা ডাটাবেস টেবিল এবং অর্ডার পড়ে

{load_table (); }

ব্যক্তিগত অকার্যকর btnRefreshUID_Click (বস্তু প্রেরক, EventArgs e) //

{স্ট্রিং timeStr = "ইউটিআইডি দ্বারা patedb.patelog ORDER থেকে নির্বাচন করুন"; MySqlCommand কমান্ড = নতুন MySqlCommand (timeStr, connection); চেষ্টা করুন {MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); অ্যাডাপ্টার আপডেট (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

ব্যক্তিগত অকার্যকর btnRefreshValue_Click (বস্তু প্রেরক, EventArgs e)

{স্ট্রিং weightSort = কাস্ট দ্বারা patedb.patelog অর্ডার * নির্বাচন করুন MySqlCommand কমান্ড = নতুন MySqlCommand (weightSort, connection); চেষ্টা করুন {MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); অ্যাডাপ্টার আপডেট (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }}

ব্যক্তিগত অকার্যকর ChkNullBtn_Click (বস্তু প্রেরক, EventArgs ই)

{যদি (ProdRunning) {CheckTableForNull (); load_table (); }}

ব্যক্তিগত অকার্যকর CheckTableForNull ()

{// চেক/সেট টাইমিন্টারভাল ন্যূনতম 100 ms int i; int. TryParse (textTimer1. Text, out i); যদি (i <100) {timer1. Stop (); আমি = 100; টাইমার 1. ইন্টারভাল = আমি; MessageBox. Show ("ন্যূনতম মান i 100mS"); টাইমার 1. স্টার্ট (); } অন্য {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // টেবিলে নাল সহ কোন সারি পাওয়া যায় কিনা তা পরীক্ষা করুন, ভেরিয়েবলে সারির সংখ্যা ফেরত দিন: NumberOfRows স্ট্রিং weightStr = ""; স্ট্রিং chkNull = "patedb.patelog থেকে COUNT (*) নির্বাচন করুন যেখানে পরিসীমা NR pateID LIMIT 1 দ্বারা NULL ORDER হয়;"; MySqlCommand কমান্ড = নতুন MySqlCommand (chkNull, সংযোগ); চেষ্টা করুন {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); সংযোগ বন্ধ করুন (); } catch (Exception ex) {MessageBox. Show (ex. Message); } অবশেষে {যদি (NumberOfRows! = 0) {চেষ্টা করুন {// সর্বনিম্ন pateID নম্বর নির্বাচন করুন যেখানে rangeNr হল NULL স্ট্রিং readID = "patedb.patelog থেকে pateID নির্বাচন করুন যেখানে পরিসীমা nR pateID ASC LIMIT 1 দ্বারা নাল অর্ডার;"; MySqlCommand cmdID = নতুন MySqlCommand (readID, সংযোগ); {সংযোগ। খুলুন (); RowNumber = (int) cmdID. ExecuteScalar (); // পূর্ণসংখ্যা !! সংযোগ বন্ধ করুন (); } listPateID. Text = RowNumber. ToString (); // নির্বাচিত PateID নম্বরটি পড়ুন // নির্বাচিত রনুম্বার স্ট্রিং সারি = RowNumber. ToString () থেকে ওজন নির্বাচন করুন; স্ট্রিং রিডওয়েট = "patedb.patelog থেকে ওজন নির্বাচন করুন যেখানে pateID =" + সারি; MySqlCommand cmdweight = নতুন MySqlCommand (রিডওয়েট, সংযোগ); {সংযোগ। খুলুন (); weightStr = (স্ট্রিং) cmdweight. ExecuteScalar (); // স্ট্রিং !! সংযোগ বন্ধ করুন (); } ওজন = int. Parse (weightStr); // রূপান্তর int txtWeight. Text = weight. ToString (); // প্রিন্ট int RangeNumber = 0; যদি (ওজন> = সীমা [0] && ওজন = সীমা [2] && ওজন = সীমা [4] && ওজন <= সীমা [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); আপডেটলগ (); } catch (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} ব্যক্তিগত অকার্যকর btnStart_Click (বস্তু প্রেরক, EventArgs e) {যদি (ProdRunning == মিথ্যা) {int valtest; চেষ্টা করুন {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} catch {MessageBox. Show ("উৎপাদন ডেটা লিখুন এবং 'স্টার্ট' বোতাম টিপুন।"); }

স্ট্রিং টেস্ট = "patedb.customertable থেকে COUNT (*) নির্বাচন করুন যেখানে customerID ="+CustomerID;

MySqlCommand cmdtestcustomer = নতুন MySqlCommand (পরীক্ষা, সংযোগ); {সংযোগ। খুলুন (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // গ্রাহক সংযোগ না থাকলে 0 প্রদান করে। বন্ধ করুন (); } if (valtest == 1) // যদি গ্রাহক ডাটাবেসে থাকে - উৎপাদন শুরু করুন {চেষ্টা করুন {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = সত্য; টাইমার 1. স্টার্ট (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("প্রোডাকশন ডেটা দিন এবং 'স্টার্ট' বোতাম টিপুন।"); }} অন্যথায় MessageBox. Show ("গ্রাহক ডাটাবেসে নেই, আবার চেষ্টা করুন"); } // ReadLimits (); }

ব্যক্তিগত অকার্যকর ReadLimits ()

{// rangetable থেকে সীমা পড়ে, পরিসীমা 1 থেকে 3 int কাউন্টার = 0; জন্য (int rangeNr = 1; rangeNr <4; rangeNr ++) {string readmin = "paledb.rangetable WHERE rangeNr ="+rangeNr; MySqlCommand cmdmin = নতুন MySqlCommand (readmin, connection); {সংযোগ। খুলুন (); সীমা [পাল্টা] = (int) cmdmin. ExecuteScalar (); কাউন্টার = কাউন্টার + 1; সংযোগ বন্ধ করুন (); } // MessageBox. Show (counter. ToString ()); স্ট্রিং রিডম্যাক্স = "patedb.rangetable থেকে rangeMax নির্বাচন করুন যেখানে পরিসর =" + rangeNr MySqlCommand cmdmax = নতুন MySqlCommand (readmax, connection); {সংযোগ। খুলুন (); সীমা [পাল্টা] = (int) cmdmax. ExecuteScalar (); কাউন্টার = কাউন্টার + 1; সংযোগ বন্ধ করুন (); }} // লুপের জন্য শেষ}

ব্যক্তিগত অকার্যকর UpdateLog ()

{// UPDATE rangeNR & orderID string string Range = RangeNumber. ToString (); স্ট্রিং অর্ডার = OrderNr. ToString (); স্ট্রিং আপডেট = "আপডেট 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 ই)

{যদি (ProdRunning == সত্য) {timer1. Stop (); ProdRunning = মিথ্যা; UpdateOrderTable (); } অন্য {MessageBox. Show ("এখনও কোন উৎপাদন শুরু হয়নি। ডেটা লিখুন এবং 'স্টার্ট' বোতাম টিপুন"); }}

ব্যক্তিগত অকার্যকর UpdateOrderTable ()

{string insert = "atedোকান patedb.ordertable (orderID, orderQuant, quantProduced, comment, customerID) VALUES ('" + this। QuantProduced. ToString ()+"','"+this.txtComment. Text+"','"+this.txtCustomerNr. Text+"');"; MySqlCommand insertcmd = নতুন MySqlCommand (সন্নিবেশ, সংযোগ); চেষ্টা করুন {connection. Open (); insertcmd. ExecuteNonQuery (); সংযোগ বন্ধ করুন (); QuantProduced = 0; } catch (Exception ex) {MessageBox. Show (ex. Message); }}

ব্যক্তিগত অকার্যকর টাইমার 1_ টিক (বস্তু প্রেরক, ইভেন্ট আর্গস ই)

{CheckTableForNull (); load_table (); }

ব্যক্তিগত অকার্যকর btnShowOrderTable_Click (বস্তু প্রেরক, EventArgs ই)

{যদি (ProdRunning == মিথ্যা) {MySqlCommand কমান্ড = নতুন MySqlCommand ("SELECT * FROM patedb.ordertable ORDER BY orderID DESC;", connection); চেষ্টা করুন {MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; অ্যাডাপ্টার আপডেট (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} অন্য {MessageBox. Show ("Wiev orderTable এ স্টপ টিপুন"); }}

ব্যক্তিগত অকার্যকর btnShowOrderDetails_Click (বস্তু প্রেরক, EventArgs ই)

{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 যেখানে patedb.patelog. UID = '" + txtShowOrderDetails. Text +"' "); MySqlCommand কমান্ড = নতুন MySqlCommand (পরীক্ষা, সংযোগ); চেষ্টা করুন {connection. Open (); MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; অ্যাডাপ্টার আপডেট (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); } সংযোগ বন্ধ করুন (); } অন্য {MessageBox. Show ("অর্ডারের বিবরণ দেখতে স্টপ টিপুন"); }}

ব্যক্তিগত অকার্যকর btnShowCustomerDetails_Click (বস্তু প্রেরক, EventArgs ই)

{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 যেখানে patedb.ordertable.orderID = '" + txtShowCustomerDetails. Text +"' "); MySqlCommand কমান্ড = নতুন MySqlCommand (পরীক্ষা, সংযোগ); চেষ্টা করুন {MySqlDataAdapter অ্যাডাপ্টার = নতুন MySqlDataAdapter (); adapter. SelectCommand = কমান্ড; DataTable dbdataset = নতুন DataTable (); অ্যাডাপ্টার পূরণ করুন (dbdataset); বাইন্ডিংসোর্স bsource = নতুন বাইন্ডিংসোর্স (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; অ্যাডাপ্টার আপডেট (dbdataset); } catch (Exception ex) {MessageBox. Show (ex. Message); }} অন্য {MessageBox. Show ("স্টপ চাপুন wiev গ্রাহকের বিবরণ"); }}}

}

প্রস্তাবিত: