Kamusta kayong lahat. Madalas kong inilalapat ang mga prinsipyo ng system engineering sa aking trabaho at nais kong ibahagi ang pamamaraang ito sa komunidad.
Systems engineering - walang mga pamantayan, ngunit sa madaling salita, ito ay ang proseso ng pagbuo ng isang sistema bilang medyo abstract na mga bahagi, nang walang pagtukoy sa mga partikular na sample ng device. Sa prosesong ito, ang mga katangian ng mga bahagi ng system at ang mga koneksyon sa pagitan ng mga ito ay itinatag. Bukod pa rito, kinakailangan na gawing pare-pareho at pinakamainam ang system at natutugunan ng system ang mga kinakailangan. Sa tutorial na ito ipapakita ko ang mga system engineering technique gamit ang halimbawa ng pagdidisenyo ng medyo simpleng access control system (ACS).
Pagbubuo ng paunang arkitektura
Kapag ang isang sistema, kahit na ano, ay nagsisimula pa lamang na mabuo, ang mga parihaba na may mga arrow ay lilitaw sa ating mga ulo o sa papel. Ang ganitong mga parihaba ay ang mga sangkap mga sistema. At ang mga arrow ay соединения sa pagitan ng mga bahagi. At madalas na wala kaming oras upang umupo at mag-isip tungkol sa kung paano gagana ang lahat ng mga bahagi na tinukoy namin sa isa't isa, at sa huli ay nagsisimula kaming lumikha ng isang grupo ng mga saklay, na nagmumula sa mga kalabisan na disenyo.
Mahalagang tandaan na mula sa punto ng view ng system at ang arkitektura nito, ang isang bahagi ay medyo abstract na bagay. Halimbawa, kung ang aming system ay may microcontroller, kung gayon sa antas ng arkitektura ay mahalaga lamang sa amin na ito ay isang microcontroller, at hindi na ito ay STM32, Arduino o Milander. Bukod dito, madalas na hindi malinaw sa amin kung ano ang eksaktong magiging sa system, at bumaling kami sa system engineering upang bumuo ng mga kinakailangan para sa kagamitan, software, atbp.
Para sa aming halimbawa sa ACS, susubukan naming bumalangkas ng layunin nito. Makakatulong ito sa amin sa pagtukoy ng mga bahagi nito. Kaya, ang gawain ng access control system ay payagan ang isang limitadong bilog ng mga tao sa silid. Iyon ay, ito ay isang matalinong lock. Dahil dito, mayroon kaming unang bahagi - isang uri ng device na nagla-lock at nagbubukas ng pinto! Tawagan natin siya Kandado ng pinto
Paano natin malalaman na makapasok ang isang tao? Ayaw nating maglagay ng bantay at suriin ang mga pasaporte, hindi ba? Bigyan natin ang mga tao ng mga espesyal na card na may mga RFID tag, kung saan magre-record kami ng mga natatanging ID o iba pang data na nagbibigay-daan sa aming tumpak na makilala ang isang tao. Pagkatapos, kakailanganin namin ng ilang device na makakabasa ng mga tag na ito. Mahusay, mayroon kaming isa pang bahagi, RFIDReader
Tingnan natin muli kung ano ang nakuha natin. RFIDReader nagbabasa ng ilang data, may ginagawa ang access control system dito, at batay dito may kontrolado Kandado ng pinto. Itanong natin ang sumusunod na tanong - saan iimbak ang listahan ng mga taong may mga karapatan sa pag-access? Pinakamahusay sa database. Samakatuwid, ang aming system ay dapat na makapagpadala ng mga kahilingan at magproseso ng mga tugon mula sa database. Kaya mayroon kaming isa pang bahagi - DBHandler. Kaya, nakatanggap kami ng isang napaka-abstract, ngunit sapat na upang magsimula sa, paglalarawan ng system. Naiintindihan namin kung ano ang dapat gawin at kung paano ito gumagana.
Sa halip na isang piraso ng papel, gagamitin ko ang System Composer, isang espesyal na tool para sa pagmomodelo ng mga arkitektura ng system sa kapaligiran ng Simulink, at lumikha ng 3 bahagi. Sa itaas ay inilarawan ko ang mga koneksyon sa pagitan ng mga bahaging ito, kaya agad nating ikonekta ang mga ito:

Pagpapalawak ng arkitektura
Tingnan natin ang aming diagram. Mukhang maayos ang lahat, ngunit sa katotohanan ay hindi. Tingnan ang system na ito mula sa pananaw ng user - dinadala ng user ang card sa mambabasa at...? Paano malalaman ng isang user kung sila ay pinapayagan o tinanggihan ng access? Ito ay kinakailangan upang ipaalam sa kanya ang tungkol dito kahit papaano! Samakatuwid, magdagdag tayo ng isa pang bahagi - notification ng user, UserNotify:

Ngayon ay bumaba tayo sa isang mas mababang antas ng abstraction. Subukan nating ilarawan ang ilang bahagi nang mas detalyado. Magsimula tayo sa bahagi RFIDReader. Sa aming system, responsable ang bahaging ito sa pagbabasa ng RFID tag. Ang output nito ay dapat maglaman ng ilang data (UID, data ng user...). Ngunit maghintay, ang RFID, tulad ng NFC, ay pangunahing hardware, hindi software! Samakatuwid, maaari nating ipagpalagay na hiwalay na mayroon tayong RFID chip mismo, na nagpapadala ng "raw" na data sa ilang uri ng preprocessor. Kaya, mayroon kaming abstract na piraso ng hardware na makakabasa ng mga RFID tag, at abstract software na maaaring mag-convert ng data sa format na kailangan namin. Tawagan natin sila RFIDsensor и RFIDparser ayon sa pagkakabanggit. Paano ito ipapakita sa System Composer? Maaari mong alisin ang isang bahagi RFIDReader at maglagay ng dalawang bahagi sa halip, ngunit mas mainam na huwag gawin ito, kung hindi, mawawala ang pagiging madaling mabasa ng arkitektura. Sa halip, pumasok tayo sa loob ng RFIDReader at magdagdag ng 2 bagong bahagi:

Mahusay, ngayon ay magpatuloy tayo sa pag-abiso sa user. Paano aabisuhan ng system ang user na siya ay tinanggihan o pinapayagang ma-access ang lugar? Nakikita ng isang tao ang mga tunog at isang bagay na pinakamahusay na kumikislap. Samakatuwid, maaari kang mag-isyu ng isang tiyak na signal ng tunog upang ang gumagamit ay magbayad ng pansin, at i-blink ang LED. Idagdag natin ang mga naaangkop na bahagi sa UserNotify:

Nagawa namin ang arkitektura ng aming system, ngunit may mali dito. Ano? Tingnan natin ang mga pangalan ng koneksyon. InBus и OutBus - hindi masyadong normal na mga pangalan na makakatulong sa developer. Kailangan nilang palitan ang pangalan:

Kaya, tiningnan namin kung paano inilalapat ang mga pamamaraan ng system engineering sa pinakamahirap na pagtatantya. Ang tanong ay arises: bakit gamitin ang mga ito sa lahat? Ang sistema ay primitive, at tila ang gawaing ginawa ay hindi kailangan. Maaari kang agad na magsulat ng code, magdisenyo ng database, magsulat ng mga query o maghinang. Ang problema ay kung hindi mo iniisip ang system at nauunawaan kung paano konektado ang mga bahagi nito sa isa't isa, kung gayon ang pagsasama ng mga bahagi ng system ay magtatagal at magiging masakit.
Ang pangunahing takeaway mula sa bahaging ito ay:
Ang paggamit ng mga pamamaraan ng system engineering at pagmomodelo ng arkitektura sa pagbuo ng system ay nagpapahintulot sa isa na bawasan ang mga gastos sa pagsasama ng mga bahagi at pagbutihin ang kalidad ng binuong sistema.
Pinagmulan: www.habr.com
