2009-11-24 29 views
13

Estamos utilizando Matlab Simulink para el desarrollo de modelos (y la autocodificación de Taller en tiempo real) dentro de un equipo de varios desarrolladores.Control de versiones de Matlab Simulink con múltiples desarrolladores

Actualmente utilizamos Visual Source Safe (sí, sé que es terrible) para el control de versiones, utilizando bloqueos para evitar cambios conflictivos.

Nos gustaría migrar nuestro programa a un sistema de control de versiones diferente (svn, hg o git), pero nos preocupa realizar fusiones y diffs en archivos Simulink .mdl.

¿Alguien tiene experiencia útil en realizar fusiones en archivos Simulink?

Respuesta

6

La fusión del texto de los archivos del modelo Simulink será difícil. Aquí hay un article que proporciona información sobre la administración de la configuración cuando se usa Simulink.

En cuanto a los diffs, existe una herramienta de diferenciación en Simulink Report Generator comenzando Creo en R2008b +. Aquí hay un link al doc para esa característica.

Mike

+0

Gracias Mike, no había encontrado ese artículo la que hizo referencia, que es una muy buena discusión de algunos de los problemas involucrados. Parece que la única opción realista ATM es usar bloqueos, o al menos aplicar fusiones manuales. –

+2

En realidad, existen herramientas como SimDiff y SimMerge que pueden diferenciar y fusionar directamente sus modelos, sin tener que convertirlos a otro formato. SimDiff ha estado disponible desde 2005. El documento al que se hace referencia es un poco anticuado; aquí hay dos documentos más nuevos: http://www.xilinx.com/support/documentation/application_notes/xapp498.pdf y http://www.sae.org/technical/papers/2010-01-0940 El documento de Xilinx explica cómo usar SimDiff y SimMerge con SVN. Ver mi respuesta para más detalles: http://stackoverflow.com/questions/1788646/matlab-simulink-version-control-with-multiple-developers/2436711#2436711 – rob

+1

El enlace al artículo está roto – Joakim

1

Aunque no tengo una experiencia específica, trata los archivos de SVN no es de texto también. Tiene dos opciones:

  1. Si los archivos mdl no son binarios ya (que ha sido demasiados años desde que he usado Simulink) establecer el archivo svn: mime-type para los archivos mdl a "application/octet -stream "utilizando auto-props feature o estableciendo la propiedad manualmente con svn propset. No intentará fusionarse, y en un control conflictivo será necesaria la acción del operador para resolver las diferencias.
  2. Configure su repositorio para que sea uno de bloqueo, como VSS (sin llamas, por favor). Aquí hay un buen step-by-step guide.
+1

Marc, Simulink.Los archivos mdl están basados ​​en texto, pero hay elementos dentro de ellos que aumentan la probabilidad de que una fusión automática rompa el archivo (por ejemplo, AFAIK, las líneas entre bloques se definen por sus coordenadas xy, por lo que si se mueve un bloque la pantalla una fusión automática podría hacer daño). Gracias por los consejos sobre la configuración de SVN. Parece que las fusiones o fusiones manuales son las únicas soluciones en la actualidad. –

3

Como se mencionó, Mathworks está trabajando en herramientas de diferenciación para Simulink, básicamente exportándolas a archivos XML y luego comparándolos. Aunque no creo que eso ayude a fusionar los archivos más que cualquier sistema de control de versiones existente.

He comenzado a usar Mercurial para nuestro código MATLAB y modelos Simulink. Funciona bien y rápido en algunos modelos simulink bastante grandes, pero como desarrollador único no he tenido que lidiar con ninguna fusión complicada todavía. Un simple diff y merge usualmente arroja varios conflictos que no son más que cambios de sintaxis, usualmente marcas de fecha y números de versión.

Mi sugerencia sería, de ser posible, utilizar las referencias del modelo. Tengo un modelo grande que básicamente vincula media docena de submodelos utilizando referencia de modelo. Cada submodelo está bajo el control de la versión y solo un desarrollador es responsable de un submodelo, por lo que pasa a un lado muchos de los problemas al fusionar diferentes modelos de Simulink.

+1

Gracias Adrian. La estrategia de referencia de modelo que mencionó es similar a la del artículo al que hace referencia Mike. Definitivamente me gustaría que Mathworks ofrezca un formato de archivo más fácil de combinar para los modelos, por lo que la ruta XML podría ser una solución. –

1

Por favor, eche un vistazo a http://www.ikv.de/mediniunite/ Quizás eso ayude a resolver sus problemas. Con medini unite proporcionamos una útil herramienta Diff/Merge para Matlab/Simulink/Stateflow que es muy fácil de usar y, por supuesto, se integra en diferentes sistemas de control de versiones.

+1

Olaf, Parece una excelente solución, aunque sospecho que es bastante caro. No me gustan mucho los productos con sitios web que le hacen completar todos sus detalles solo para obtener una cotización, en lugar de solo decirle cuánto cuestan en el sitio web. –

+0

Jon, entiendo lo que quieres decir. Pero, por otro lado, es muy difícil desarrollar una herramienta como medini unite sin ningún comentario del usuario. Lamentablemente, esa es nuestra experiencia cuando nuestra herramienta estaba disponible sin registro. Envíenme sus preguntas a [email protected], responderé rápidamente. –

5

SimDiff hará lo que necesite. Puede emparejarlo con cualquier sistema de control de configuración/gestión de configuración de software que desee.

El documento SAE 2007 referenciado por Mike se escribió antes de que SimMerge (más tarde renombrado como SimDiff 4) estuviera disponible. Ahora puede usar un sistema de administración de configuración de software moderno como AccuRev o IBM Unified Change Management para sus proyectos de Simulink.

Existen al menos dos documentos más nuevos que sustituyen al documento de 2007. El de Xilinx muestra exactamente cómo integrar SimDiff con SVN/Subversion.

Revelación: yo estaba involucrado en el desarrollo de SimDiff de 2005-2015.

2

Xilinx ha publicado recientemente un app note que detalla cómo configurar Subversion con SimDiff y SimMerge para el desarrollo en equipo de los modelos de Simulink.

De la nota de aplicación:

"Esta nota de aplicación ofrece una visión general sobre la forma de realizar el control de versión de código y diseño basado en el equipo con la función Sistema Generador Estas tareas se pueden realizar utilizando las funciones de control de versión nativa a. el entorno de software MATLAB®Simulink®, o con un sistema de control de fuente externo. Si bien esta nota de la aplicación se centra en Subversion, un sistema de control de código abierto libre, bien conocido, otro software de control de versiones como CVS, MS Source Safe y Clear Case también se puede usar, dependiendo del entorno de diseño. Esta nota de aplicación también demuestra cómo comparar gráficamente y fusionar diseños basados ​​en modelos utilizando los paquetes de software externo SimDiff y SimMerge de Ensoft. "

3

El Mathworks recomienda utilizar Simulink Projects, que es nuevo en R2011b. Vea el Seth on Simulink blog para más detalles.

Simulink Projects integrará MATLAB/Simulink con su sistema de control de versiones, además de proporcionar funciones adicionales.

En cuanto a la fusión de Simulink, creo que la mejor práctica actual es evitarla tanto como sea posible. Esto se puede hacer utilizando referencias de modelo y enlaces de biblioteca, según corresponda, para garantizar que cada elemento de configuración sea lo suficientemente pequeño.

Cuestiones relacionadas