ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 11
Abonament PDF

Dezvoltarea de aplicații safety-critical în SCADE

Hunor Csomortani
Software Developer
@Evoline



DIVERSE


Cerințele impuse de standardele în domeniu fac ca dezvoltarea aplicațiilor critice din punctul de vedere al securității (safety-critical software) să reprezinte o provocare continuă pentru toți participanții în proces. Mediul de dezvoltare SCADE impune rigurozitatea necesară pentru aceste proiecte chiar de la începutul dezvoltării. Bazându-se pe un limbaj sincron, determinist, cu generator de cod C certificat și un set de instrumente care facilitează testarea și verificarea produsului, SCADE permite să ne concentrăm la implementarea cerințelor de nivel înalt, și ne scapă de grija comiterii greșelilor de bază.

Articolul propune să facă o scurtă prezentare a mediului de dezvoltare, prezentând avantajele, dezavantajele și provocările la care programatorul trebuie să facă față.

Mediul de dezvoltare SCADE

Mediul de dezvoltare SCADE se bazează pe limbajul Scade, limbaj sincron conceput pentru dezvoltarea sistemelor reactive. Extensia oferită de SCADE acestui limbaj este un mediu de dezvoltare grafică, care permite modelarea aplicației într-un mod foarte asemănător proiectării circuitelor integrate.

Dezvoltarea în SCADE înseamnă crearea unor operatori, prezentând funcționalitatea acestora pe diagrame, folosind un set de operatori predefiniți. Diagramele pot fi de tip data flow sau control flow (automate finite), fiind posibilă și combinarea acestor două abordări. Prin legarea operatorilor se creează modelul unei aplicații reactive, menit să fie rulat ciclic, la începutul fiecărui ciclu citind valorile de intrare și calculând valorile de ieșire, luând în considerare și stările interioare al sistemului.

Tipurile de date disponibile sunt cele de bază (int, real, char, bool), având posibilitatea de a defini propriile tipuri compuse (șiruri, enumerări, structuri) sau a importa tipuri declarate în C sau C++. La fel este posibil și folosirea unor operatori importați, a căror funcționalitate este implementată în alte limbaje de programare.

Sincronicitatea modelului înseamnă că rezultatele calculate sunt independente de ordinea de execuție, ele având o singură valoare posibilă în cadrul unui ciclu. Astfel concepția de "timp" poate fi omisă - o abstractizare utilă în cazul sistemelor reactive, având ca rezultat un timp finit de execuție a aplicației, care respectă constrângerile mediului de operare.

SCADE impune aceste constrângeri teoretice în timpul modelării, dar și printr-un pas de verificare a modelului creat. Aceasta din urmă asigură corectitudinea designului creat din toate punctele de vedere, având un rol asemănător unui compilator.

La capitolul de verificare putem folosi simulatorul pentru a pune modelul creat în mișcare. Setând valori pentru interfețele de intrare se poate verifica starea celei mai mici părți al acestuia: valorile variabilelor, al fluxurilor de date între operatori și în interiorul acestora, tranzițiile și stările active al automatelor finite.

Exemplu

De exemplu, să modelăm o aplicație care controlează un sistem de închidere. Să fie valoarea de intrare starea unui buton de comandă (apăsat sau nu), iar valoarea de ieșire comanda de închidere sau deschidere.

Primul operator va transforma starea butonului într-o valoare rising edge: true numai în cazul în care starea butonului se schimbă din neapăsat în apăsat. Funcționalitatea poate fi modelată în modul următor:

În celălalt operator modelăm stările sistemului (închis/deschis), și tranzițiile posibile între aceste stări, cu ajutorul unui automat finit. Condiția de activare a tranzițiilor este valuarea true a variabilei command.

În pasul următor putem lega cei doi operatori, creând modelul aplicației.

Generare de cod C

Cu ajutorul generatorului de cod KCG putem transforma modelele create într-un cod C compilabil, lipsit de erori low level de programare. Deoarece precondiția generării este un model valid, codul C păstrează calitățile teoretice - sincronicitate, determinism - al acestuia.

Integrarea codului se realizează prin apelarea funcțiilor C generate. Se poate crea o clasă wrapper, care să reprezinte interfața între funcțiile C și restul aplicației, creând un singur punct de dependență față de codul generat. Această abordare ne permite ca fișierele C să devină obiecte temporare în procesul de build, modelul SCADE preluând rolul de cod sursă.

Generatorul este certificat conform mai multor standarde de securitate din industrie: DO-178B (aplicații din domeniul aeronauticii și apărării), EN 50128 (aplicații din domeniul transportul feroviar), IEC 61508 (aplicații din domeniul industriei și energeticii) ș.a.m.d., lucru care facilitează procesul de acceptanță a sistemelor dezvoltate cu ajutorul SCADE.

Operatorul RisingEdge din exemplul precedent este transformată în următoarea funcție C:

/* Playground::RisingEdge */
void RisingEdge_Playground(
  inC_RisingEdge_Playground *inC,
  outC_RisingEdge_Playground *outC)
{
  kcg_bool tmp;
  
  if (kcg_cond(outC->init)) {
    outC->init = kcg_false;
    tmp = kcg_not(inC->btnPressed);
  }
  else {
    tmp = kcg_not(outC->rem_btnPressed);
  }
  outC->isRising = kcg_and(tmp, inC->btnPressed);
  outC->rem_btnPressed = inC->btnPressed;
}

Avantaje

Prin dezvoltarea în SCADE se poate asigura un nivel de calitate ridicat al aplicației pe tot parcursul procesului de dezvoltare, nefiind necesară folosirea altor instrumente în acest sens. Constrângerile teoretice al sincronicității, aplicate din primul moment, oferă siguranța că rezultatul va face față cerințelor impuse aplicațiilor safety-critical: sistemul va avea o stare bine definită în toate condițiile și va reacționa într-un timp finit, ușor de definit și măsurat. În același timp diagramele sunt suficient de auto-explicative ca să reprezinte un mijloc bun de comunicare între participanții în proiect.

Dezavantaje

Punctele forte uneori însă devin și cele slabe: abordarea grafică cere o atenție mult mai mare în cazul dezvoltării în echipă. În timp ce pentru obiectele textuale avem la dispoziție instrumente mature pentru a îmbina progresul făcut de mai mulți participanți, în cazul diagramelor grafice acest lucru este o provocare continuă, lucru imposibil uneori, și o situație mai bine de evitat.

Din cauza rigurozității limbajului, dependințele dintre fișierele de model sunt mult mai mari: de exemplu, interfețele între operatori trebuie să corespundă în mod exact pentru a avea un model valid, ceea ce necesită o cooperare mult mai strânsă între dezvoltatori.

SCADE ne oferă soluții limitate și de cele mai multe ori foarte greoaie pentru a trata structuri de date foarte mari și complexe. La fel, nu este soluția ideală pentru dezvoltarea aplicațiilor care implică efectuarea unor calcule intensive.

Provocări

Cea mai mare provocare la care programatorul trebuie să facă față este să se obișnuiască cu abordarea sincronă. Foarte multe constrângeri, care în alte limbaje pot fi impuse numai prin tool-uri separate sau o arhitectură vizată, în SCADE constituie o parte integrantă a limbajului de bază și a mediului de dezvoltare, ruperea acestora fiind imposibilă chiar și în cazuri în care acesta ar fi un lucru dorit.

Concluzii

Bazându-se pe un limbaj sincron, SCADE impune ca însușirile cele mai importante ale aplicațiilor reactive - timp finit de execuție și stări bine definite în toate condițiile - să fie respectate pe tot parcursul procesului de dezvoltare. Generatorul de cod certificat facilitează transformarea modelelor create în cod C și integrarea în restul sistemului. Cu toate dezavantajele sale, mediul de dezvoltare SCADE este o soluție matură și potrivită pentru dezvoltarea aplicațiilor safety-critical.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects