Мазмуну:
- 1 -кадам: Африкалык маалыматтарды UPSке каттоодон өткөрүү үчүн
- 2-кадам: Arduino программасы
- 3-кадам: Node-RED, Lagring Af Data I маалымат базасы
- 4-кадам: Маалыматтар базасын түзүү
- 5 -кадам: Пателог
- 6 -кадам: Ордотабелдүү
- 7 -кадам: Customertable
- 8 -кадам: Rangetable
- 9 -кадам: C# программасы
Video: EAL-Industri4.0-RFID Dataopsamling Til Database: 10 Steps (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Долбоорду ишке ашыруу үчүн, каттоодон өтүңүз. RFID, MySQL маалымат базасы боюнча маалыматтын артында. түйүн-КЫЗЫЛ, ал эми Windows формадагы тиркемедеги C# программасынын жардамы менен берилиштерди сактоо. Vi Forestiller төмөнкүдөй:
Vi har en produktionslinje сом өндүрүүчү leverpostej и 200г фолиебаккер. Бардык стандарттар RFID тегдерин жана пластикалык карталарды өчүрүү үчүн, идентификаторлордун идентификаторлору (UID = Unique Identifier, 32 бит код, 8 он алтылык белгилер) идентификациялоо үчүн. Добуш берүүдөн баш тарткыла, буларды карап көргүлөчү (өчүрүүчү), ошондой эле ар кандай өзгөчөлүктөрдү аныктоо үчүн UID тегетин жазгыла. leverpostejer til én specifik kunde. Күндүн суперкөзөмөлү:
1. Ирма. +/- 5%дан кем эмес, эң аз дегенде 190г жана эң көп 210г.
2. Брюгсен. Brugsens leverpostej skal holde sig inden +/- 10%, эң аз дегенде 180г жана 220г.
3. Алди. Алдын ала эсептөөлөр +/- 15%га чейин арзандатуу менен, эң аз дегенде 170г жана 230г.
Суроо берүүчү:
0 диапазону: диапазондо жок
1 диапазону: минимум 190г/максимум 210г
2 диапазону: минималдуу 180г/максимум220г
3 диапазону: минималдуу 170г/максимум230г
1 -кадам: Африкалык маалыматтарды UPSке каттоодон өткөрүү үчүн
RFID тэгдерин каттоодон өткөрүп, RFID-RC522 окурманы/жазуучусу үчүн маалыматтарды каттап койсоңуз болот. Дагы бир нерсе жок болсо, анда сиз аналогдук маалыматка окшош маалыматтарды чогултууңуз керек.
Тапшырмаларды аткарыңыз:
1 стк potmeter 25k lineært. Yder-benene er tilsluttet hhv. GND og +5V, орточо тилке AN0
RFID-RC522 Arduino панелдеринин SPI портуна киргизилген:
SDA -> пин 53
SCK -> pin52
MOSI -> pin51
MISO-> pin50
IRQ -> NC
GND -> GND
RST -> pin5
3.3V -> 3.3V
Hhv үчүн маалыматтар, opsamlede. UID жана веб-портко киргизилгенден кийин, бул маалымат түйүнүнүн кызыл тилкеси-бул маалымат базасы жана маалымат тактасындагы маалымат тактасы.
2-кадам: Arduino программасы
Мен Arduino программасын SPI.h жана MFRC522.h библиотекасына кошуу үчүн RFIDдин тизмесин киргизем. Мен өзгөрмөлөрдү программалык камсыздоону баштайм. Der laves en instans af MFRC522. I Setup blokken initialiseres denielle forbindelse, SPI porten og MFRC522. Derefter RFID тегдерин сканерлейт. Уикипедиянын маалыматы боюнча, бул UIDде эң чоң жоготуу болуп саналат. Сканер жана UID теги жок, UID жүктөлөт жана UID жүктөлөт. Эски тилкелердин эски жыштыктары UUD үчүн эң ыңгайлуу порт болуп саналат. Эски NUID'дин мурунку тарыхы, бул жерде UID теги жана UID'et жокко эсе. Бул жерде UID, бул UID'et портунун бардык порттары менен байланышкан, бул жерде сиз порттун портуна кире аласыз. Аналогдор 150-250 чейин. Берилиштер суммаларды комментарийлөөдө. OldUID = nyUID, коддору жана коддору RFID тегдерине жазылгыла.. Дисциплинанын функциясы мен программаланган функцияларынын 2 массиви. Funktionen returnerer true hvis arrayüne er ens, og false false hvis array'e er forskellige.
#кошуу
#include // Бул программа RDIF-RC522 окурман/жазуучу тактасын колдонуу менен RFID карталарын сканерлейт. // UID окулат, аналогдук пин окулат. 0-1023 аналогдук мааниси 150-250гө чейин масштабдуу. // UID жана аналогдук маани 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 Value = 0; 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 ()) {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) {Value = 1000; } Мааниси = (Мааниси / 10) + 150; // масштабдуу аналогдук маанини жөнөтүү Serial.print (Value); // newline Serial.println () жөнөтүү; // oldUID = nyUID үчүн (байт z = 0; z <4; z ++) oldUID [z] = nyUID [z]; } // күтүү 1 сек. кечигүү (1000); }
// 2 массивди салыштыруу…
логикалык array_cmp (байт a , байт b ) {bool test = true; // ар бир элементтин бирдей болушун текшериңиз. эгерде бирөө жок болсо, false үчүн (false n = 0; n <4; n ++) {if (a [n]! = b [n]) test = false; // эгерде байт бирдей эмес болсо, test = false} if (test == true) true; башка жалган кайтаруу; }
3-кадам: Node-RED, Lagring Af Data I маалымат базасы
Følgende flow er lavet i node-RED:
COM4 маалыматы Arduino панелинде берилиштерди модернизациялоону токтотот. "Бөлүү жана Баалоо" функциялары "UPL жана Get UID" сплиттери текстти кайтаруу жана кайра кайтаруу жана UID. Тапшырмалар тактасында жана графикте жана масштабда эң чоң көрсөткүч. UID фреймвизирлейт. Funktionen test_sound advarer verbalt med "Sugteningen", "170g" ден төмөн, 230g ашуун, dvs i 0 диапазону.
Бөлүү жана баалуулукту алуу:
var output = msg.payload.split (',');
temp = {пайдалуу жүк: (чыгаруу [1])}; кайтарым темп;
Бөлүү жана UID алуу:
var output = msg.payload.split (",");
temp = {payload: output [0]}; кайтарым темп;
test_sound:
var number = parseInt (msg.payload);
if (number> 230 || number <170) {newMsg = {payload: "Out of range"}; newMsg кайтаруу; } else {newMsg = {payload: ""}; 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 ('"+new Date (). toISOString ()+"', '"+UIDTag+"', '"+ValueTag+"');" }; кайтуу м;
MySQL маалымат базасы төмөнкү параметрлерди камтыйт:
Алып баруучу: localhost
Порт: 3306
Колдонуучу: root
Маалыматтар базасы: patedb
4-кадам: Маалыматтар базасын түзүү
Databasen patedb indeholder 4 tabeller
patelog er dataopsamlingstabellen, tilskrives data af node-RED og C# programmet
C# программасы боюнча дайындар, таблицанын маалыматтары
customertable er et kunderegister
rangetable er en tabel som indeholder grænseværdierne for de i C# programmet benyttede диапазондору.
5 -кадам: Пателог
Табулатура индекси 6 колдонуучудан турат:
pateID (int) автоматтык негизги ачкыч.
Убакыт белгиси, UID & жазууну өчүрүү (med forskellig max længde)
диапазон жок
orderID кат жазуу int (C# программасынын буйругу ID)
Түйүн-КЫЗЫЛ тилкенин чоңдугу менен катарNN жана orderID. rangeNr og orderID иштетүүчү NULL режиминде, мен C# программасын иштеп чыгууну сунуштайм.
6 -кадам: Ордотабелдүү
ordertable indeholder 5 kolonner:
orderID (int) эң маанилүү буйрук
orderQuant (mediumint) er ordens pålydende antal
QuantProduced (mediumint) продюсерлердин арендага алуу мүмкүнчүлүгү. (C# программасы боюнча суроолор)
комментарий (tinytext) er en eventuel kommentar til ordren.
customerID (int) эң маанилүү болуп саналат.
7 -кадам: Customertable
customertable indeholder 6 kolonner:
customerID (int) er key key og auto inc.
аты, дареги, телефону, электрондук почтасы (varchar) med forskellig max længde
диапазонNr (int)
8 -кадам: Rangetable
3 колонер:
rangeNr (int) er key key og auto inc.
rangeMin (int)
rangeMax (int)
9 -кадам: C# программасы
Негизги продюсерлер төмөнкү эрежелерди аткарышат:
Кундер, буйруктар, буйруктар жана сунуштар C# программасы боюнча сыналгы (программалар менен иштөө. Бул өндүрүштүн башталышын камсыз кылуу үчүн башталат). på et transportbånd) UID жана VID коддору түйүн-КЫЗЫЛга чейин берилиштерди, панелдин маалымат панелинде жана башка маалымат панелдеринде көрсөтүлөт. tidspunkt ikke tilskrives диапазонуNR жана orderID вил де have værdien NULL.
Убакыт аралык интерфейс C# программасы plateb.patelogtabellen үчүн, NULL жана башка тармактар үчүн программаланган. NULL даректери жокко чыгарылганда, бир катар диапазондорNr жана башка тилкелерде тартипти орнотуу керек. Продукцияны өндүрүү үчүн, "токтотуу" керек болсо- токтотуу. Төмөнкү буйруктарды аткарсаңыз болот: катталган убакыттын өтүшү менен. Жөнөкөй маалымат жок болгондо, дайындар дагы, каталогдор да берилиштерди жаңыртууда DataGridview жаңыртууну талап кылат. заказ кылуу мүмкүнчүлүктөрү, жана жеке буйрутмалар UID'лердин жеке маалыматтары.
колдонуу 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
{коомдук жарым -жартылай класс Form1: Форма {MySqlConnection байланыш = жаңы MySqlConnection ("маалымат булагы = localhost; колдонуучу аты = тамыр; пароль = ''"); int RowNumber = 0; // pateID маанисин сактоо үчүн өзгөрмө int RangeNumber = 0; // Rangenumber int салмагын сактоо үчүн өзгөрмө = 0; // Int OrderNr = 0 салмагын сактоо үчүн өзгөрмө; // OrderNR int QuantProduced сактоо үчүн өзгөрмө = 0; // өндүрүлгөн санды сактоо үчүн өзгөрмө int NumberOfRows = 0; // нөлдөр менен катар саны.. bool ProdRunning = false; // Баштоо жана токтотуу баскычтары иштетилгенин көрсөтүүчү өзгөрмө int limits = new int [6]; // int CustomerID массивин инициализациялоо; // customerID коомдук формасын сактоо үчүн өзгөрмө1 () {InitializeComponent (); load_table (); // чалуу load_table}
void load_table ()
{MySqlCommand буйругу = жаңы MySqlCommand ("SELECT * FROM patedb.patelog ORDER BY timestamp DESC;", байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}
жеке боштук SetRowOrder ()
{dataGridView1. Columns ["pateID"]. DisplayIndex = 0; // Колдонуучулардын тизмеси dataGridView1. Columns ["timestamp"]. DisplayIndex = 1; // Колдонуучунун дайындары dataGridView1. Columns ["UID"]. DisplayIndex = 2; // Колдонуучунун дайындары dataGridView1. Columns ["weight"]. DisplayIndex = 3; // Колдонуучулардын тизмеси dataGridView1. Columns ["rangeNr"]. DisplayIndex = 4; // Ал каттар менен иштөөдө dataGridView1. Columns ["orderID"]. DisplayIndex = 5; // Her kan rækkefølgen in kolonner ændres}
жеке боштук GetData_Click (объект жөнөтүүчү, EventArgs e) // Убакыт белгиси боюнча маалымат базасынын таблицасын жана заказдарын окуйт
{load_table (); }
жеке боштук btnRefreshUID_Click (объект жөнөтүүчү, EventArgs e) //
{string timeStr = "SELECT * FROM patedb.patelog ORDER by UID;"; MySqlCommand буйругу = жаңы MySqlCommand (timeStr, байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}
жеке боштук btnRefreshValue_Click (объект жөнөтүүчү, EventArgs e)
{string weightSort = "SELECT * FROM patedb.patelog ORDER by CAST (салмагы КОЛ КОЮЛГАН КЕЗДЕ);"; MySqlCommand буйругу = жаңы MySqlCommand (weightSort, байланыш); аракет {MySqlDataAdapter адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; SetRowOrder (); adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }}
жеке боштук ChkNullBtn_Click (объект жөнөтүүчү, EventArgs e)
{if (ProdRunning) {CheckTableForNull (); load_table (); }}
жеке боштук CheckTableForNull ()
{// Таймер аралыкты текшерүү/коюу минималдуу 100 мс int i; int. TryParse (textTimer1. Text, i чыгып); if (i <100) {timer1. Stop (); i = 100; таймер1. Аралык = i; MessageBox. Show ("Минималдуу мааниси i 100mS"); таймер1. Start (); } else {timer1. Interval = i; } textTimer1. Text = timer1. Interval. ToString (); // Таблицада нөлгө ээ болгон саптар бар экенин текшериңиз, өзгөрмөдөгү саптардын санын кайтарат: NumberOfRows string weightStr = ""; string chkNull = "COUNT (*) ТАНДОО patedb.patelog WHERE rangeNR NULL ЗАКАЗЫ pateID LIMIT 1 БОЛОТ;"; MySqlCommand буйругу = жаңы MySqlCommand (chkNull, туташуу); аракет {connection. Open (); NumberOfRows = Convert. ToInt32 (command. ExecuteScalar ()); connection. Close (); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } акыры {if (NumberOfRows! = 0) {try {// диапазондогу NULL сап болгон эң төмөнкү pateID номерин тандайт readID = "SEAT pateID FROM patedb.patelog WHERE rangeNR IS NULL ORDER BY pateID ASC LIMIT 1;"; MySqlCommand cmdID = жаңы MySqlCommand (readID, туташуу); {connection. Open (); RowNumber = (int) cmdID. ExecuteScalar (); // бүтүн сан !! connection. Close (); } listPateID. Text = RowNumber. ToString (); // тандалган PateID номерин окуу // Тандалган катардан сапты тандоо = RowNumber. ToString (); string readweight = "SELECT weight FROM patedb.patelog WHERE pateID =" + катар; MySqlCommand cmdweight = жаңы MySqlCommand (окуу салмагы, байланыш); {connection. Open (); weightStr = (сап) cmdweight. ExecuteScalar (); // String !! connection. Close (); } салмагы = int. Parse (weightStr); // int txtWeight. Text = weight. ToString () ге айландыруу; // print int RangeNumber = 0; if (weight> = limits [0] && weight = limits [2] && weight = limits [4] && weight <= limits [5]) {RangeNumber = 3; }} txtRange. Text = RangeNumber. ToString (); UpdateLog (); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } QuantProduced = QuantProduced + 1; }}} жеке боштук btnStart_Click (объект жөнөтүүчү, EventArgs e) {if (ProdRunning == false) {int valtest; аракет {CustomerID = int. Parse (txtCustomerNr. Text); // read customerID} кармоо {MessageBox. Show ("Өндүрүш маалыматтарын киргизип," баштоо "баскычын басыңыз."); }
string test = "SELECT COUNT (*) FROM patedb.customertable WHERE customerID ="+CustomerID;
MySqlCommand cmdtestcustomer = жаңы MySqlCommand (тест, туташуу); {connection. Open (); valtest = Convert. ToInt32 (cmdtestcustomer. ExecuteScalar ()); // кардар байланыш жок болсо 0 кайтарат. Close (); } if (valtest == 1) // эгерде кардар базада бар болсо - өндүрүштү баштаңыз {try {OrderNr = int. Parse (txtOrderNumber. Text); ProdRunning = true; таймер1. Start (); textTimer1. Text = timer1. Interval. ToString (); ReadLimits (); } catch (Exception ex) {MessageBox. Show ("Өндүрүш маалыматын киргизип," баштоо "баскычын басыңыз."); }} else MessageBox. Show ("Кардар базада жок, кайра аракет кыл"); } // ReadLimits (); }
жеке боштук ReadLimits ()
{// Чектөөлөрдү окуйт, 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 (); чектер [counter] = (int) cmdmin. ExecuteScalar (); counter = counter + 1; connection. Close (); } // MessageBox. Show (counter. ToString ()); string readmax = "SELECT rangeMax FROM patedb.rangetable WHERE rangeNr =" + rangeNr; MySqlCommand cmdmax = жаңы MySqlCommand (readmax, туташуу); {connection. Open (); чектер [counter] = (int) cmdmax. ExecuteScalar (); counter = counter + 1; connection. Close (); }} // циклдин аягы}
жеке боштук UpdateLog ()
{// UPDATE rangeNR & orderID сабы 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 (); connection. Close (); } кармоо (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 (); connection. Close (); QuantProduced = 0; } кармоо (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 адаптер = жаңы MySqlDataAdapter (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Stop to wie 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 = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); } connection. Close (); } 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 (); adapter. SelectCommand = буйрук; DataTable dbdataset = жаңы DataTable (); adapter. Fill (dbdataset); BindingSource bsource = жаңы BindingSource (); bsource. DataSource = dbdataset; dataGridView1. DataSource = bsource; adapter. Update (dbdataset); } кармоо (Exception ex) {MessageBox. Show (ex. Message); }} else {MessageBox. Show ("Кардардын чоо -жайын билүү үчүн аялдаманы басыңыз"); }}}
}
Сунушталууда:
Howto: Rpi-imager жана сүрөттөр менен Raspberry PI 4 Headless (VNC) орнотуу: 7 кадам (Сүрөттөр менен)
Howto: Rpi-imager жана сүрөттөр менен Raspberry PI 4 Headless (VNC) орнотуу: Мен бул блогумда кызыктуу долбоорлордун топтомунда бул Rapsberry PI колдонууну пландап жатам. Аны текшерүүдөн тартынбаңыз. Мен Raspberry PIди колдонууну каалагам, бирок жаңы жерде клавиатура же чычкан жок болчу. Мен Raspberry орнотконума бир топ убакыт болду
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: 13 кадам (сүрөттөр менен)
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: Бул компьютерди кантип ажыратуу керектиги жөнүндө көрсөтмө. Негизги компоненттердин көбү модулдук жана оңой эле алынып салынат. Ошентсе да, бул боюнча уюштуруу маанилүү. Бул сизди бөлүктөрдү жоготпоого, ошондой эле кайра чогултууга жардам берет
EAL-Industry 4.0-Smart Rocket: 8 кадам (Сүрөттөр менен)
EAL-Industry 4.0-Smart Rocket: Бул мектеп долбоору, Данияда Erhversakademiet Lilleb æ ltде жасалган. Долбоор " Industri 4.0 " деп аталган класста жасалган. принциптер.Система жөндөмдүү болушу керек
Fidget Spinnerди колдонуу менен Arduinoдогу Hall Effect Sensor: 3 Steps (Сүрөттөр менен)
Fidget Spinner колдонуп Arduinoдо Hall Effect Sensor: Кыскача Бул долбоордо мен зал эффекти сенсорунун ардуино тактасы менен фиджет спиннеринин ылдамдыгын өлчөө кандайча иштээрин түшүндүрүп жатам. иштөө: -Халл эффекти сенсору-бул магнит талаасына жооп катары анын чыгуу чыңалуусун өзгөртүүчү өзгөрткүч. Холл эффекти
NODEMCU LUA ESP8266 MCP23017 менен 16 Bit Port Expander IC: 6 Steps (Сүрөттөр менен)
NODEMCU LUA ESP8266 MCP23017 менен 16 Bit Port Expander IC: MCP23017 - бул чиптин эки жагында А жана В порттары бар жана казыктар ырааттуу тартипте болгондуктан, такта жасоо үчүн салыштырмалуу оңой IC. Бул ICде колдонулбаган 2 пин бар