Оглавление:

EAL - Industriel Internet - Fabrikshal: 7 шагов
EAL - Industriel Internet - Fabrikshal: 7 шагов

Видео: EAL - Industriel Internet - Fabrikshal: 7 шагов

Видео: EAL - Industriel Internet - Fabrikshal: 7 шагов
Видео: Erfindungen aus Fulda - der erste Kleinwagen | Pioniere in Fulda | erlebnis hessen | doku 2024, Июль
Anonim
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal
EAL - Industriel Internet - Fabrikshal

Сделайте это лучше, чтобы открыть и внедрить систему автоматизации в соответствии с принципом Industri 4.0. I denne opgave, er der lavet en lille simulator af en fabrikshal. Я приветствовал серводвигатель, самт и пардиодер. Udevendig, sidder der en RFID kortlæser, der skulle bruges til at lukke de reléeante ind i fabrikshallen. Альтернативные данные, драгоценные камни в базе данных на Wampserver.

Шаг 1: RFID Kortlæser

RFID Kortlser
RFID Kortlser
RFID Kortlser
RFID Kortlser

Der er inkluderet en RFID kortlser. Усиление и определение номера идентификатора на детекторе, а также на отдельных элементах кода Arduino. Det gør at når kortlæseren opfanger en brik eller et kort, kigger den på enhedens id-nummer, og godkender først når det nummer stemmer overns med det der er skrevet ind i koden.

Når kortlæseren giver adgang, så tændes lyset i fabrikken. Lyset slukkes igen, når enhed, der er godkendt af kortlæseren, bliver Detekteret.

Kortlæseren bliver fjernet fra projektet, da den kører seriel kommunikation. Этот модуль можно найти на серийном порте, а также на проектах Arduino Uno. Seriel porten, skal også bruges til Arduinoens ordrer, den vil for vores Windows Forms application. I den sammenhæng er lyset også fravalgt.

Шаг 2: Серводвигатель (Anlæg)

Серводвигатель (Anlæg)
Серводвигатель (Anlæg)
Серводвигатель (Anlæg)
Серводвигатель (Anlæg)
Серводвигатель (Anlæg)
Серводвигатель (Anlæg)

Я слышал, как серводвигатель, из-за стирки на Arduino Uno. Den skalsimulere et anlæg, der kan produkter forskellige produkter. Ordrerbeholdningen, samt antallet af de udførte produkter, bliver gemt в базе данных MySQL. Motoren kan køre ud i tre forskellige positioner. Hver position symboliserer tre forskellige produkter. Når produktet er færdigproduceret, kører motoren tilbage i nul position, og afventer nye ordrer. Det er meningen at man, via WPF applikationen kan afgive nye ordrer til motoren. Альтернативный вариант - создание драгоценного камня в базе данных MySQL.

Шаг 3. База данных MySQL - Indhold

База данных MySQL - Indhold
База данных MySQL - Indhold
База данных MySQL - Indhold
База данных MySQL - Indhold
База данных MySQL - Indhold
База данных MySQL - Indhold

Я MySQL databasen vil der være tre tabeller. Держатель Den første øje med hvilke produkter der er bestilt, og hvor mange. En anden tabel vil logge all de udførte produkter. Den tredje, og sidste tabel indenholder en oversigt над hvor mange produkter der er produkter, og hvor mange der mangler. Ydermere er der et tidspunkt på, hvornår de pågældende produkter er produkter. Благодаря приложению Windows Forms в стиле, в том числе к отправке Arduinoen, самой базе данных. Når der bliver afgivet en ordrer, vil den blive sendt til Arduinoen, efterfølgende, vil den related data blive logget i databasen. Der bliver sendt tre forskellige datatyper til databasen. En Integer, en String, som bliver kaldt en VarChar, i databasen. Der er også et TimeStamp, Det er en indstilling, der er tilføjet i databasen.

Шаг 4: Arduino Kode

#включают

Серво myServo;

int servoPos; char produkt = '0'; пустая настройка () {myServo.attach (3); // Последовательная связь начинается Serial.begin (9600); } void loop () {// Анализ продукта последовательного порта = Serial.read (); // Годен для включения или выключения (продукта) {// Продукт A (1) используется в данном случае case '1': myServo.write (50); задержка (1000); myServo.write (0); задержка (1000); Serial.println («Готово»); перерыв; // Продукт B (2) udføres i denne case case '2': myServo.write (100); задержка (1000); myServo.write (0); задержка (1000); Serial.println («Готово»); перерыв; // Продукт C (3) udføres i denne case case '3': myServo.write (150); задержка (1000); myServo.write (0); задержка (1000); Serial.println («Готово»); перерыв; }}

Шаг 5. Приложение Windows Forms

using System; using System. Collections. Generic; using System. ComponentModel; using System. Data; с помощью System. Drawing; using System. Linq; using System. Text; using System. Threading. Tasks; using System. Windows. Forms; using System. Collections; используя System. IO. Ports; using MySql; using MySql. Data. MySqlClient;

пространство имен WindowsFormsApp2

{общедоступный частичный класс Form1: Form {/ * Я определил все общедоступные переменные. Herunder er der oprettet en Class (MySqlConnection) der skal tages i brug, for at kunne oprette forbindelse to MySQL serveren. Ydermere er der oprettet en String (connectionString) den bruges til at definere hvilken bruger der skal på og password, or hvilken database der er story om. Der er oprettet en integer, i et 2d array (orde). Grunden til det er at en ordrer kan bestå af flere produktioner af et produkt, eller flere produkter. Сериал коммуникаций до Arduinoen bliver и определяет ее. Der bliver også oprettet en Class (BackgroundWorker). Денег и лучшая программа для бливер, эксикверет, что делать, и мешки. Я dette tilfælde er det brugbart, da der kan blive oprettet nye ordrer, med korte mellemrum. * / MySqlConnection connection; строка connectionString;

частный int ordrenummer;

частный интервал [,] порядок = новый интервал [100, 100]; частный int sendOrder = новый int [100]; частная строка prodType;

SerialPort sp = новый SerialPort ();

частный BackgroundWorker myWorker = новый BackgroundWorker ();

общедоступная форма Form1 ()

{InitializeComponent (); // Ее волчок vores String (connectionString) defineret. connectionString = "server = 192.168.1.100; userid = root; pwd = langeland; database = arduino;"; / * Ее переменная "myWorker" сидела в журнале, выполняя самые разные процессы. * / myWorker. DoWork + = новый DoWorkEventHandler (myWorker_DoWork); myWorker. WorkerReportsProgress = true; myWorker. WorkerSupportsCancellation = true; // Ее bliver selve baggrundsgennemløbet eksikveret. myWorker. RunWorkerAsync (); // Ее bliver der defineret hvilket format datoen kører i. Ее формат лучше после базы данных MySQL. dateTimePicker1. CustomFormat = "гггг-ММ-дд"; dateTimePicker1. Format = DateTimePickerFormat. Custom; }

private void Afgiv_Ordre_Click (отправитель объекта, EventArgs e)

{/ * Her er der oprettet nogle variabler, der kun bliver brugt i dette void. De tre første er Integer der skal definere hvilket produkt der er story om. De næste tre er oprettet для at kunne skrive det antal man ønsker, ind i applikationen. Den sidste er oprettet for at få en længde på den pågældende ordre. * / int produktA = 1; int produktB = 2; int produktC = 3; int prodA = int. Parse (prodAOrder. Text); int prodB = int. Parse (prodBOrder. Text); int prodC = int. Parse (prodCOrder. Text); int orderLength = prodA + prodB + prodC; / * Я анализирую для петель bliver køen oprettet, således at ordrene bliver Produceret i den rækkefølge, de er bestilt i. * / for (int prod1A = 0; prod1A <prodA; prod1A ++) {order [ordrenummer, prod1A] = produktA; }

для (int prod1B = (prodA); prod1B <(prodB + prodA); prod1B ++) {order [ordrenummer, prod1B] = produktB; }

для (int prod1C = (prodA + prodB); prod1C 99)

{ordrenummer = 0; } // Ее больше, чем нужно, чтобы продукт был в базе данных. DBQuery ("INSERT INTO` bestilteprod` (`Produkt A`,` Produkt B`, `Produkt C`) VALUES (" + prodA + "," + prodB + "," + prodC + ")"); // Ее overføres en oversigt над hvilke produkter der mangler at blive produkter, til databasen. DBQuery ("UPDATE` total` SET `manglende produkter` = (` manglende produkter` + ("+ (prodA + prodB + prodC) +")) WHERE 1 "); }

// Я определил void er alt det kode der skal køre i baggrunden, lagt ind.

private void myWorker_DoWork (объект-отправитель, EventArgs e) {while (true) {/ * Продолжайте делать это в обычном порядке, если хотите, чтобы он был установлен с 0, чтобы продолжить, пока цикл не короче. */ Положение дел(); while (sendOrder. Sum ()! = 0) {/ * Я выбираю средство поиска циклов, определенное целым числом (i) er mindre end længden på den afgivet ordre, vil det eksikvere. Variablen (i) kigger på den pågældende række i arrayet, der på nuværende tidspunkt arbejdes i. Den kigger i kolonnen, ser hvilket tal der står i kolonnen. Tallet bliver exikveret, og inden and variablen rykker videre til næste kolonne, bliver den pågældende kolonne sat til 0. De eksikverede produkter bliver uploadet til databasen. Если вы хотите установить связь с Arduinoen, и если вы хотите, чтобы она была отправлена на Arduinoen. * / for (int i = 0; i <sendOrder. Length; i ++) {Статус (); sp. BaudRate = 9600; sp. PortName = "COM4"; sp. Open (); sp. Write (sendOrder . ToString ()); // Programmet der er i en af. если (sendOrder == 1) {prodType = "Produkt A"; } иначе, если (sendOrder == 2) {prodType = "Produkt B"; } else if (sendOrder == 3) {prodType = "Продукт C"; }

sendOrder = 0;

// Ничего особенного в тексте и массиве, дающем 0, продукте, загружаемом в базе данных, о коммуникациях на Arduinoen, блистере на клавиатуре. if (sendOrder. Sum () == 0) {DBQuery ("ВСТАВИТЬ В` udforte` (`Тип продукта`) ЗНАЧЕНИЯ ('" + prodType + "')");

DBQuery ("ОБНОВЛЕНИЕ` total` SET `productret produkter` = (` productret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) ");

sp. Close ();

перерыв; } / * Ее afventes der at Arduinoen er færdig med ordren. Der kvitteres med et "done". Når det er modtaget, bliver de udførte endnu en gang uploadet til databasen Grunden til dette, er at man skal være sikker på and det sidste udførte produkt bliver overført til databasen. * / sp. ReadTo («Готово»);

DBQuery ("INSERT INTO` udforte` (`Тип продукта`) VALUES ('" + prodType + "')");

DBQuery ("ОБНОВЛЕНИЕ` total` SET `productret produkter` = (` productret produkter` + 1), `manglende produkter` = (` manglende produkter` - 1) ");

sp. Close (); Положение дел(); }} // Я определил, что зацикливание происходит с задержкой, когда есть рекурсия, с упорядочением до эксикверинга, без того, чтобы быть предшественником, срабатывающим на эксикверинге (суммируется с предыдущим циклом с исходным кодом 0). для (int я = 0; я <порядок. GetLength (0); я ++) {int test = порядок [я, 0]; if (test! = 0) {для (int j = 0; j <100; j ++) {sendOrder [j] = заказ [i, j];

порядок [i, j] = 0;

}

перерыв; }}

}

} / * Her er der oprettet et void ved navn "Status". Det er lavet for at skulle undgå at skrive de samme linjer kode flere steder. Я стедет кан человек не со средой в skrive "Статус" Dette void er også inkluderet i det void, med det andet kode, der kører i baggrunden. * / private void Status () {/ * Ее пользователь MySQL forbindelsen, vælger alt fra den tabel der hedder total, og exikverer den forespørgsel. * / MySqlConnection con = new MySqlConnection (connectionString); con. Open (); строка str = "выбрать * из общего количества"; MySqlCommand com = новый MySqlCommand (str, con); MySqlDataReader reader = com. ExecuteReader (); // Эта функция используется для того, чтобы она была загружена на процессоре, а также на другой стороне кода. reader. Read (); MissingProd. Invoke ((MethodInvoker) delegate {// Ее устройство для обработки продукта, средство для получения продукта, значение для приложения. MissingProd. Text = "manglende produkter:" + (reader ["manglende produkter"]. ToString ()); OrdereProd. Text = "produkter lavet:" + (reader ["produkter produkter"]. ToString ());}); // Ее bliver der Implementeret hvad procentbaren, skal udfyldes efter. ProcenteDone. Invoke ((MethodInvoker) delegate {// Hvis læseren i My SQL forbindelsen læser at "produkter produkter ikke er lig med 0, bliver denne if statement eksikveret. Hvis det er lig med 0, bliver der udskrevet" 0% "skrevet til label. if (int. Parse (reader ["produkter produkter"]. ToString ())! = 0) {// Ее тег, производящий продукт, и дополнительный продукт. få det ud i procent. ProcenteDone. Text = Math. Round ((float. Parse (reader ["произвести продукт"]. ToString ()) /(float. Parse(reader["производить продукт "]. ToString ()) + float. Parse (reader ["manglende produkter"]. ToString ()))) * 100). ToString (); // Ее результат получен после удаления задержки по сравнению с обработанным. progressBar1. Value = Int32. Parse (ProcenteDone. Text);} else {ProcenteDone. Text = "0%";}}); // Ей нравится MySQL forbindelsen. reader. Close (); con. Close ();} // Я удаляю пустоту всех продуктов, которые производят på den valgte dato, lagt ud på a pplikationen. private void Vis_Produkter_Click_1 (отправитель объекта, EventArgs e) {строка date = dateTimePicker1. Value. ToString (). Remove (10);

date = dateTimePicker1. Text;

string query = "ВЫБЕРИТЕ` Тип продукта`, `Tid` ОТ udforte ГДЕ Tid> = '" + date + "00:00:00' AND Tid <= '" + date + "23:59:59'"; using (connection = new MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (запрос, соединение)) using (MySqlDataAdapter adapter = new MySqlDataAdapter (команда)) {DataTable prodTable = new DataTable (); адаптер. Fill (prodTable);

dataGridView1. DataSource = prodTable;

}

} // Я убираю пустоту MySQL forbindelsen styret. Den fungerer således at forbindelsen bliver åbnet, eksikverer, og lukkes. private void DBQuery (строка cmd) {строка запроса = cmd; using (соединение = новый MySqlConnection (connectionString)) using (MySqlCommand command = new MySqlCommand (запрос, соединение)) {connection. Open ();

command. ExecuteScalar ();

connection. Close ();

} } } }

Шаг 6: Materialeliste

1 ст. Ардуино Уно

1 ст. Микро сервопривод SG90 9g

Шаг 7: Fobindelsesdiagram / I / O Lliste

Fobindelsesdiagram / I / O Lliste
Fobindelsesdiagram / I / O Lliste

Серводвигатель:

+ = Rød

- = Сортировать

Сигнал = Grøn

Рекомендуемые: