Despre EDSS

Electronic/Ergonomic Design and Simulation Software este o aplicație de proiectare/desenare și simulare de circuite electronice. Proiectul are ca obiective:

  • Realizarea unei interfeţe ergonomice care să permită desenarea rapidă şi elegentă de scheme electronice / logice
  • Realizarea unui sistem de simulare de bază
  • Relizarea unei platforme modulare în care ulterior să poată fi intergate modele de:
    • Simulare a circuitelor folosind diferiţi alogritmi
    • Recunoaşterea automată a unei scheme dintr-un desen
    • Trasare inteligentă a circuitelor
    • Realizarea de laboratoare pe bază unor simulări “ghidate”

( paranteaza pentru RSoC 2009)

Dat fiind complexitatea proiectului, el se va întinde pe termen mediu.

În această vară o să ne ocupăm de etapa1. Ideal ar fii ca cei care vor participa să îşi dorească o implecare pe termen lung în proiect.

Mentionez faptul că proiectul mai departe o să poată fi prezentat la:

  • diplomă ( or să fie module dezvoltate de 1-2 oameni care pot pregăti diploma în acest fel )
  • sesiunea de comunicări ştinţifice
  • concursuri de soft educaţional

Deasemanea, în cadrul proiectului vor avea loc o serie de traininguri.

Unele vor avea loc la început, altele vor avea loc după ce atingem anumite Milestonuri în dezvoltarea proiectului.

  • noţiuni avansate de POO - MVC, Swing, alte Design Patterns - Command, Decorator, Observer
  • tehnici avansate de Swing - Mediator Pattern, State Pattern, Swing Worker
  • tehnici de testare şi logging - logging (log4j), unit testing (JUnit)
  • tehnici de debugging şi profiling - debugging (Eclipse), profiling (JProfiler), thread dumps, static checking (JLint & AntiC)
  • Anti-patterns
  • Mijloace de lucru colaborative / comunicare

Aceste traininguri vă vor ajuta în lucrul la proiect.

Atenţie! În cadrul trainingurilor nu vor fi acoperite toate noţiunile necesare dezvoltări proiectului. Trainingurile au ca scop stabilirea bazelor, dar în timpul dezvoltări aşteptaterea din partea noastră este ca voi să căutaţi, învăţăţi şi aplicaţi tehnologi care ar putea fi nu doar pentru voi, dar şi pentru noi.

Pentru înscrieri: http://soc.rosedu.org/2009/?p=inregistrare

Logo

TODO

Echipa

Responsabili Proiect:

  • Daniel Rosner
  • Mihnea Muraru
  • Octavian Rînciog
  • Adrian Şendroiu
  • Cătalin Andrei Dobre
  • Elena Burceanu
  • Emilia Ştefania Pană
  • Ioana Adriana Dima
  • Mircea Urse
  • Radu Velea

Utilitare pentru dezvoltare

  • Dezvoltarea proiectului se face prin intermediul trac.
  • Subversion / Tortoise SVN pentru dezvoltarea colaborativă.
  • Google groups / Google Calendar pentru discutii şi timeline.

Mediul de dezvoltare

Programul va fi implementat in Java. Pentru partea de simulare exista posibilitatea de integrare cu librării scrise in C.

În momentul de fată analizăm următoarea posibilitata de dezvoltare:

Dezvoltarea în Eclipse. În momentul de faţă se are în vedere utilizarea:

Etapele proiectului

Etapa 1

  • Proiectarea şi implementarea modelului de date.
  • Proiectarea şi implementarea interfeţei grafice.

Există posibilitatea ca în prima fază, să se realizeze doar un Throw-away prototype, urmând ca etapele să fie devansate cu 1, şi în etapa următoare să se realizeze programul efectiv pornind de la prototip.

Etapa 2

  • Proiectarea şi implementarea primitivelor de bază a simulatorului.
  • Implementarea unui sistem de simulare simplă pentru circuite logice, pentru a testa primitivele simulatorului.

Etapa 3 … n

  • Integrarea cu sisteme de simulare pentru toate tipurile de simulări care vor fi suportate.

Etapa n+1 .. Realizarea de module extra.

Etapa 1

Etapa 1 este cea pe care ne propunem să o implementăm pentru această vară, drept urmare mai jos o să detaliez ce ar fi de făcut.

Definirea modelului de date

3 componente majore

  1. Definirea modelului pentru piese
  2. Definirea modelului pentru schemă
  3. Un modul care în afară de informaţile specifice schemei, să încorporeze informaţii auxiliare.

Modelul pentru piese

Fiecare piesă va avea 3 componente în definiţie

  1. Desenul de reprezentare a piesei – desen care va fi în format vectorial
  2. Informaţile pentru simulare – cel mai probabil, în format txt, cu un set de propietăţi asemnănător celor folosite în simulările de tip Spice
  3. Textul de afişat pe schemă

Modelul pentru schemă

Schema va avea la bază un model de matrice.

Din motive de ergonomie, nu vom megre pe ideea de desenare “la liber” ci vom limita toate acţiunile la o matrice de puncte. Astfel, toate piesel vor trebui să se încadreze în mod obligatoriu cu pinii de IN/OUT în matricea de puncte, şi orice traseu se va încadra în această matrice. Deşi la prima vederea, pare o limitare, din experienţa de lucru cu ambele tipuri de programe, această abordare permite o desenare mai rapidă şi mai ordonată a schemelor. Punctele matricii oferă repere şi puncte de sprijin rapide, iar dimensiunile standartizate oferă schemei un aspect ordonat şi unitar. Matricea trebuie să aibă o rezoluţie variabilă! Dar, rezoluţile trebuie să fie multiple de distanţa standard deintre pinii unei piese. ( Cănd vom definii modelul de date o să devină mai clar).

Poza de mai jos clarifică lucrurile:

Deaseamenea, în cadrul unei scheme, trebuie ţinut cont de faptul că fiecare piesă poate avea unele propietăţi schimbate:

  • Denumire, mărime de desenare
  • Propietăţi ( Ex: valoarea unei rezistenţe, valoarea unui condensator, caracteristicile unui tranzistor )
  • Deasemanea, programul va trebui să încorporeze un sistem de adăugare de informaţii suplimentare pe desen:
    • Text
    • Poze
    • Link-uri ( aici rămâne de discutat )

Un alt lucru important este tratarea capetelor circuitului care acţionează ca intrări/ ieşiri. Deasemanea, trebuie să exista un sistem simplu de Label-ing, în special pt IN/OUT.

Integrarea în aplicaţia grafică

3 module care pot fi independente:

Modul de definire a pieselor

Aceasta poate fi realizat şi independent de restul aplicaţiei.

Definirea pieselor are 2 componente.

  • Desenarea

Desenarea trebuie să fie vectorială. Forme simple, de tipul celor din cursuri de specialitate / din programele cele mai comune.

În general alb negru.

Eventuale culori se pot adăuga în partea de desenare, la randare. Nu are rost sa încărcăm în partea aceasta proiectul cu desenare corpuri colorate. Rămânem la linii negre pe fundal alb.

Eventual ar fii bine dacă am putea găsi un mod de a prelua dintr-o librărie publică simbolurile pentru a le integra în aplcaţie. Este vorba de sute de simboluri, pe care nu vrem să le desenăm noi de mână.

Exemplu de desene:

  • Propietăţi ( aici o dată defint modelul, e doar vorba de un copy paste de text sau ceva de genul )

După cum am mentionat şi mai sus, programul va avea la bază pentru desenare o matrice de puncte între care se pot trasa trasee.

Drept urmare, şi piesele vor trebui să se înadreze în acest set de punct, în special porturile de IN/OUT vor trebui încadrate. Poza de mai jos cred că este edificatoare în această privinţă. ( este poză din DSCH, un program foarte bun pentru simulare, dar cu bug-uri( muuuulte).

Modulul de desenare a schemei

Modulul va avea pe fundal un sistem de tip matrice de puncte [ vezi poza de mai sus]. Va exista o paletă de componente din care se pot selecta componentele.

Trebuie gândit un sistem cât mai ergonomic de luat componentele din paletă şi pus în zona de desenare. Deşi aparent un sistem de tip drag-and-drop ar fi optim, trebuie ţinut cont de:

  • La un moment dar voi fii foarte multe piese, si un sistem de paletă cu piese din care faci drag nu o să mai fie viabil pentru că nu o să intre toate pe paletă.
  • Dacă ai de pus multe piese de acelaşi tip, pierzi mult timp mergând la paletă pentru fiecare.

ISI Proteus are un sistem interesant pentru această problemă, în care alegi piesele dintr-o interfaţă bazată pe liste, şi acestea sunt trecute într-o paletă intermediară, unde sunt doar piesele pe care le-ai selectat că o să le foloseşti. O dată selectată o piesă, la fiecare click stânga va fi poziţionată acea piesă selectată din paleta temporală. ( din păcate uneori devine enervant pentru că nu sunt foarte bine definite şi separate controalele şi te trezeşti că pui piese pe suprafaţa de desen fără rost. Exemplu de librărie de acest tip: http://dev.rosedu.org/trac/edss/attachment/wiki/WikiStart/exemplu_biblioteca_din_isis_proteus.jpg

O posibilă soluţie ar fi o abordare mixta, in care să exista elementele prezentate mai sus, dar si o paleta pentru drag and drop în care să fie prezente componenetele pe care la vreau uitlizatorul ( să aibă o opţiune de configurare a acestei palete). Deasemenea, trebuie avut grijă la controale pentru a nu ajunge în situaţii enevrante pentru utilizator.

Modul simboluri

Undeva între cele 2 module de mai sus trebuie sa fie un modul care îţi permite să grupezi câteva piese şi să creezi

  • un simbol direct, adică piesele grupate şi vizibile
  • un simbol mascat, adică un dreptunghi care ascunde piesele respective, şi are pini de intrare şi pini de ieşire
  1. la definire, trebuie să existe control asupra aranjării şi denumirii pinilor
  2. by default, pinii de IN sunt în stânga, pinii de OUT în dreapta
  3. by default, pinii au denumirile date de intrările / ieşirile din scheme iniţială

Scurt studiu

Am realizat un mic studiu al soluţilor disponibile pe piată.

Acest studiu este necesar pentru a putea învăţă din greşelile altora:).

Softuri bune pe partea de simulare

  • DSCH
  • Circuit Logix
  • ISIS Proteus
  • Multisim
  • Spice
  • qucs

Softuri bune pentru desenat

  • Microsoft Visio
  • Smart Draw

Acestea nu au simulare + se vede ca nu au fost gândite pentru scheme electrice pentru că au diverse greşeli, de tipul - nu poţi trage destui pini la o piesă.

Taskuri etapa 1

Taskurile de faţă sunt o listă în lucru ce va fi odificată pe măsură ce taskurile vor fi realizate ( şi ne dăm seama de noi necesităţi - în stilul Agile ).

Taskuri iniţiale

  • Stabilirea exactă a arhitecturii generale
  • Stabilirea finală a mediului de dezvoltare şi a frameworkurilor ce vor fi folosite

Taskuri model de date

Modelul pentru piese

  • Cercetare modele posibile de adoptat pentru realizarea desenelor

Desenele vor trebui să fie realizate în mod vectorial şi cât mai simplu. ( vezi exemplele de mai sus ). Trebuie ales un format vectorial. În alegere trebuie ţinut cont şi de faptul că va trebui să implementăm şi un "desenator".

  • Cercetare modele posibile de adoptat pentru datele de simulare

Modelul de date de simulare trebuie să fie compatibil cu cele standard. Trebuie studiat modelul folosit de Spice şi documentat pentru a fi uşor apoi pentru echipa care va face implementarea interfeţei de definire a pieselor, şi apoi pentru echipa care va lucra la simulare să lucreze cu acest model de date.

  • Definirea datelor auxiliare pentru fiecare piesă

În principal, date auxilare vor fi de tip text. Trebuie efectuat un mic studiu şi determinat dacă există şi alte date auxiliare necesare.

  • Definirea modelului pentru piese care să incorporeze toate datele.
  • Definirea unui model de marcare pentru pini de IN/OUT

Modelul pentru schemă

  • Definirea modului în care vor fi reţinut informaţile auxiliare. Schema va cuprinde şi informaţi de tip text, poze, posibil şi linkuri.
  • Definirea modului în care vor fi reţinut informaţile pentru piese. Fiecare piesă poate avea modificate informaţile faţă de informaţile din piesa de bază definită în bibliotecă ( modificate de utilizator). Trebuie descis dacă se salvează încă o dată toată piesa separat sau se reţin separat numai diferenţele, şi cum se reţin.
  • Definirea modelului de matrice care va fi folosit
  • Definirea modului de reprezentare a structurii de piese. Schema trebuie reprezentată sub o formă care uneşte piesele puse în schemă şi legăturile dintre ele.
  • Definirea totală a modelului pentru schemă.

Modelul pentru simboluri

  • Cercetare modele posibile de adoptat pentru realizarea de simboluri. Programul trebuie să suporte 2 tipuri de simboluri. 1 tip care reţine doar schema aşa cum e ( pentru a putea insera uşor structuri predefinite dar care să rămână vizibile. Al doilea tip presupune să fie salvat un grup de piese sa simbol, care ulterior să fie folosit ca un "black box". Asta presupune să se memorez atât scheme din interior, dar şi aranjarea pinilor de IN/OUT, numele pinilor, dimensiunea componentei, etc.
  • Definirea modelului pentru simboluri de tip 1
  • Definirea modelului de simboluri de tip 2
  • Modelul de definire a datelor care variază la piese

Piesele standard au unii parametrii variabil. De exemplu, rezistenţele. O variantă ar fi să definim câte o rezistenţă pentru fiecare valoarea ce se regăseşte în setul standard de valori. O variantă mai bună ar fi să găsim o soluţie în care avem definită o rezistenţă, şi la momentul aducerii în schemă să îi fie stabilită valoarea. Probleme posibile: uneori vrem piese predefinite. Unele piese au mulţi parametrii pe care nu vrem să îi introducem de fiecare dată când avem nevoie de o piesă. Trebuie găsit un echilibru.

Taskuri GUI

  • Alegerea unui mod de aranjare a spaţiului de lucru. Trebuiea realizată o listă cu paletele necesare în spaţiu de lucru, cu butoanele necesare, etc.
  • Desenarea efectivă a spaţiului de lucru Fie în cod, fie într-un editor vizual de GUI. Depinde şi de framework.
  • Implementarea modulului de desenare piese
    • Deisngnul GUI-ului pentru modulul de desenare piese
    • Implementarea modului de desenare Taskul de referă la desenarea efectivă, cu clickuri.
    • Impelemntarea modului de salavare a piesei O dată desenată, piesa trebuie salvată în formatul stabilit.

Implementarea interfeţei de bibliotecă

  • Alegerea designului optim
  • Desenarea paletelor / ferestrelor
  • Implementarea modulului de încărcare a datelor din fişierele de definiţie
  • Implementarea unui sistem de grupare şi de search pe categorii - Intrucât la un moment dat or să fie foarte multe piese, trebuie să exista un mod de grupare a acestora. Poate chiar o bază de date. Este necesară o interfaţă de căutare.
    • Definire model de stocare a categoriilor şi a datelor
    • Definire reguli de updatare a bazei de date cu piese
    • Implementare bază de date/ fişier cu categorii şi piese
    • Implementat căutare în lista de piese
    • Implementat o căsuţa de previzualizare a pieselor Când un ultilizator caută o piesă, trebuie să poată să vizualizeze piesele prin care trece.
  • Implementare paletă cu piese selectate din bibliotecă
  • Implementare paletă predefinită de utilizator - Favorites
    • Proiectare grafică
    • Implementare GUI
    • Implementare interfaţă de trecere din bibliotecă în paleta cu "Favorites

Implementarea interfeţei de luat piese din bibliotecă

  • Definit controale
  • Definit şi implementat mod de lucru "select and keep droping"
  • Implementat mod de lucru "drag-and drop"
  • Implementat luare din ambele palete Este vorba despre paleta Favorites şi paleta cu ce am selectat acuma din bibliotecă
  • Implementat sistem de plasare în matrice
  • Implementat legătură dintre plasare pe ecran şi modificarea în modelul de date

Implementare modul de desenare linii

  • Definit model linii
  • Definit tooluri specifice pentru lucrul cu linii New line, Delete, Mutare, Inserare punct de legătură.
  • Implementat tooluri specifice

New line

  • "Lipire de pinul unei piese"
  • Trasare prin puncte ale matricii
  • Trasare inteligentă
  • Legătura cu modelul de date

Mutare - schimbare traseu

  • Mutare segment de linie
  • Mutare capăt linie
  • Legătura cu modelul de date

Inserare punct

  • Inserare punct de legătură
  • Legătura cu modelul de date

Implementat sistem de rearanjare piese

  • Modul de Align / Destribuite

Mod de lucru

Strategia exactă de lucru rămâne de stabilit, dar cel mai probabil vom adopta unele din ideile de de bază în metodologia XP:

  • Peer Programing - scrierea codului în echipe de 2 oameni
  • Comunicarea directă - ne vom baza mult pe comunicare directă şi mai puţin pe documentaţie care va fi redusă la minim ( a nu se înţelege că nu vom documenta codul)
  • Simplitate - fiind un proiect complex, ne vom concentra pe atingerea obiectivelor propuse şi pe implementarea functionalităţilor din lista de taskuri, fără a pierde timp cu feature-uri care "par utile"

Pagini utile

Attachments