2009-11-24 11 views
13

Utilizziamo Matlab Simulink per lo sviluppo del modello (e autocodifica Real-Time Workshop) all'interno di un team di diversi sviluppatori.Controllo della versione di Matlab Simulink con più sviluppatori

Attualmente utilizziamo Visual Source Safe (sì, lo so terribilmente) per il controllo della versione, utilizzando i blocchi per evitare modifiche in conflitto.

Vogliamo migrare il nostro programma a un diverso sistema di controllo versione (svn, hg o git), ma siamo preoccupati di eseguire fusioni e diff su file .mdl di Simulink.

Qualcuno ha esperienza utile nell'esecuzione di unioni su file Simulink?

risposta

6

L'unione del testo dei file del modello Simulink sarà difficile. Ecco uno article che fornisce alcune informazioni sulla gestione della configurazione quando si utilizza Simulink.

Per quanto riguarda le differenze, c'è uno strumento di differenziazione nel Generatore di report Simulink che inizia a credere in R2008b +. Ecco un link per il documento per quella funzione.

Mike

+0

Grazie Mike, non avevo trovato questo articolo che hai fatto riferimento, che è un ottimo discussione di alcune delle le questioni coinvolte. Sembra che l'unica opzione realistica di ATM sia l'uso di blocchi, o almeno l'applicazione delle unioni manuali. –

+2

In realtà, ci sono strumenti come SimDiff e SimMerge che possono direttamente diff e unire i tuoi modelli, senza doverli convertire in un altro formato. SimDiff è disponibile dal 2005. Il documento di riferimento è un po 'datato; ecco due nuovi articoli: http://www.xilinx.com/support/documentation/application_notes/xapp498.pdf e http://www.sae.org/technical/papers/2010-01-0940 Il documento Xilinx spiega come usare SimDiff e SimMerge con SVN. Vedere la mia risposta per maggiori dettagli: http://stackoverflow.com/questions/1788646/matlab-simulink-version-control-with-multiple-developers/2436711#2436711 – rob

+1

Il link all'articolo è rotto – Joakim

1

Anche se non ho una specifica esperienza, svn gestisce i file e non di testo. Sono disponibili due opzioni:

  1. Se i file MDL non sono binari già (è stato troppo molti anni da quando ho usato Simulink) impostare il file svn: mime-type per i file MDL a "application/octet -stream "utilizzando auto-props feature o impostando manualmente la proprietà con svn propset. Non tenterà di unire, e su un check-in in conflitto richiederà l'intervento dell'operatore per risolvere le differenze.
  2. Imposta il tuo repository come bloccante, come VSS (senza fiamme per favore). Ecco un bel step-by-step guide.
+1

Marc, Simulink.I file mdl sono basati sul testo, ma all'interno di essi vi sono elementi che aumentano la probabilità di un'unione automatica di rompere il file (ad esempio, AFAIK, le linee tra i blocchi sono definite dalle loro coordinate xy, quindi se un blocco viene spostato su lo schermo un'unione automatica potrebbe causare danni). Grazie per i suggerimenti sull'impostazione SVN. Sembra che il blocco o le unioni manuali siano le uniche soluzioni al momento. –

3

Come accennato, Mathworks sta lavorando su strumenti di differenziazione per Simulink, in pratica esportandoli in file XML e quindi confrontandoli. Sebbene non ritenga che ciò possa aiutare a unire i file più di quanto possa fare qualsiasi sistema di controllo delle versioni esistente.

Ho iniziato a utilizzare Mercurial per il nostro codice MATLAB e per i modelli Simulink. Funziona bene e velocemente su alcuni modelli simulink abbastanza grandi, ma come singolo sviluppatore non ho ancora avuto a che fare con complicate fusioni. Un semplice diff e merge di solito genera diversi conflitti che non sono altro che modifiche alla sintassi, in genere timbri data e numeri di versione.

Il mio suggerimento sarebbe, se possibile, utilizzare riferimenti di modello. Ho un modello di grandi dimensioni che collega fondamentalmente una mezza dozzina di modelli secondari utilizzando la referenziazione del modello. Ogni sotto modello è sotto controllo di versione e solo uno sviluppatore è responsabile di un sottomodello, quindi affronta molti problemi nella fusione di diversi modelli simulink.

+1

Grazie Adrian. La strategia di riferimento del modello che hai menzionato è simile a quella dell'articolo di riferimento di Mike. Mi piacerebbe sicuramente vedere Mathworks trovare un maggior numero di file in formato merge per i modelli, quindi la route XML potrebbe essere una soluzione. –

1

Si prega di dare un'occhiata a http://www.ikv.de/mediniunite/ Forse che aiuta a risolvere i vostri problemi. Con medini unit abbiamo a disposizione un utile diff/merge-tool per Matlab/Simulink/Stateflow che è molto facile da usare e, naturalmente, da integrare in diversi sistemi di controllo di versione.

+1

Olaf, Sembra una soluzione eccellente, anche se sospetto che sia piuttosto costoso. Non sono molto appassionato di prodotti con siti web che ti fanno compilare tutti i tuoi dettagli solo per ottenere un preventivo, piuttosto che solo per dirti quanto costano sul sito web. –

+0

Jon, capisco cosa intendi. Ma d'altra parte è molto difficile sviluppare uno strumento come i medini uniti senza alcun feedback da parte dell'utente. Purtroppo questa è la nostra esperienza quando il nostro strumento era disponibile senza registrazione. Mandatemi le vostre domande a [email protected], risponderò rapidamente. –

5

SimDiff farà quello che ti serve. Puoi abbinarlo a qualsiasi sistema di gestione della configurazione/controllo della versione che ti piace.

Il documento SAE del 2007 a cui fa riferimento Mike è stato scritto prima che SimMerge (in seguito rimandato a SimDiff 4) fosse disponibile. Ora puoi utilizzare un moderno sistema di gestione della configurazione del software come AccuRev o IBM Unified Change Management per i tuoi progetti Simulink.

Ci sono almeno due nuovi articoli che sostituiscono il documento del 2007. Quello di Xilinx mostra esattamente come integrare SimDiff con SVN/Subversion.

Disclosure: sono stato coinvolto nello sviluppo di SimDiff 2005-2015.

2

Xilinx ha recentemente pubblicato uno app note che spiega come configurare Subversion con SimDiff e SimMerge per lo sviluppo basato sul team di modelli Simulink.

Dalla nota app:

"Questa nota applicazione fornisce una panoramica su come eseguire il controllo della versione sorgente e il design team-based utilizzando lo strumento System Generator Queste operazioni possono essere eseguite utilizzando le funzioni di controllo versione nativa a. l'ambiente software MATLAB® Simulink®, o con un sistema di controllo del codice sorgente esterno.Tuttavia, questa nota applicativa si concentra su Subversion, un noto sistema di controllo open source gratuito, altri software di controllo delle versioni come CVS, MS Source Safe e Clear Case può anche essere utilizzato, a seconda dell'ambiente di progettazione, e questa nota applicativa mostra anche come confrontare graficamente e fondere progetti basati su modelli utilizzando i pacchetti software esterni SimDiff e SimMerge di Ensoft. "

3

Il Mathworks consiglia di utilizzare Simulink Projects, che è nuovo in R2011b. Vedi lo Seth on Simulink blog per i dettagli.

Progetti Simulink integreranno MATLAB/Simulink con il sistema di controllo versione, oltre a fornire funzionalità aggiuntive.

Per quanto riguarda la fusione di Simulink, credo che la migliore pratica attuale sia evitarla il più possibile. Questo può essere fatto usando riferimenti di modelli e collegamenti di librerie, laddove appropriato, per garantire che ogni elemento di configurazione sia sufficientemente piccolo.

Problemi correlati