Aplicatie Informatica Pentru Gestionarea Si Prelucrarea DE Date Necesare Unui Echipament DE Diagnosticare Auto

APLICATIE INFORMATICA PENTRU GESTIONAREA SI PRELUCRAREA DE DATE NECESARE UNUI ECHIPAMENT DE DIAGNOSTICARE AUTO

Contents

Introducere

Capitolul 1. Prezentarea proiectului

Capitolul II. Fundamentare Teoretica

II.1. Microsoft Visual C#

II.2. Krypton Suite

II.3.Microsoft Excel

II.4. Can Bus (Controller Area Network)

II.4.1.Sistemul Binar

II.4.2.Operatori logici

II.4.3.Sistemul hexazecimal

II.4.3.ISO standards

Capitolul III. Prezentarea Aplicatiei

III.1. Prezentarea modulelor aplicatiei

III.1.1 Modul File

III.1.2 Modul Create Datasheet

III.1 .3 Modul Load existing datasheet

III.1 .4 Modul SheetSelect

III.1 .5 Modul Live Data

IV.Manual de utilizare

IV.1 Pregatirea fisierului de lucru :

IV.1.1 Modul Create New Datasheet :

IV.1.2 Modul Load Existing Datasheet :

IV.2 Selectarea Tabului :

IV.3 Inserarea Datelor :

IV.3.1 modul Is Digital :

IV.3.1.1 Modul Is Digital cu 2 stari :

IV.3.1.2 Modul Is Digital cu mai mult de 2 stari :

IV.3.1.3 Modul Is Linear :

Concluzii, propuneri

Bibliografie

Introducere

In urma cu mai multi ani, am decis sa-mi dezvolt cariera in domeniul automotive , unde am inceput ca tehnician de service , loc unde mi-am dezvoltat cunostiintele a ce inseamna arhitectura unui automobil , mai tarziu avand oportunitatea de a lucra intr-o echipa de suport hardware , unde am dezvoltat diverse echipamente de testare a aplicatiilor dezvoltate de echipele de ingineri ai companiei . In prezent fac parte dintr-o echipa de dezvoltare a echipamentelor de diagnosticare auto. Am ales sa-mi dezvolt cariera in acest domeniu deoarece :

Industria automobilelor este intr-o dezvoltare continua , companiile care dezvolta aceaste activitati in tara noastra, sunt in plina ascensiune :

Dezvoltarea fără  precedent a industriei auto la nivel european înregistrată  în ultimele 3 decenii s‐a bazat pe o cerere internă în continuă expansiune determinată la rândul său de factori interni precum creșterea gradului de motorizare în  țările europene  și de mărirea  și întinerirea mai rapidă a parcului auto, pe de o parte și de creșterea spectaculoasă a piețelor emergente (piețele asiatice, în special cea chineză),  pe de altă parte.  [1]

Unul dintre liderii mondiali de echipamente electronice auto, Continental Automotive Romania S.R.L – Prin toate activitățile companiei din România am putut să creștem în ultimii ani cu peste 1.000 de persoane anual. Pentru că am înmulțit activitățile noastre de cercetare și dezvoltare în România, numărul angajaților a crescut până la aproximativ 4.000 în locațiile Iași, Sibiu și Timișoara, care joacă un rol important la nivel global în structura R&D Continental.[2]

Unul dintre marii producatori de piese auto, Valeo – Valeo este o companie franceză specializată în producția de echipamente și componente pentru industria auto. Compania produce diverse componente auto, de la faruri până la sisteme electrice și de la transmisii până la sisteme de climatizare.Valeo este unul dintre cele mai importante gruprui industriale independente specializate în furnizarea de piese auto. Compania a realizat în anul 2001 vânzări de peste 10 miliarde de euro.În anul 2002, compania activa în 24 de țări, deținea 139 de fabrici și aproape 71.000 de angajați. [3]

Un alt lider mondial de echipamente electronice auto care isi desfasoara activitatea pe teritoriul tarii noastre este Bosch – La Blaj, din 2005 se află o unitate de producție pentru tehnică liniară, care este în prezent extinsă cu o unitate de producție destinată industriei auto. În Timișoara se află din anul 2008 un centru de comunicare. În 2014, Grupul Bosch a inaugurat în Cluj-Napoca un nou centru de cercetare și de producție pentru fabricarea și dezvoltarea de unități electronice de comandă destinate industriei auto. Numărul total de angajați ai concernului Bosch în România este de circa 2.000 de persoane.[4]

Industria automobilistică este o gamă largă de companii și organizații implicate în proiectarea, dezvoltarea, producerea și comercializarea autovehiculelor. Este unul din cele mai importante sectoare economice după venit. Industria automobilistică nu include industriile dedicate întreținerii automobilelor după livrarea lor la utilizatorul final, cum ar fi atelierele de reparații auto și stațiile de alimentare cu carburanți.[3]

In compania pentru care lucrez, se dezvolta diverse aplicatii pentru autovehicule de pasageri cat si pentru autovehicule comerciale. Una dintre acestea fiind aplicatia de diagnosticare auto .

Sistemul informatic “ Aplicație informatică pentru gestionarea si prelucrarea de date necesare unui echipament de diagnosticare auto “ se încadrează în categoria baze de date care va fi utilizat pentru a eficienta si elimina erorile aparute in procesul de introducere a datelor de intrare, inaintea importarii intr-o baza de date ce urmeaza a fi integrata in echipamentul de diagnosticare auto.

Capitolul 1. Prezentarea proiectului

Echipa din care fac parte se ocupa cu pregatirea si testarea conformitatii datelor ce urmeaza a fi introduse intr-o baza de date ce va fi importata intr-un echipament de testare auto . Datele sunt introduse manual intr-un document Excel , de unde urmeaza a fi importate intr-o baza de date MySql .

S-a constat in timp ca „Etapa 1. Introducerea datelor in worksheet/Verificare” este un proces greoi si plictisitor fiind necesara inserarea manuala a fiecareui celule la care sunt aplicate diverse politici pentru caractere , formulele de calcul fiind nepermise . Datorita acestor factori , numarul de erori este tot mai mare. Depanarea in „Etapa 2 Verificarea datelor introduse/Testarea in modul de depanare” se face cu usurinta si are costuri reduse, dar in acelasi timp unele erori nu pot fi depistate in aceasta faza de testare , ele ajungand in etapa de „Validare/Testare finala” , etapa care nu include verificarea/validarea datelor introduse , datorita considerentului ca datele introduse au fost validate in Etapa1 respectiv Etapa 2 . Urmatoarea etapa de testare este se face cu echipamentul de testare in masina, unde depanarea erorilor din aceasta faza genereaza costuri foarte mari , si nici aceasta faza nu include testarea datelor introduse , ea incluzand doar cativa pasi , printre care afisarea corecta si completa a caracterelor , testarea comunicarii , stergerii erorilor .

Plecand de la aceasta premisa, am propus sa construim o aplicatie care sa usureze si sa eficientizeze procesul de introducere a datelor . Pentru a realiza acest proiect este necesar sa avem cunostiinte despre :

– Logica Binara (conversia numerelor intre bazele b₂, b₁₀, b₁₆ )

– Operatori Logici

– CAN bus

– Standarde ISO(UDS on CAN, K-line, KW2000 etc.)

– Krypton Toolkit

– Microsoft Excel

– C#

Capitolul II. Fundamentare Teoretica

II.1. Microsoft Visual C#

C# face parte din grupa de produse oferita de Platforma .NET, care pune la dispozitie un set de limbaje ca C#, Visual Basic .NET, C++, JScript.NET,Pascal si multe alte limbaje , un set de medii de dezvoltare ca Visual Studio .NET , infrastructura .NET Framework si o bibloteca care cuprinde multe clase pentru creearea aplicatiilor Web si Windows . [11]

C# este un limbaj modern orientat pe obiecte. O aplicatie Windows creata in acest limbaj, consta in afisarea de ferestre sau formulare (Forms) cu care va interactiona utilizatorul cu ajutorul controalelor desenate pe acestea . Ele sunt elemente de baza ale interfetei cu utilizatorul . [11]

.NET Framework constituie un nivel de abstractizare intre aplicatie ¸si nucleulul sistemului de operare (sau alte programe), pentru a asigura portabilitatea codului; de asemenea integreaz˘a tehnologii care au fost lansate de catreMicrosoft incepˆand cu mijlocul anilor 90 (COM, DCOM, ActiveX, etc) sautehnologii actuale (servicii Web, XML). [11]

Una din uneltele de care dispune ingineria software este abstractizarea.Deseori vrem sa ferim utilizatorul de detalii, sa punem la dispozitia altoramecansime sau cunostinte generale, care sa permita atingerea scopului, fara afi necesare cunoasterea tuturor detaliilor. Daca interfata ramane neschimbata,se pot modifica toate detaliile interne, fara a afecta actiunile celorlati beneficiary ai codului. [11]

Microsoft a realizat ¸si el propria sa abstractizare de limbaj, aceasta numindu-se Common Intermediate Language. De¸si exist˘a mai multe limbajede programare de nivel inalt (C#, Managed C++, Visual Basic .NET, etc),la compilare toate vor produce cod in acela¸si limbaj intermediar: Common Intermediate Language. Asemanator cu bytecod-ul, CIL are trasaturi POO,precum abstractizarea datelor, mostenirea, polimorfismul, sau concepte care s-au dovedit a fi extrem de necesare, precum excep¸tiile sau evenimentele. De remarcat ca aceasta abstractizare de limbaj permite rularea aplicatiilor independent de platforma (cu aceea¸si conditie ca la Java: sa existe o masina virtuala pentru acea platforma). [11]

Unul din scopurile .NET este de a sprijini integrarea limbajelor astfel incat programele, desi scrise in diferite limbaje, pot interopera, folosind din plin mostenirea, polimorfismul, incapsularea, exceptiile, etc. Dar limbajele nu sunt identice: de exemplu, unele sunt case sensitive, altele nu. Pentru a se asigura interoperabilitatea codului scris in diferite limbaje, Microsoft a publicat Common Language Specification (CLS), un subset al lui CTS(Common Type System), continand specificatii de reguli necesare pentru integrarea limbajelor. [11]

Trasaturi ale platformei .NET :

Dezvoltarea multilimbaj: Deoarece exista mai multe limbaje pentruaceasta platforma, este mai usor de implementat par¸ti specifice in limbajele cele mai adecvate. Numarul limbajelor curent implementate este mai mare decat 10. Aceasta dezvoltare are in vedere si debuggingul aplica¸tiilor dezvoltate in mai multe limbaje. [11]

Independenta de procesor ¸si de platforma: CIL este independentde procesor. O data scrisa si compilata, orice aplicatie .NET (al careimanagement este facut de catre CLR) poate fi rulata pe orice platforma.Datorita CLR-ului, aplicatia este izolata de particularitatile hardware sau ale sistemului de operare. [11]

Suportul pentru versionare: Ca o lectie invatata din perioada de“DLL Hell”, versionarea este acum un aspect de care se ¸tine cont. Daca o aplicatie a fost dezvoltata ¸si testata folosind anumite componente,instalarea unei componente de versiune mai noua nu va atenta la buna functionare a aplicatiei in discutie: cele doua versiuni vor coexista pasnic, alegerea lor fiind facuta pe baza manifestelor. [11]

Sprijinirea standardelor deschise: Nu toate dispozitivele ruleaza sisteme de operare Microsoft sau folosesc procesoare Intel. Din aceasta cauza orice este strans legat de acestea este evitat. Se folose¸ste XML ¸si cel mai vizibil descendent al acestuia, SOAP. Deoarece SOAP este un protocol simplu, bazat pe XML, ce folose¸ste ca protocol de transmisie HTTP, el poate trece u¸sor de firewall-uri, spre deosebire de DCOM sau CORBA. [11]

Distribuirea u¸soara: Actualmente instalarea unei aplica¸tii sub Windows inseamna copierea unor fisiere in ni¸ste directoare anume, modificarea unor valori in registri, instalare de componente COM, etc. Dezinstalarea completa a unei aplica¸tii este in majoritatea cazurilor o utopie. Aplica¸tiile .NET, datorita metadatelor ¸si reflectarii trec de aceste probleme. Se doreste ca instalarea unei aplica¸tii sa nu insemne mai mult decat copierea fisierelor necesare intr-un director, iar dezinstalarea aplica¸tiei sa se facaprin ¸stergerea acelui director. [11]

Arhitectura distribuita: Noua filosofie este de a asigura accesul la servicii Web distribuite; acestea conlucreaza la obtinerea informatiei dorite. Platforma .NET asigura suport ¸si unelte pentru realizarea acestui tip de aplica¸tii. [11]

Interoperabilitate cu codul “unmanaged”: Codul “unmanaged” se refera la cod care nu se afla in totalitate sub controlul CLR. El este rulat de CLR, dar nu beneficiaza de CTS sau garbage collection. Este sub Windows inseamna copierea unor fisiere in ni¸ste directoare anume, modificarea unor valori in registri, instalare de componente COM, etc. Dezinstalarea completa a unei aplica¸tii este in majoritatea cazurilor o utopie. Aplica¸tiile .NET, datorita metadatelor ¸si reflectarii trec de aceste probleme. Se doreste ca instalarea unei aplica¸tii sa nu insemne mai mult decat copierea fisierelor necesare intr-un director, iar dezinstalarea aplica¸tiei sa se facaprin ¸stergerea acelui director. [11]

Arhitectura distribuita: Noua filosofie este de a asigura accesul la servicii Web distribuite; acestea conlucreaza la obtinerea informatiei dorite. Platforma .NET asigura suport ¸si unelte pentru realizarea acestui tip de aplica¸tii. [11]

Interoperabilitate cu codul “unmanaged”: Codul “unmanaged” se refera la cod care nu se afla in totalitate sub controlul CLR. El este rulat de CLR, dar nu beneficiaza de CTS sau garbage collection. Este vorba de apelurile functiilor din DLL-uri, folosirea componentelor COM, sau folosirea de catre o componenta COM a unei componente .NET. Codulexistent se poate folosi in continuare. [11]

Securitate: Aplicatiile bazate pe componente distribuite cer automat securitate. Modalitatea actuala de securizare, bazata pe drepturile contului utilizatorului, sau cel din Java, in care codul suspectat este rulat intr-un “sandbox”, fara acces la resursele critice este inlocuit in .NET de un control mai fin, pe baza metadatelor din assembly (zona din care provine – ex. Internet, intranet, ma¸sina locala, etc) precum ¸si a politicilor de securitate ce se pot seta. [11]

II.2. Krypton Suite

Este un program care ne ajuta sa configuram interfata cu utilizatorul. Are in componenta sa butoane, grila penpentru text , etichete so altele (fig.II.2.1)

fig.II.2.1

Este usor de integrat in mediul de dezvoltare al codului sursa, C# . Ofera exemple atat pe partea de creeare a componentelor (fig.II.2.2)

fig.II.2.2

a aplicatiilor cu acestea (fig.II.2.3)

fig.II.2.3

si o documentatie detaliata

II.3.Microsoft Excel

Excel este un program de foi de lucru din sistemul Microsoft Office. El ofera posibilitatea de a crea și formata registre de lucru (o colecție de foi de lucru) pentru a analiza date și a lua decizii de afaceri fiind mai bine informați.[5]

Mai exact, cu Excel putem urmări date, genera modele pentru analiza de date, scrie formule pentru a efectua calcule cu acele date, pentru a aranja datele în diverse moduri și pentru a prezenta datele în mai multe tipuri de diagrame cu aspect profesionist.[5]

Printre scopurile obișnuite pentru care se utilizează Excel se numără:

Contabilitate    Avem posibilitatea să utilizam caracteristicile puternice de calcul din Excel în multe documente financiar-contabile, cum ar fi situația fluxurilor de numerar, declarațiile de venituri și declarațiile de profit și pierderi.[5]

Bugete    Indiferent dacă nevoile sunt personale sau de afaceri, avem posibilitatea să cream orice tip de buget în Excel, cum ar fi un plan de bugetare de marketing, un buget pentru un eveniment sau un buget pentru pensionare.[5]

Facturi și vânzări    Excel este util și pentru gestionarea datelor privind facturile și vânzările și avem posibilitatea să cream cu ușurință formularele necesare, cum ar fi facturi de vânzări, bonuri de livrare sau comenzi de achiziție.[5]

Rapoarte    Avem posibilitatea să cream diverse tipuri de rapoarte în Excel care reflectă analizele de date sau rezumă aceste date, cum ar fi rapoarte care măsoară performanțele unui proiect, care arată diferența dintre rezultatele proiectate și rezultatele reale sau rapoartele pe care le utilizați pentru a face previziuni despre date.[5]

Planificare    Excel este un foarte bun instrument pentru crearea planurilor profesionale sau a planificatoarelor utile, cum ar fi un orar școlar pentru o săptămână, un plan de cercetare de marketing, un plan de plată a impozitelor la finalul anului sau planificatoare care ne ajută să organizam dineurile, petrecerile săptămânale sau concediile.[5]

Urmărire    Excel poate fi utilizat pentru a urmări datele într-o foaie de pontaj sau o listă, cum ar fi o foaie de pontaj pentru urmărirea lucrului sau o listă de inventar care ține evidența echipamentului.[5]

Utilizarea calendarelor     Datorită suprafeței de lucru cu grilă, Excel este bun pentru a crea orice tip de calendar, cum ar fi un calendar școlar pentru a ține evidența activităților de-a lungul anului școlar sau un calendar de an fiscal pentru a urmări evenimentele de afaceri și punctele cheie.[5]

II.4. Can Bus (Controller Area Network)

Este o magistrala folosita in industria de automobile care asigura comunicarea intre doua sau mai multe microcontrolere . In versiunea 1.2 a standardul defineste lungimea campului de identificare de 11 biti ,tipul de mesaj standard, pe cand in versiunea 2.0 se adauga pe langa acesta un mesaj cu lungimea campului de identificare de 29 biti care poarta denumirea de mesaj extins (fig.II.4.1) [3]

Comunicarea

fig.II.4.1

Modelul de referinta OSI (Interconectarea Sistemelor Deschise) , este o stiva de protocoale de comunicatie folosite pentru a realiza o retea (fig.II.4.2) [3]

fig.II.4.2

II.4.1.Sistemul Binar

La baza programarii controlerelor sta sistemul binar. In sistemul binar exista doar 2 cifre posibile: „0” si „1”. Sistemul binar a inceput sa fie folosit odata cu aparitia logicii bivalente si defineste notiunea de propozitie ADEVARATA sau FALSA . Utilizarea acestui sistem s-a raspandit odata cu aparitia calculatoarelor si algebrei Boleene. In sistemul binar cifra 0 defineste o propozitie FALSA in timp ce cifra 1 defineste o propozitie ADEVARATA . Un grup de 8 biti formeaza un bait (octet) , baitul fiind cea mai mica unitate de masura adresabila de catre un calculator .[3]

II.4.2.Operatori logici

Acesti operatori nu sunt prevazuti de PASCAL-ul standard; ei au fost introdusi în implementarile noi ale limbajului, pentru a putea executa o serie de operatii la nivel de bit.[10]

Dupa cum am vazut in capitolele anterioare, un bait este alcatuit din 8 biti, care pot lua doar doua valori „0” si „1” . Un bait poate fi privit si ca doua jumatati , de exemplu „0000” si „1111” din engleza nibble, adica jumatate de bait sau octet . Aceasta convertit in hexazecimal inseamna „0F” .

Pentru a intelege mai bine operatorii logoci, vom lua ca exemplu un octet caruia ii vom aplica un „si” logic :

11100011 SI

10110001

10100001

Observam ca acolo unde am avut amandoi biti „1” logic de aceeasi valoare acestia si-au pastrat valoarea , ceilalti transformandu-se in „0” logic .

Sa aplicam asupra acestei operatii un „sau” logic :

11100011 SAU

10110001

11110011

Observam in exemplul de mai sus, ca acolo unde am avut bit de valoarea „1” logic , indiferent de valoarea celuilalt bit , rezultaul obtinut a fos „1” logic .

Pentru a putea interpreta mesajele transmise pe CAN intre ECU si obiect (componeta) folosim un caz particular numit masca pe biti , pe care o vom implementa cu ajutorul acestor operatori logici .

Vom lua ca exemplu un senzor de presiune si consideram ca fiecare bit are urmatoarea semnificatie:

Pentru a afla starea circuitului nu trebuie decat sa creem o masca careia ii aplicam un „si” logic . De exemplu , pentru a afla starea circuitului circuit deschis , vom aplica un „si”logic de forma 00001000 urmand ca de valoarea bitului 3 primit de controler , cand bitul 3 din octetul receptionat va primi valorea „1” vom avea indeplinita conditia de circuit deschis .[10]

Valoarea mastii este data de bitul cel mai semnificativ, in cazul nostru este data de bitul 6 .

La nivel de tabel , aceste date sunt prelucrate in sistemul numeric decimal si vom proceda in felul urmator :

Convertim fiecare bit al octetului din sistemul de numeratie binar in sistemul de numeratie in decimal :

In sistemul numeric binar nu putem avea valori mai mari decat „1” logic, iar noi ne asteptam ca unul dintre bitii „7……0” sa fie setat la un moment dat la valoarea „1” logic . Ca sa obtinem o masca logica exprimata in b₁₀ , vom raporta valorea corespunzatoare fiecarui bit (convertita din sistemul numeric binar in sistemul numeric decimal) la valoarea maxima ce o pate lua un bit , adica valoarea „1” si vom obtine urmatorul tabel cu valoarea scalara corespunzatoare fiecarui bit :

Bitul „0” ……………………………………………………………………1: 1 = 1

Bitul „1” ……………………………………………………………………1: 2 = 0.5

Bitul ”3” ……………………………………………………………………1: 4 = 0.250

Bitul „4” ……………………………………………………………………1: 8 = 0.125

Bitul „5” ……………………………………………………………………1: 16 = 0.0625

Bitul „6” ……………………………………………………………………1: 32 = 0.015625

Bitul „7” ……………………………………………………………………1: 64 = 0.007874016

Bitul „8” ……………………………………………………………………1:128 = 0.0078125

Cazul 1:

Am aratat in exemplul senzorului de presiune ca fiecarui bit ii putem atribui o stare . In exemplul dat , senzorului de presiune i-am atribuit mai multe stari . Masca logica va primi valoarea celui mai semnificativ bit daca formula aplicata va fi de forma :

Bit 0 :

00000001 AND

0000000X (unde x este variabila de intrare)

Bit 1:

00000010

000000X0

Bit 2:

00000100

00000X00

Bit 3:

00001000

0000X000

Bit 4:

00010000

000X0000

Bit 5:

00100000

00×00000

Bit 6:

01000000

0x000000

Prin setarea unei masti logice pe bitul „6” , bitul „7” nu va fi luat in considerare , cel mai semnificativ bit in acest caz fiind bitul „6” . In tabelul nostru acestea vor fi afisate in felul urmator :

Cazul 2 :

Sa luam exemplul senzorului de presiune si sa-i atribuim cele 6 stari in felul urmator :

Pentru a putea aplica o masca in acest caz, este nevoie sa aplicam un SAU logic octetului nostru , unde pe langa variabila de intrare X vom transforma si bitul nostru intr-o variabila :

Bitul „0” :

0000000Y SAU

0000000X

Bitul „1” :

000000YY SAU

000000XX

Bitul „2” :

00000YYY SAU

00000XXX

Bitul „3” :

0000YYYY SAU

0000XXXX

Bitul „4” :

000YYYYY SAU

000XXXXX

Bitul „5” :

00YYYYYY SAU

00XXXXXX

Bitul „6” :

0YYYYYYY SAU

0XXXXXXX

In tabelul nostru, vor fi afisate limitele obtinute in urma conversiei din sistemul numeric binar in sistemul numeric decimal, pentru fiecare inteval in care sensorul nostru isi schimba starea :

II.4.3.Sistemul hexazecimal

Consideratii Teoretice :

Un sistem de numerație este constituit din totalitatea regulilor de reprezentare a numerelor cu ajutorul anumitor simboluri denumite cifre.[6]

Pentru orice sistem de numerație , numărul semnelor distincte pentru cifrele sistemului este egal cu baza (b). Deci pentru baza b=2 (numere scrise în binar) semnele vor fi cifrele 0 și 1. Pentru baza b=16 (hexazecimal) semnele vor fi 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Se observă că pentru numerele scrise într-o bază mai mare decât baza 10 (zecimal) se folosesc și alte simboluri (litere) pe lângă cifrele obișnuite din baza 10. Astfel, în cazul numerelor scrise în hexazecimal, literele A,B,C,D,E,F au ca și valori asociate 10,11,12,13,14,15.[6]

Pentru a face ușor distincție între numerele scrise într-o anumită bază, la sfârșitul numărului se mai scrie o literă ce simbolizează baza, de exemplu:

B pentru numerele scrise în binar (baza 2)

Q pentru numerele scrise în octal (baza 8)

D pentru numerele scrise în zecimal (baza 10)

H pentru numerele scrise în hexazecimal (baza 16) [6]

De regulă numerele scrise în baza 10 nu trebuie neapărat să fie urmate de simbolul “D”, pentru că această bază se consideră implicită. Există și alte moduri de notare, cum ar fi scrierea la sfârșitul numărului în paranteză a bazei, de exemplu: 100101001(2), sau 17A6B(16). [6]

Dacă se dă un număr scris într-o bază oarecare “b” sub forma parte întreagă și parte zecimală:

Nr(b) = Cn Cn-1 Cn-2 … C2C1 C0 , D1D2D2D3… ,

atunci valoarea sa în baza 10 va fi:

Nr(10) = Cn * bn + C n-1 * bn-1 + … + C 2 * b2 + C 1 * b1+ C 0 * b0 + D1 * b-1 + D2 * b –2 +

+ D3 * b –3 + …” [6]

„Tabelul următor prezintă echivalențele între sistemele binar, hexazecimal și zecimal, urmând numere de 8 cifre binare, numite octeți sau bytes, care întotdeauna corespund la 2 cifre hexazecimale (fig.II.4.2.1) [7]

fig.II.4.2.1[7]

II.4.3.ISO standards

La baza diagnosticarii auto sta nivelul OSI, care este definit de standardele ISO. Marii producatori din industria automotive folosesc nivelul OSI si standardele ISO pentru a crea comunicarea intre sistemele din autovehicul . Cel mai actual si raspandit standard la nivelul de aplicatie (7) , este UDS(Unified Diagnostic Servicies) on CAN , iar la nivelul 3 , retea , avem ISO 15765 . Standardele definesc modul de comunicare al ECU-urilor . In standardele ISO ele poarta denumirea de server, iar echipamentul de testare este numit client . Standardele definesc ca intr-o retea putem avea un numar nelimitat de servere dar un singur client conectat la retea. In imaginea de mai jos, avem o captura a comunicarii dintr-o retea (fig.II.4.3.1)

fig.II.4.3.1[8]

Fiecare server are o identitate , este unic in retea . Modul de interogare al unui server intr-o retea poate sa fie direct client-server , sau indirect , unul din servere fiind master (in industria auto numit poarta sau, din engleza gateway) , in acest caz interogarea facundu-se indirect prin intermediul acestuia client-poarta/gateway-server . In imaginea de mai sus, ID semnifica identitatea serverului sau a clientului respectiv a portii unde este cazul. DLC(Data Lenght Code) se refera la numarul de baiti trimisi/receptionati intr-un cadru de date . In imaginea de mai sus putem vedea ca reteaua foloseste modul de identificare extins , adica campul de identificare are lungimea maxima, de 29 de biti .Voi explica campul de date mai jos, folosind un exemplu de identificare standard, ceea ce inseamna ca campul de identificare are lungimea maxima de 11 biti , cu ajutorul standardului ISO14229 – Universal Diagnostic Services .

UDS:

0x7E0 02 10 03 00 00 00 00 00 – Start Diagnostics (0x03 acest mod poate fi diferit in functie de producator)[9]
0x7E8 02 50 03 00 00 00 00 00 – Raspuns pozitiv pentru Start Diagnostics[9]
0x7E8 03 7F 10 XX 00 00 00 00 – Sesiune de Start incorecta .[9]
02 – reprezinta lungimea mesajului ce urmeaza a fi trimis (este diferit de DLC ) , avand lungimea de un bait, unde jumatatea inalta (high nibble) „0” , semnifica ca urmeaza a fi trimis un mesaj standard , iar jumatatea joasa (low nibble) ne spune ca va uma un mesaj cu lungimea de 2 baiti , restul baitilor fiind numiti baiti de umplutura, folositi pentru a completa cadrul de date .

10 03  – primul bait „10” , conform standardului UDS , semnifica serviciul care urmeaza a fi cerut , in cazul nostru serviciul cerut este de a initia o sesiune de diagnosticare , iar cel de-al doilea bait , „03” reprezinta tipul sesiunii de diagnosticare cerute ( poate fi o sesiune standard, extinsa, producatorul masinii, producatorul sistemului, etc.) [9]

0x7E8  – reprezinta ID-ul serverului interogat [9]

02 – reprezinta lungimea mesajului de raspuns [9]

50 03 – observam o modificare fata de primul bait de date ( serviciul ) trimis de client . Conform standardelor in vigoare , raspunsul trimis de un server pentru un serviciu cerut de client, este incrementat cu 0x40 , daca acesdta este unul pozitiv , in timp ce un raspuns negativ, este intotdeauna 0x7F .[9]

Mesajelor prezentate mai sus li s-a aplicat un filtru , pentru a inlesni interpretarea lor . Filtrele pot fi aplicate pe adresele corespunzatoare pentru client , respectiv prin selectarea vitezei pe retea cu care acestia sunt capabili sa comunice, in functie de serverul ce urmeaza a fi interogat (fig.II.4.3.2)

fig.II.4.3.2 [8]

Capitolul III. Prezentarea Aplicatiei

III.1. Prezentarea modulelor aplicatiei

III.1.1 Modul File

În acest modul utilizatorul are posibilitatea sa creeze un nou datasheet accesand optiunea Create datasheet sau poate sa importe un datasheet existent accesand optiunea Load existing datasheet.

III.1.2 Modul Create Datasheet

Prin acest modul utilizatorul are posibilitatea sa creeze un nou datasheet. Pentru lucrul cu fisierele de tip excel este utilizata clasa Microsoft.Office.Interop.Excel.

Are in component sa urmatoarele campuri:

Campuri de tip eticheta

Aceste campuri sunt folosite:

Pentru a indica ce informatie va trebui sa introduca utilizatorul în caseta destinata etichetei. Numele etichetelor este sugestiv, astfel pot fi evitate eventuale introduceri eronate ale utilizatorului. Etichete sunt situate in dreptul fiecarei casete .Aceasta abordare confera ferestrei un aspect placut , utilizatorul avand o mai buna privire de ansamblu fata de alte abordari. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita Label cu o mulțime de metode și proprietăți care pot fi utilizate.

Pentru a alege calea unde va fi salvat fisierul nou creat. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita LinkLabel cu o mulțime de metode și proprietăți care pot fi utilizate.Alegerea caii unde va fi salvat fisierul se foloseste functia: private void kryptonLinkLabelSaveAs_LinkClicked().

try

{

kryptonTextBoxDatasheetName.Enabled = false;

FolderBrowserDialog fd = new FolderBrowserDialog();

fd.SelectedPath = kryptonComboBoxSaveAs.Text;

fd.ShowDialog();

kryptonComboBoxSaveAs.Text = fd.SelectedPath;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

S-a utilizat clasa FolderBrowserDialog pentru a avea acces la componenta de tip Browser Folder

Câmpuri de tip edit text

Aceste campuri sunt folosite:

Pentru introducerea de informații în excelul creat. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita ComboBox si TextBox cu o mulțime de metode și proprietăți care pot fi utilizate.

Componenta kryptonComboBoxTemplateImport este utilizata pentru selectia unui anumit template. In lista ComboBox-ului apar toate template-urile dupa care se pot creea noi datasheet-uri.

Codul lista mai jos adauga in lista ComboBox-ului template-urile aflate la o anumita locatie.

//calea unde se gasesc template-urile

string[] path = Directory.GetFiles(@"C:\Projects\ _DataCaptureTemplate");

kryptonPanelExistingDatasheet.Visible = false;

kryptonPanelDatasheetCreate.Visible = false;

// adauga in lista toate template-urile gasite

try

{

foreach (string file in path)

{

this.kryptonComboBoxTemplateImport.Items.Add(file);

}

}

catch (Exception ex)

{

kryptonRichTextBoxLogs.Text = ex.Message;

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Red;

}

Pentru informarea utilizatorului cu privire la la actiunile care urmeaza sa le faca.Se afiseaza informatii cu privire la ce va trebui sa faca utilizatorul sau semnaleaza erorile care apar. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita RichTextBox cu o mulțime de metode și proprietăți care pot fi utilizate.

Functia private void kryptonTextBoxDatasheetName_TextChanged afiseaza in RichBox mesaje de ghidare pentru utilizator,adica indica acestuia ca trebuie sa selecteze template-ul dorit din lista.

if (kryptonComboBoxTemplateImport.Text == string.Empty)

{

kryptonRichTextBoxLogs.Text = "Please select a datasheet template";

kryptonRichTextBoxLogs.TabIndex = 1;

Functia private void kryptonComboBoxTemplateImport_SelectedIndexChanged afiseaza in RichBox mesaje de ghidare pentru utilizator,adica indica acestuia pasii care urmeaza sa ii faca dupa ce s-a selectat template-ul dorit.

kryptonTextBoxDatasheetName.Enabled = true;

kryptonButtonBack.Enabled = true;

kryptonRichTextBoxLogs.Clear();

kryptonRichTextBoxLogs.Text = " Please write the datasheet's mnemonic! ";

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Orange;

kryptonComboBoxTemplateImport.Enabled = false;

Functia private void kryptonLinkLabelSaveAs_Enter afiseaza in RichBox mesaje de ghidare pentru utilizator,adica indica acestuia pasii care urmeaza sa ii faca dupa ce s-a dat un nume noului datasheet.

kryptonRichTextBoxLogs.Clear();

kryptonRichTextBoxLogs.Text = " Please select the path where do you want to save the datasheet! ";

Functia kryptonComboBoxSaveAs_TextChanged afiseaza in RichBox mesaje de ghidare pentru utilizator,adica indica acestuia pasii care urmeaza sa ii faca dupa ce s-a ales calea unde se va salva noul datasheet.

kryptonComboBoxSaveAs.Enabled = false;

kryptonButtonSave.Enabled = true;

kryptonRichTextBoxLogs.Clear();

kryptonRichTextBoxLogs.Text = " Please press the button Save!";

Functia kryptonButtonSave_Click_1 afiseaza in RichBox mesaje de informare pentru utilizator:

Daca datsheet-ul s-a salvat cu succes

Daca a aparut o eroare la savare datasheet-ului

if (File.Exists(newFile))

{

kryptonButtonNext.StateNormal.Back.Color1 = System.Drawing.Color.Green;

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Green;

kryptonRichTextBoxLogs.Text = " Succesfuly : the file was created!\n Please press Next button!";

kryptonButtonNext.Enabled = true;

}

}

catch (Exception ex)

{

kryptonRichTextBoxLogs.Text = ex.Message ;

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Red ;

}

Butoane

Butoanele folosite au urmatoarele utilizari:

Salvare „Save” : la actionarea acestui buton se salveaza noul fisier in locatia selectata.

Functia kryptonButtonSave_Click salveaza datasheet-ul la locatia ce se geseste in variabila newFile

string newFile = kryptonComboBoxSaveAs.Text +"\\" + kryptonTextBoxDatasheetName .Text + ".xls";

//salveaza fisierul in locatia dorita

File.Copy(kryptonComboBoxTemplateImport.Text, newFile);

//salveaza denumirea datasheetului in Sheet-ul " Cover Sheet" la locatia C6.

ReadExistingExcel(newFile, kryptonTextBoxDatasheetName.Text);

Trecerea la o noua pagina „Next” : la actionarea acestui buton se trece la o noua pagina „Selctare Sheet” de unde se alege sheetul din excel care urmeaza sa fie luat in lucru.

Functia kryptonButtonNext_Click face posibila trecerea la o noua fereastra de unde utilizatorul alge pe ce sheet va lucra.

Clasa PathDatasheet prin metodele pathDatasheet si Mnemonic alcatuieste calea va fi salvat datasheet-ul.

try

{

kryptonComboBoxSaveAs.Enabled = true;

kryptonTextBoxDatasheetName.Enabled = true;

PathDatasheet.pathDatasheet = kryptonComboBoxSaveAs.Text;

PathDatasheet.Mnemonic = kryptonTextBoxDatasheetName.Text;

LiveData liveData = new LiveData();

this.Close();

thSelect = new Thread(OpenNewForm);

thSelect.SetApartmentState(ApartmentState.STA);

thSelect.Start();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

Intoarcere „ Back”: la actionarea acestui buton utilizatorul are posibilitatea sa se intoarca la pasii precedenti in cazul in care a introdus date gresite.

Functia private void kryptonButtonBack_Click

int option=0;

if (kryptonTextBoxDatasheetName.Text == string.Empty)

option = 1;

if (kryptonComboBoxSaveAs.Text != string.Empty)

option = 2;

switch (option )

{

case 1:

{

kryptonComboBoxTemplateImport.Enabled = true;

kryptonTextBoxDatasheetName.Enabled = false;

kryptonRichTextBoxLogs.Clear();

kryptonRichTextBoxLogs.Text = "Please select a datasheet template";

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Orange;

break;

}

case 2:

{

kryptonTextBoxDatasheetName.Enabled = true;

kryptonRichTextBoxLogs.Clear();

kryptonRichTextBoxLogs.Text = " Please write the datasheet's mnemonic! ";

kryptonRichTextBoxLogs.StateActive.Content.Color1 = System.Drawing.Color.Orange;

break;

}

case 3:

{

kryptonLinkLabelSaveAs.Enabled = true;

kryptonComboBoxSaveAs.Enabled = true;

break;

}

default: break;

}

Iesire „Close” : se va iesi din aplicatie la actionarea acestui buton.

Functia public static void ReadExistingExcel(string pathExcel, string nameFile) are doua functionalitati:

citeste toate sheet-urile ce le contine noul datasheet creat.

Scrie numele fisierului in primul sheet in celula ce are coordonatele (6,3).

try

{

string path = pathExcel;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

//Get the allready exists sheet

mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("Cover Sheet");

// mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.FillAcrossSheet;

Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

mWSheet1.Cells[6, 3] = nameFile;

mWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,

Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,

Missing.Value, Missing.Value, Missing.Value,

Missing.Value, Missing.Value);

mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

mWSheet1 = null;

mWorkBook = null;

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers();

GC.Collect();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

Pentru a avea acces la obiectele pentru utilizarea fisierelor de tip excel este folosita clasa Microsoft.Office.Interop.Excel .

Pentru deschiderea fisierul se foloseste metoda Open, iar pentru salvare se foloseste metoda SaveAs si apoi metoda Close pentru a inchide fisierul.

III.1 .3 Modul Load existing datasheet

Ofera posibilitatea utilizatorului sa selecteze un datsheet existent care urmeaza a fi luat in lucru.

Are in component sa urmatoarele campuri:

Campuri de tip eticheta

Aceste campuri sunt folosite:

Pentru a alege calea unde este salvat fisierul care se doreste a fi luat in lucru. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita LinkLabel cu o mulțime de metode și proprietăți care pot fi utilizate.Alegerea caii unde va fi salvat fisierul se foloseste functia: private void kryptonLinkLabelSaveAs_LinkClicked()

kryptonTextBoxDatasheetName.Enabled = false;

FolderBrowserDialog fd = new FolderBrowserDialog();

fd.SelectedPath = kryptonComboBoxSaveAs.Text;

fd.ShowDialog();

kryptonComboBoxSaveAs.Text = fd.SelectedPath;

Campuri de tip edit text

Aceste campuri sunt folosite:

pentru a indica ce informatie va trebui sa introduca utilizatorul în caseta destinata etichetei. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita ComboBox cu o mulțime de metode și proprietăți care pot fi utilizate.

Butoane

Butoanele folosite au urmatoarele utilizari:

Trecerea la o noua pagina „Next” : la actionarea acestui buton se trece la o noua pagina „Selectare Sheet” de unde se alege sheetul din excel care urmeaza sa fie luat in lucru.

Functia private void kryptonButtonLoadNext_Click face posibila trecerea la o noua fereastra de unde utilizatorul alge pe ce sheet va lucra.

try

{

int position = kryptonComboBoxLoadDatasheet.Text.LastIndexOf('\\');

int pos0 = kryptonComboBoxLoadDatasheet.Text.IndexOf('.');

PathDatasheet.pathDatasheet = kryptonComboBoxLoadDatasheet.Text.Substring(0, position);

PathDatasheet.Mnemonic = kryptonComboBoxLoadDatasheet.Text.Substring(position + 1, pos0 – position – 1);

LiveData liveData = new LiveData();

this.Close();

thSelect = new Thread(OpenNewForm);

thSelect.SetApartmentState(ApartmentState.STA);

thSelect.Start();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

Iesire „Close” : se va iesi din aplicatie la actionarea acestui buton.

III.1 .4 Modul SheetSelect

Ofera posibilitatea utilizatorului sa selecteze sheet-ul care urmeaza a fi luat in lucru.

Are in component sa urmatoarele campuri:

Campuri de tip eticheta

Aceste campuri sunt folosite:

Pentru a alege calea unde este salvat fisierul care se doreste a fi luat in lucru. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita LinkLabel cu o mulțime de metode și proprietăți care pot fi utilizate.Alegerea caii unde va fi salvat fisierul se foloseste functia: private void kryptonLinkLabelSaveAs_LinkClicked()

Campuri de tip edit text

Aceste campuri sunt folosite:

Pentru selectarea sheetului care se doreste a fi luat in lucru. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita ComboBox cu o mulțime de metode și proprietăți care pot fi utilizate. Pentru listarea tuturor sheet-urilor existente este utilizata proprietatea Items.

Functia public void GetExcelSheetNames cauta tote sheet-urile existente in datasheet si apoi le adauga in lisat combox-ului kryptonComboBoxSheetName.

string path = pathExcel;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

foreach (Microsoft.Office.Interop.Excel.Worksheet workSheet in mWorkBook.Worksheets)

{

kryptonComboBoxSheetName.Items.Add(workSheet.Name);

}

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers();

GC.Collect();

Butoane

Butoanele folosite au urmatoarele utilizari:

Trecerea la o noua pagina „Next” : la actionarea acestui buton se trece la o noua pagina „Live Data” unde se vor introduce datele ce urmeaza a fi salvate in datasheet.

Functia private void kryptonButtonNext_Click realizeaza trecerea la o noua freastra de unde se vor introduce date in datasheet.

if (kryptonComboBoxSheetName.Text == "LiveData")

{

this.Close();

thSelect = new Thread(OpenNewForm);

thSelect.SetApartmentState(ApartmentState.STA);

thSelect.Start();

}

Iesire „Close” : se va iesi din aplicatie la actionarea acestui buton.

III.1 .5 Modul Live Data

Acesta este un modul complex care ofera utilizatorului posibiliatea pentru a introduce informatii in trei moduri:

Parametrii lineari.

Paramentri digitali cu doua stari.

Paramentri digitali cu mai mult de doua stari.

Are in component sa urmatoarele campuri:

Campuri de tip eticheta

Aceste campuri sunt folosite:

pentru a indica ce informatie va trebui sa introduca utilizatorul în caseta destinata etichetei. Numele etichetelor este sugestiv, astfel pot fi evitate eventuale introduceri eronate ale utilizatorului.

Campul kryptonLabelProperties afiseaza numele fiecarei coloane predefinite din sheet.

Campuri de tip edit text

Aceste campuri sunt folosite pentru introducerea de informații în excelul creat. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita ComboBox si TextBox cu o mulțime de metode și proprietăți care pot fi utilizate.

Campul kryptonComboBoxValue este utilizat pentru a introduce date in urmatoare ordine:

Request-ul parametrului

Denumirea parametrului

Pozitia unde se afla octetii parametrului

Dimensiunea rapunsului (cati octeti contine raspunsul).

Campul kryptonComboBoxDigital are doua valori:

„2 state” , utilizat pentru parametri cu doua stari. Cand se alege aceasta optiune se afiseaza un grup box ce permite sa introduci informatii pentru parametri cu doua stari.

„Multistate”, utilizat pentru parametri cu trei sau mai multe stari. Cand se alege aceasta optiune se afiseaza un grup box ce permite sa introduci informatii pentru parametri cu mai multe de doua stari.

Butoane

Butoanele folosite au urmatoarele utilizari:

Trecerea la o noua coloana predefinita din sheet „Next” : la actionarea acestui buton se salveaza intr-o variabila locala datele introduse si se trece la o noua coloana predefinita.

Functia private void kryptonButtonNextProperties_Click apeleaza functia ReadColumn pentru a citi valoare din celula data de coordonatele dorite.

string path = pathDatasheet + ".xls";

buttonWasClicked ++;

if (buttonWasClicked == 1)

{

ReadColumn(@path, 11);

request = kryptonComboBoxValue.Text;

reqResponseID = ReqRespFormat(kryptonComboBoxValue.Text);

kryptonComboBoxValue.Text = "";

}

if (buttonWasClicked == 2)

{

ReadColumn(@path, 7);

description = kryptonComboBoxValue.Text;

kryptonComboBoxValue.Text = "";

}

if (buttonWasClicked == 3)

{

ReadColumn(@path, 8);

position = kryptonComboBoxValue.Text;

kryptonComboBoxValue.Text = "";

}

if (buttonWasClicked == 4)

{

kryptonRadioButtonDigital.Enabled = true;

kryptonRadioButtonLinear.Enabled = true;

size = kryptonComboBoxValue.Text;

kryptonComboBoxValue.Text = "";

buttonWasClicked = 0;

kryptonButtonNextProperties.Enabled = false;

kryptonButtonFinish.Enabled = true;

kryptonComboBoxValue.Enabled = false;

Salvare „Finish” a datelor: la actionarea acestuia se vor salva datele introduse in sheetul „Live Data”.

Functia private void kryptonButtonFinish_Click salveaza datele in functie de tipul parametrului si apoi reconfigureaza fereastra la starea initiala.

string path = pathDatasheet + ".xls";

if (kryptonRadioButtonDigital.Checked == true)

{

if (kryptonComboBoxDigital.Text == "2 state")

{

WriteValueExcelDigital(@path, reqResponseID, description, position, size, 2);

}

if (kryptonComboBoxDigital.Text == "Multistate")

{

WriteValueExcelDigitalMultiState(@path, reqResponseID, description, position, size, 2);

}

}

if (kryptonRadioButtonLinear.Checked == true)

{

WriteValueExcelLinear(@path, reqResponseID, description, position, size, 2);

}

ReadColumn(@path, 2);

kryptonButtonNextProperties.Enabled = true;

kryptonComboBoxValue.Enabled = true;

kryptonRadioButtonDigital.Enabled = false;

kryptonComboBoxDigital.Enabled = false;

kryptonGroupBoxTwoState.Visible = false;

kryptonGroupBoxLinear.Visible = false;

kryptonRadioButtonDigital.Checked = false;

kryptonRadioButtonLinear.Checked = false;

kryptonComboBoxDigital.Text = "";

kryptonComboBoxStartValueState1.Text = "0";

kryptonComboBoxStartValueState2.Text = "";

kryptonTextBoxState1.Text = "";

kryptonTextBoxState2.Text = "";

//linear

kryptonTextBoxUnits.Text = "";

kryptonTextBoxDecimalPlaces.Text = "0";

kryptonTextBoxMaxValue.Text = "";

kryptonTextBoxMinValue.Text = "0";

kryptonTextBoxOffset.Text = "0";

kryptonTextBoxDecimalPlaces.Text = "0";

kryptonComboBoxIsInterpolated.Text = "FALSE";

kryptonComboBoxIsLittleEndian.Text = "FALSE";

kryptonComboBoxIsSigned.Text = "FALSE";

//Multi state

buttonNewStateClicked = 0;

kryptonGroupBoxMultiState.Visible = false;

kryptonDataGridViewMultiState.Visible = false;

kryptonDataGridViewMultiState.Rows.Clear();

kryptonTextBoxMultiState.Text = "";

kryptonComboBoxMultiStateStart.Text = "";

kryptonComboBoxMultiStateEnd.Text = "";

Iesire „Close” : se va iesi din aplicatie la actionarea acestui buton.

Functia public void ReadColumn(…) citeste infromatia din coloana data de valoarea din rangeColumn si o afiseaza in kryptonLabelProperties. Utilizeaza clasa Microsoft.Office.Interop.Excel pentru a avea acces la obiectele si metodele in lucrul cu un fisier excel.

string str;

string path = pathExcel;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

//Get the allready exists sheet

mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveData");

// mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.FillAcrossSheet;

Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

str = (string)(range.Cells[1, rangeColumn] as Microsoft.Office.Interop.Excel.Range).Value2;

kryptonLabelProperties.Text = str;

mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

mWSheet1 = null;

mWorkBook = null;

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers();

GC.Collect();

Functia public string ReqRespFormat(…) preia request-ul introdus si il prelucreaza intr-un anumit format.

string reqResp;

string hexCharacter = request .Substring (0,2);

int value = Convert.ToInt32(hexCharacter, 16) + Convert.ToInt32("40", 16);

string hexValue = value.ToString("X");

request = request.Replace(" ", "");

reqResp = "ReqResp_" + request + "_"+hexValue ;

return reqResp;

Functia public void WriteValueExcelLinear(…) salveaza datele introduce pentru parametrii de tip lineari.

string path = pathExcel;

string str;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

//Get the allready exists sheet

mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveData");

mWSheet2 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("ReqRespMap");

mWSheet3 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveDataMap");

// mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.FillAcrossSheet;

Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

Microsoft.Office.Interop.Excel.Range range3 = mWSheet3.UsedRange;

//Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

Single maxValue = Single.Parse(kryptonTextBoxMaxValue.Text);

int indexRow;

string displayMap;

displayMap = "DDM_" + PathDatasheet.Mnemonic + "_" + kryptonTextBoxState1.Text.ToUpper() + "_" + kryptonTextBoxState2.Text.ToUpper();

int rCnt = 0;

int cCnt = 0;

if ((size == "1") &&(kryptonComboBoxIsSigned .Text .Equals ("TRUE")))

{

scalling = maxValue / 127;

}

else if (size == "1")

{

scalling = maxValue / 255;

}

if ((size == "2") && (kryptonComboBoxIsSigned.Text.Equals("TRUE")))

{

scalling = maxValue / 32767;

}

else if (size == "2")

{

scalling = maxValue / 65535;

}

if ((size == "3") && (kryptonComboBoxIsSigned.Text.Equals("TRUE")))

{

scalling = maxValue / 8388607;

}

else if (size == "3")

{

scalling = maxValue / 16777215;

}

if ((size == "4") && (kryptonComboBoxIsSigned.Text.Equals("TRUE")))

{

scalling = maxValue / 2147483647;

}

else if (size == "4")

{

scalling = maxValue / 4294967295;

}

if ((size == "5") && (kryptonComboBoxIsSigned.Text.Equals("TRUE")))

{

scalling = maxValue / 549755813887;

}

else if (size == "5")

{

scalling = maxValue / 1099511627775;

}

//LiveData

if (mWSheet1.Cells[range.Rows.Count, 1] != "")

{

indexRow = range.Rows.Count + 1;

mWSheet1.Cells[indexRow, indexColumn] = reqValue;//ReqResp

mWSheet1.Cells[indexRow, indexColumn + 5] = dataPosition;//DataPositon

mWSheet1.Cells[indexRow, indexColumn + 6] = sizeItem;//Size

mWSheet1.Cells[indexRow, indexColumn + 7] = "";//Mask

mWSheet1.Cells[indexRow, indexColumn + 9] = descriptionItem;//Description

mWSheet1.Cells[indexRow, indexColumn + 11] = Math .Round ( scalling,15);//Scalling

mWSheet1.Cells[indexRow, indexColumn + 12] = kryptonTextBoxOffset.Text;//Offset

mWSheet1.Cells[indexRow, indexColumn + 16] = kryptonTextBoxUnits.Text;//Units

mWSheet1.Cells[indexRow, indexColumn + 17] = kryptonTextBoxMinValue.Text;//MinValue

mWSheet1.Cells[indexRow, indexColumn + 18] = kryptonTextBoxMaxValue.Text;//MaxValue

mWSheet1.Cells[indexRow, indexColumn + 19] = kryptonTextBoxDecimalPlaces.Text;//Decimal place

mWSheet1.Cells[indexRow, indexColumn + 20] = "FALSE";//IsDigital

mWSheet1.Cells[indexRow, indexColumn + 21] = kryptonComboBoxIsInterpolated.Text;//IsInterpolated

mWSheet1.Cells[indexRow, indexColumn + 22] = "";//DDM

mWSheet1.Cells[indexRow, indexColumn + 23] = kryptonComboBoxIsLittleEndian.Text;//IslittleEndian

mWSheet1.Cells[indexRow, indexColumn + 24] = kryptonComboBoxIsSigned.Text;//IsSigned

}

//ReqRespMap

if (mWSheet2.Cells[range.Rows.Count, 1] != "")

{

indexRow = range2.Rows.Count + 1;

mWSheet2.Cells[indexRow, 1] = reqResponseID;

mWSheet2.Cells[indexRow, 2] = request;

mWSheet2.Cells[indexRow, 3] = reqValue.Substring(reqValue.Length – 2, 2);

}

mWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,

Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,

Missing.Value, Missing.Value, Missing.Value,

Missing.Value, Missing.Value);

mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

mWSheet1 = null;

mWorkBook = null;

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers(); GC.Collect();

Functia public void WriteValueExcelDigital(…) salveaza datele introduce pentru parametrii de tip digitali cu doua stari. Mai salveaza valorile digitale intr-un sheet destinat acestora. Valorile digitale introduce sunt prelucrate si transformate intr-un anumit format.

string path = pathExcel;

string str;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

//Get the allready exists sheet

mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveData");

mWSheet2 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("ReqRespMap");

mWSheet3 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveDataMap");

// mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.FillAcrossSheet;

Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

Microsoft.Office.Interop.Excel.Range range3 = mWSheet3.UsedRange;

//Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

Single mask = Single.Parse(kryptonComboBoxStartValueState2.Text);

int indexRow;

Single scalling = 1 / mask;

string displayMap;

displayMap = "DDM_" + PathDatasheet.Mnemonic +"_"+ kryptonTextBoxState1.Text.ToUpper() + "_" + kryptonTextBoxState2.Text.ToUpper();

//str = (string)(range.Cells[1, rangeColumn] as Microsoft.Office.Interop.Excel.Range).Value2;

//kryptonLabelProperties.Text = str;

int rCnt = 0;

int cCnt = 0;

//LiveData

if (mWSheet1.Cells[range.Rows.Count, 1] != "")

{

indexRow = range.Rows.Count+1;

mWSheet1.Cells[indexRow, indexColumn] = reqValue;//ReqResp

mWSheet1.Cells[indexRow, indexColumn + 5] = dataPosition;//DataPositon

mWSheet1.Cells[indexRow, indexColumn + 6] = sizeItem;//Size

mWSheet1.Cells[indexRow, indexColumn + 7] = mask;//Mask

mWSheet1.Cells[indexRow, indexColumn + 9] = descriptionItem;//Description

mWSheet1.Cells[indexRow, indexColumn + 11] = scalling;//Scalling

mWSheet1.Cells[indexRow, indexColumn + 12] = 0;//Offset

mWSheet1.Cells[indexRow, indexColumn + 17] = 0;//MinValue

mWSheet1.Cells[indexRow, indexColumn + 18] = 1;//MaxValue

mWSheet1.Cells[indexRow, indexColumn + 19] = 0;//Decimal place

mWSheet1.Cells[indexRow, indexColumn + 20] = "TRUE";//IsDigital

mWSheet1.Cells[indexRow, indexColumn + 21] = "FALSE";//IsInterpolated

mWSheet1.Cells[indexRow, indexColumn + 22] = displayMap;//DDM

mWSheet1.Cells[indexRow, indexColumn + 23] = "FALSE";//IslittleEndian

mWSheet1.Cells[indexRow, indexColumn + 24] = "FALSE";//IsSigned

}

//ReqRespMap

if (mWSheet2.Cells[range.Rows.Count, 1] != "")

{

indexRow = range2.Rows.Count + 1;

mWSheet2.Cells[indexRow, 1] = reqResponseID;

mWSheet2.Cells[indexRow, 2] = request;

mWSheet2.Cells[indexRow, 3] = reqValue.Substring(reqValue.Length – 2, 2);

}

//LiveDataMap

if (mWSheet3.Cells[range3.Rows.Count, 1] != "")

{

indexRow = range3.Rows.Count + 1;

mWSheet3.Cells[indexRow, 1] = displayMap;

mWSheet3.Cells[indexRow, 3] = kryptonTextBoxState1.Text;

mWSheet3.Cells[indexRow, 4] = "0";

mWSheet3.Cells[indexRow, 7] = "0";

mWSheet3.Cells[indexRow + 1, 1] = displayMap;

mWSheet3.Cells[indexRow + 1, 3] = kryptonTextBoxState2.Text;

mWSheet3.Cells[indexRow + 1, 4] = "1";

mWSheet3.Cells[indexRow + 1, 7] = "1";

}

mWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,

Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,

Missing.Value, Missing.Value, Missing.Value,

Missing.Value, Missing.Value);

mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

mWSheet1 = null;

mWorkBook = null;

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers(); GC.Collect();

Functia public void WriteValueExcelDigitalMultistate(…) salveaza datele introduce pentru parametrii de tip digitali cu mai mult de doua stari. Mai salveaza valorile digitale intr-un sheet destinat acestora. Valorile digitale introduce sunt prelucrate si transformate intr-un anumit format.

string path = pathExcel;

string str;

oXL = new Microsoft.Office.Interop.Excel.Application();

//confirmarea ca s-a creat fisierul cand e setat pe true

oXL.Visible = false;

oXL.DisplayAlerts = false;

mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

//Get all the sheets in the workbook

mWorkSheets = mWorkBook.Worksheets;

//Get the allready exists sheet

mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveData");

mWSheet2 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("ReqRespMap");

mWSheet3 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("LiveDataMap");

// mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.FillAcrossSheet;

Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

Microsoft.Office.Interop.Excel.Range range3 = mWSheet3.UsedRange;

//Microsoft.Office.Interop.Excel.Range range2 = mWSheet2.UsedRange;

// int mask = Int32.Parse(kryptonComboBoxStartValueState2.Text);

int indexRow;

int indexDataGrid = 0;

string displayMap;

displayMap = "DDM_" + PathDatasheet.Mnemonic + "_" + kryptonTextBoxDDMMultiState.Text.ToUpper();

//LiveData

if (mWSheet1.Cells[range.Rows.Count, 1] != "")

{

indexRow = range.Rows.Count + 1;

mWSheet1.Cells[indexRow, indexColumn] = reqValue;//ReqResp

mWSheet1.Cells[indexRow, indexColumn + 5] = dataPosition;//DataPositon

mWSheet1.Cells[indexRow, indexColumn + 6] = sizeItem;//Size

//mWSheet1.Cells[indexRow, indexColumn + 7] = mask;//Mask

mWSheet1.Cells[indexRow, indexColumn + 9] = descriptionItem;//Description

mWSheet1.Cells[indexRow, indexColumn + 11] = "1";//Scalling

mWSheet1.Cells[indexRow, indexColumn + 12] = 0;//Offset

mWSheet1.Cells[indexRow, indexColumn + 17] = 0;//MinValue

mWSheet1.Cells[indexRow, indexColumn + 18] = 1;//MaxValue

mWSheet1.Cells[indexRow, indexColumn + 19] = 0;//Decimal place

mWSheet1.Cells[indexRow, indexColumn + 20] = "TRUE";//IsDigital

mWSheet1.Cells[indexRow, indexColumn + 21] = "FALSE";//IsInterpolated

mWSheet1.Cells[indexRow, indexColumn + 22] = displayMap;//DDM

mWSheet1.Cells[indexRow, indexColumn + 23] = "FALSE";//IslittleEndian

mWSheet1.Cells[indexRow, indexColumn + 24] = "FALSE";//IsSigned

}

//ReqRespMap

if (mWSheet2.Cells[range2.Rows.Count, 1] != "")

{

indexRow = range2.Rows.Count + 1;

mWSheet2.Cells[indexRow + 1, 1] = reqResponseID;

mWSheet2.Cells[indexRow + 1, 2] = request;

mWSheet2.Cells[indexRow + 1, 3] = reqValue.Substring(reqValue.Length – 2, 2);

}

//LiveDataMap

for (int i = 0; i <= kryptonDataGridViewMultiState.RowCount – 1; i++)

{

for (int j = 0; j <= kryptonDataGridViewMultiState.ColumnCount – 1; j++)

{

if ((mWSheet3.Cells[range3.Rows.Count, 1] != "") && buttonNewStateWasClicked)

{

indexRow = range3.Rows.Count + i;

mWSheet3.Cells[indexRow+1, 1] = displayMap;

mWSheet3.Cells[indexRow+1, 3] = this.kryptonDataGridViewMultiState[0,i ].Value ;

mWSheet3.Cells[indexRow+1, 4] = this.kryptonDataGridViewMultiState[1, i].Value;

mWSheet3.Cells[indexRow+1, 7] = i;

}

}

}

mWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,

Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,

Missing.Value, Missing.Value, Missing.Value,

Missing.Value, Missing.Value);

mWorkBook.Close(Missing.Value, Missing.Value, Missing.Value);

mWSheet1 = null;

mWorkBook = null;

oXL.Quit();

GC.WaitForPendingFinalizers();

GC.Collect();

GC.WaitForPendingFinalizers(); GC.Collect();

Deasemenea cele trei prezentate mai sus salveaza requesturile intr-un sheet destinat acestora.

Butoane de selectie

Sunt folosite pentru a selecta care este tipul parametrului care urmeaza a fi salvat. În C # al mediului de dezvoltare Microsoft Visual Studio aceste căsuțe au o clasă definită numita RadioButton cu o mulțime de metode și proprietăți care pot fi utilizate.

Utilizatorul are urmatoarele optiuni:

Parametru linear „IsLinear”

Parametru digital „IsDigital”

La actionarea butonului “IsLinear” se va afisa in pagina un group box care contine campurile ce trebuie sa fie completate pentru un parametru linear.

La actionarea butonului “IsDigital” se afiseaza un camp de unde se va alege tipul parametrului digital.

Grup boxuri

Exista trei tipuri de grup boxuri:

Pentru parametri lineari

Pentru parametri digitali cu doua stari

Pentru parametri digitali cum mai mult de doua stari

Grupul pentru parametri lineari contine urmatoarele campuri:

Campuri de tip eticheta

Campuri de tip edit text

Grupul pentru parametri digitali cu doua stari contine urmatoarele campuri:

Campuri de tip eticheta

Campuri de tip edit text

Grupul pentru parametric digitali cu mai mult de doua stari contine urmatoarele campuri:

Campuri de tip eticheta

Campuri de tip edit text

Campuri de tip buton.

Campuri de tip DataGridView

La actionarea butonului “New” se vor introduce in DataGridView datele din campurile completate .

Functia private void kryptonButtonNewState_Click salveaza datele introduse in DataGridView.

buttonNewStateWasClicked = true;

buttonNewStateClicked++;

kryptonDataGridViewMultiState.Rows.Add();

this.kryptonDataGridViewMultiState.Rows[buttonNewStateClicked-1].Cells[0].Value = kryptonTextBoxMultiState.Text;

this.kryptonDataGridViewMultiState.Rows[buttonNewStateClicked-1].Cells[1].Value = kryptonComboBoxMultiStateStart.Text;

this.kryptonDataGridViewMultiState.Rows[buttonNewStateClicked-1].Cells[2].Value = kryptonComboBoxMultiStateEnd.Text;

kryptonComboBoxMultiStateEnd.Text = "";

kryptonComboBoxMultiStateStart.Text = "";

kryptonTextBoxMultiState .Text ="";

IV.Manual de utilizare

IV.1 Pregatirea fisierului de lucru :

Butonul File – Ne permite sa alegem un fisier in lucru sau sa creem un nou fisier de lucru . Dupa ce am selectat una dintre aceste optiuni, urmatoarea fereastra va fi deschisa .

IV.1.1 Modul Create New Datasheet :

Daca am selectat ‚Create New Datasheet ’ avem urmatoarele optiuni :

Template – Ne permite selecatrea modelului de fisier dorit, prin selectarea acestuia din meniul combo box creat , dupa care aceasta se va bloca , pentru a oferi siguranta la atingerea nedorita a unei taste . In fereastra de tip RichTextBoxLogs gasim instructiunile pentru pasul urmator .

Datasheet Name –In fereastra se va introduce de la tastaura numele fisierului

Save as – Ne permite salvarea fisierului creat . Utilizatorul va alege calea catre locul unde urmeaza a fi salvat fisierul . Butonul si fereastra vor deveni active dupa ce toti pasii de mai sus au fost parcursi . Odata apasat butonul Save as fereastra de tip combo box anexata etichetei Datasheet Name se va bloca, pentru a oferi siguranta utilizatorului la apasarea nedorita a unei taste .

Butonul Back , ne permite sa ne intoarcem la campul anexat etichetei Datasheet Name , pentru a schimba numele fisierului daca se doreste acest lucru . Dupa corectie, fisierul poate fi salvat direct, fara a se mai relua pasul Save as .

Butonul Save se activeaza dupa ce destinatia fisierului creat a fost aleasa , iar odata apasat fisierul va fi salvat in locul ales

Butonul Next, va fi activ dupa ce fisierul a fost salvat cu succes . In fereastra de tip RichTextBoxLogs vom primi confirmarea ca fisierul a fost creat cu succes . Prin apasarea acestui buton, vom intra in fisierul creat .

IV.1.2 Modul Load Existing Datasheet :

Daca s-a selectat Load existing datasheet , apasam butonul Load datasheet , dupa care vom alege

In care fisier dorim sa lucram :

Dupa selectarea fisierului apasam butonul Next pentru a continua :

IV.2 Selectarea Tabului :

Dupa ce fisierul a fost creat, suntem gata pentru a incepe lucrul cu acesta . In fereastra urmatoare, SheetSelect vom putea alege in care din taburile create in fisierul model dorim sa lucram . Dupa selectie apasam butonul next pentru urmatoarea optiune .

IV.3 Inserarea Datelor :

In campul de cerere raspuns vom insera baitii corespunzatori , dupa care trecem la urmatorul pas apasand butonul Next .

In continuare este nevoie sa descriem elementul pentru care introducem datele , apoi apasam butonul Next pentru a merge mai departe .

DataPosition , se refera la primul bait de date semnificativ, din cadrul de baiti receptionati . Pozitia acestuia o vom insera dupa exemplul de mai jos, dupa care vom apasa butonul Next pentru urmatoarea optiune .

Size se refera la lungimea datelor semnificative elementului nostru . Aceasta va fi inserata ca in modelul de mai jos . Dupa aceasta vom apasa butonul Next .

IV.3.1 modul Is Digital :

Acum este nevoie sa alegem ce tip de element avem. Este unul de tip Digital sau unul de tip Linear.

Daca este unul de tip digital, este nevoie sa stabilim daca este unul Digital cu 2 stari sau este cu mai multe stari . Daca este unul de tip Linear bifam optiunea dupa care apasam butonul Next pentru a continua .

IV.3.1.1 Modul Is Digital cu 2 stari :

Vom selecta in optiunea in functie de tipul elementului ce dorim sa-l afisam :

Daca elementul este unul de tip Digital cu 2 stari, vom avea de completat descrierea starilor elementului si valorile in decimal la care/intre care aceste stari vor fi active , ca in exemplul de mai jos :

IV.3.1.2 Modul Is Digital cu mai mult de 2 stari :

Daca elementul este unul de tip Digital cu mai multe stari (Multistate), vom descrie in campul DDM denumirea elementului, in camul Sate vom descrie starile acestuia Start Value va contine valoarea decimala de start iar End Value valoarea decimala de sfarsit a intervalului in care starea este activa .

IV.3.1.3 Modul Is Linear :

Daca avem o valoare Lineara vom avea urmatoarele :

Units – unitatea de masura

Minimum Value – valoarea afisata pentru valoarea minima 00* trimisa

Maximum Value – valoarea afisata pentru valoarea maxima trimisa, valoarea maxima trimisa poate fi 7F* daca avem o valoare cu semn(signed) sau FF* daca avem o valoare fara semn(unsigned)

Offset – este egal cu valoarea afisata pentru valoarea minima trimisa 00* . Aceasta poate fi o valoare pozitiva sau negativa .

Decimal Places – Numarul de unitati ce dorim sa-l afisam dupa ” , ”

Is Signed – va fi FALSE daca avem o valoare fara semn si TRUE pentru o valoare cu semn

Is Little Endia – va fi FALSE pentru o valoare de tip Big Endian si TRUE daca valoarea este de tip Little Endian

Is Interpolated – daca valoarea nu este este Interpolata vom selecta FALSE , pentru o valoare Interpolata vom selecta TRUE si este necesar sa completam valorile afisate pentru urmatoarele valori trimise :

Butonul Finish – confirma sfarsitul inserarii datelor pentru un element, iar odata cu apasarea acestuia vom relua ciclul de inserare a datelor , pentru elementul urmator :

Concluzii, propuneri

Bibliografie

http://www.aut.upt.ro/~dberian/Labs/Laborator1_MTP.pdf

http://en.wikipedia.org/wiki/CAN_bus

http://en.wikipedia.org/wiki/Unified_Diagnostic_Services

http://www.peak-system.com/fileadmin/images/products/software/view/2010_PCAN-View_Trace.gif

http://www.canbushack.com/blog/index.php

http://ftp.utcluj.ro/pub/docs/laboratoare/PLA/ L1 Conversii si operatii in baze de numeratie.doc

http://www.math.uaic.ro/~eduard/Laborator%202.pdf

[1] http://www.adrcentru.ro/

[2] http://www.continental-corporation.com/

[3] http://ro.wikipedia.org/

[4] http://www.bosch.com.ro/

[5]https://support.office.com/ro-ro/article/Introducere-%C3%AEn-Excel-2010-d8708ff8-2fbd-4d1e-8bbb-5de3556210f7?ui=ro-RO&rs=ro-RO&ad=RO

[6] http://ftp.utcluj.ro/

[7] http://www.math.uaic.ro/

[8] http://www.peak-system.com/

[9] http://www.canbushack.com/

[10] http://vechi.upg-ploiesti.ro/

[11]Limbajul C# ……………………………………………………………….PhD. Lucian Sasu

[12]Head First C#………………………………………………… Andrew Stellman, Jennifer Greene (2010)

Bibliografie

http://www.aut.upt.ro/~dberian/Labs/Laborator1_MTP.pdf

http://en.wikipedia.org/wiki/CAN_bus

http://en.wikipedia.org/wiki/Unified_Diagnostic_Services

http://www.peak-system.com/fileadmin/images/products/software/view/2010_PCAN-View_Trace.gif

http://www.canbushack.com/blog/index.php

http://ftp.utcluj.ro/pub/docs/laboratoare/PLA/ L1 Conversii si operatii in baze de numeratie.doc

http://www.math.uaic.ro/~eduard/Laborator%202.pdf

[1] http://www.adrcentru.ro/

[2] http://www.continental-corporation.com/

[3] http://ro.wikipedia.org/

[4] http://www.bosch.com.ro/

[5]https://support.office.com/ro-ro/article/Introducere-%C3%AEn-Excel-2010-d8708ff8-2fbd-4d1e-8bbb-5de3556210f7?ui=ro-RO&rs=ro-RO&ad=RO

[6] http://ftp.utcluj.ro/

[7] http://www.math.uaic.ro/

[8] http://www.peak-system.com/

[9] http://www.canbushack.com/

[10] http://vechi.upg-ploiesti.ro/

[11]Limbajul C# ……………………………………………………………….PhD. Lucian Sasu

[12]Head First C#………………………………………………… Andrew Stellman, Jennifer Greene (2010)

Similar Posts