[kepler-users] Kepler 2.3 and MATLAB

Christopher Brooks cxh at eecs.berkeley.edu
Tue Apr 24 10:03:57 PDT 2012


Reimplementing the Matlab interface to use JNA instead of JNI directly 
would mean that we would not have to have a separate Ptolemy/Kepler 
Matlab-specific dll.  This *might* remove some of the platform 
dependency issues.  JNA is released under the GNU Lesser GPL.  I've been 
using JNA as an interface to C-based Functional Mock-up Unit (FMU) code 
and it works well.

In theory, FMUs could be used to invoke Simulink modules from within 
Ptolemy II.  However, I believe this requires a toolkit from a third 
party.  I'm not sure about just invoking simple Matlab functions, but it 
could probably be made to work.

Another issue is 32 vs. 64 bit width.  Many tools (Dymola) are only 
32-bit.   At least Mac OS X has a way of bundling both 32 and 64 bit 
shared objects in one file.  I don't believe Windows has such a facility.

A big issue is that vendors change their interfaces over time, which 
makes support difficult.  If we went with JNA, then *might* be insulated 
against some of these changes.

JNA would help us get out of the business of building shared libraries 
for linux32, linux64, darwin32, darwin64, win32 and win64.

_Christopher

On 4/23/12 10:18 AM, Wade Sheldon wrote:
> I agree with you Edward, but I figured it was worth a try. I think 
> tool chaining is more sustainable than integration in the long run, so 
> data interchange formats and standards are more important than program 
> hooks.
>
> To follow up on my subsequent note, and reinforce your point, the JNI 
> for Matlab in Kepler 2.3 breaks in 2010a and 2011b, but works in 
> 2009a. I don't use COM-based or command line calls to Matlab for 
> anything else, so I'll keep 2009a configured in the path for Kepler 
> and continue to use 2011b for my normal work.
>
> Thanks.
>
> Wade
>
>
> On 4/23/2012 12:59 PM, Edward A. Lee wrote:
>>
>> If it's any consolation, my experience is that "tool integration"
>> is almost impossible to achieve, in practice... Even if you get
>> it working once, it will break when something changes...
>> There is clearly a technical challenge here.
>>
>> Edward
>>
>> On 4/23/12 9:08 AM, Wade Sheldon wrote:
>>> Hi folks,
>>>
>>> Thanks for all the advice last week, but I'm throwing in to towel 
>>> unless
>>> someone has a radically new idea. I installed Matlab 2009a and that 
>>> also
>>> failed to run the demo, but with a different error message: "Caused by:
>>> java.lang.UnsatisfiedLinkError: C:\Program
>>> Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: The
>>> specified procedure could not be found ...". I also tried R2007b
>>> (mentioned in help files) and had the same result as 2009a. So R2010a
>>> and R2011b error with "...The
>>> operating system cannot run %1" and R2007b and R2009a error with the
>>> above procedure call error, in case that's of any diagnostic value. I
>>> also installed Kepler on a different workstation run WinXP and had the
>>> same issues.
>>>
>>> To eliminate potential Java version issues, I wiped Kepler 2.3 and all
>>> the settings files, uninstalled an old version of the JDK I had on the
>>> box (1.6_18), installed a matching JDK to the Java libraries previously
>>> installed (1.6.0_31-b05) and reinstalled Kepler. Same result. I also
>>> added C:\Program Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab to 
>>> the
>>> path (based on Ptolemy Matlab troubleshooting guidelines) but that
>>> didn't help either.
>>>
>>> I then tried to follow the build instructions from the url Dan sent,
>>> spending most of the weekend setting up the software and source code 
>>> and
>>> ironing out cygwin and mingw configurations and dependencies (the
>>> instructions on the reference page are out of date, and the mingw shell
>>> scripts described are not online and no mention is made of what
>>> libraries are needed for cygwin, so I had to guess and reinstall 
>>> several
>>> times to get what was needed). After climbing down ever darker rabbit
>>> holes I managed to get a working build system set up, but then hit
>>> syntax errors with the .config files (apparently due to line terminator
>>> issues) and never could successfully build a dll.
>>>
>>> I concluded that this process is really untenable for someone not
>>> already set up to do Java development and use the entire Kepler build
>>> system, so at this point I rolled back my system and dumped the gig of
>>> software I spent all weekend messing with. So it was an informative, 
>>> but
>>> ultimately futile, exercise.
>>>
>>> Thanks anyway. For my work it will be more productive to generate
>>> delimited files from Kepler and pick them up in Matlab, but I wanted to
>>> kick the tires and see if I could roll our Matlab code into native
>>> workflows. I'm about to rebuild that system using Win7/64 dual booting
>>> with Ubuntu, so I may try again if I feel adventurous.
>>>
>>> -Wade
>>>
>>>
>>> On 4/21/2012 4:48 PM, Daniel Crawl wrote:
>>>>
>>>> I can run the MatlabExpression workflow with Kepler 2.3 on
>>>> WinXP SP3 (32bit) using Matlab 2009A and Java 1.6.0_31-b05.
>>>>
>>>> Your PATH looks ok (assuming you installed Matlab in C:\ and
>>>> not the default C:\Program Files). It's possible that ptmatlab.dll
>>>> is not compatible with newer versions of Matlab. You can find
>>>> instructions on building ptmatlab.dll here:
>>>>
>>>> https://kepler-project.org/developers/teams/build/matlab-lib-build-instructions-in-kepler-for-matlab-actor/ 
>>>>
>>>>
>>>>
>>>> --dan
>>>>
>>>> On 4/21/12 4:17 AM, Wade Sheldon wrote:
>>>>> Hi Derek,
>>>>>
>>>>> Here you go:
>>>>>
>>>>> PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Python25;C:\Program 
>>>>>
>>>>>
>>>>> Files\WinZip;C:\Program Files\Bitvise Tunnelier;C:\Program
>>>>> Files\Microsoft SQL
>>>>> Server\80\Tools\Binn;C:\ArcGIS\arcexe9x\bin;C:\MATLAB\R2011b\bin;C:\MATLAB\R2011b\bin\win32;C:\Program 
>>>>>
>>>>>
>>>>> Files\cURL;C:\Program Files\TortoiseSVN\bin;C:\Program
>>>>> Files\R\R-2.15.0\bin;C:\Program Files\Common Files\Roxio
>>>>> Shared\DLLShared\;C:\Program Files\Common Files\Roxio
>>>>> Shared\9.0\DLLShared
>>>>>
>>>>>
>>>>> I have several versions of MATLAB on this box for code testing, but I
>>>>> made sure only one is present in the path each time I tested 
>>>>> (currently
>>>>> 2011b). I also confirmed that the target "libmex.dll" is present in
>>>>> \bin\win32.
>>>>>
>>>>> I don't have cygwin installed to test Christopher's idea about 
>>>>> building
>>>>> a new .dll, but I may play with that option over the weekend if I get
>>>>> ambitious. Based on Matt's comment that may ultimately prove 
>>>>> necessary
>>>>> if the problem doesn't come down to path handling.
>>>>>
>>>>> Thanks for your input.
>>>>>
>>>>> -Wade
>>>>>
>>>>>
>>>>> On 4/20/2012 11:30 PM, Derik Barseghian wrote:
>>>>>> Sorry this hasn't been easy, and no help from me yet -- I'm 
>>>>>> trying to
>>>>>> get Matlab and a license for my 32bit XP box so that I can try to
>>>>>> replicate, hopefully on Monday. It seems to me it should work on 
>>>>>> your
>>>>>> XP box. The last commit message for ptmatlab.dll says it's 32bit:
>>>>>> --------------
>>>>>> r24053 | crawl | 2010-04-29 13:30:49 -0700 (Thu, 29 Apr 2010) | 2 
>>>>>> lines
>>>>>>
>>>>>> updating matlab jni library for 32 bit windows
>>>>>> based on ptmatlab.cc r57728.
>>>>>> --------------
>>>>>>
>>>>>> Interesting to hear about the error on 64bit AMD, sounds like we 
>>>>>> have
>>>>>> an (additional) problem there.
>>>>>>
>>>>>> Can you send your PATH?
>>>>>> Derik
>>>>>>
>>>>>> On Apr 20, 2012, at 8:14 PM, Wade Sheldon wrote:
>>>>>>
>>>>>>> No joy under Win7/64 either with a clean install of Kepler 2.3 and
>>>>>>> the proper Matlab paths (albeit R2010a 64bit). However this time I
>>>>>>> get an error related to running 32bit libraries on the system:
>>>>>>> C:\Program Files
>>>>>>> (x86)\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: 
>>>>>>> Can't
>>>>>>> load IA 32-bit .dll on a AMD 64-bit platform
>>>>>>>
>>>>>>> (This is an Intel Core i7, not AMD cpu, BTW).
>>>>>>>
>>>>>>> Sigh. Harder than I'd hoped. Python and R work fine as on 
>>>>>>> WinXP/32 -
>>>>>>> the problem is just related to the MatlabExpression actor, which is
>>>>>>> what I'm particularly interested in using.
>>>>>>>
>>>>>>> -Wade
>>>>>>>
>>>>>>>
>>>>>>> On 4/20/2012 10:41 PM, Wade Sheldon wrote:
>>>>>>>> Also, I updated Java to the latest version (1.6.0_31-b05),
>>>>>>>> uninstalled Kepler, and reinstalled from a full admin account. 
>>>>>>>> Same
>>>>>>>> results. From what I can find on the web, that "The operating 
>>>>>>>> system
>>>>>>>> cannot run %1" is a generic error that implies a path issue.
>>>>>>>> Anything I can check regarding the Kepler classpath or libraries
>>>>>>>> come to mind?
>>>>>>>>
>>>>>>>> Thanks again for your help.
>>>>>>>>
>>>>>>>> -Wade
>>>>>>>>
>>>>>>>> On 4/20/2012 10:02 PM, Wade Sheldon wrote:
>>>>>>>>> Thanks, Christopher. I had already perused the mailing list
>>>>>>>>> archives via Google and just saw references to the same issue
>>>>>>>>> without solutions. I confirmed that the JVM bit width is 32 (Java
>>>>>>>>> version 1.6.0_20).
>>>>>>>>>
>>>>>>>>> I set up a simpler workflow with just a SDF director,
>>>>>>>>> MatalbExpression actor and text display actor, and configured the
>>>>>>>>> expression: "rand(100,1);", but I got the same error. Here's the
>>>>>>>>> trace from the first time it was invoked, which yielded a little
>>>>>>>>> more info as you indicated, specifically "C:\Program
>>>>>>>>> Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: 
>>>>>>>>> The
>>>>>>>>> operating system cannot run %1". Hope that points to a specific
>>>>>>>>> issue.
>>>>>>>>>
>>>>>>>>> Thanks.
>>>>>>>>>
>>>>>>>>> -Wade
>>>>>>>>>
>>>>>>>>> complete stack dump:
>>>>>>>>> ptolemy.kernel.util.IllegalActionException: There was a problem
>>>>>>>>> invoking the Ptolemy II Matlab interface.
>>>>>>>>> The interface has been tested under Linux, Mac OS X, and Windows.
>>>>>>>>> The interface requires that Matlab be installed on the local
>>>>>>>>> machine and that the ptmatlab shared library available.
>>>>>>>>> * Under Linux, you must have the LD_LIBRARY_PATH environment
>>>>>>>>> variable set to include the directories that contain libmx.so and
>>>>>>>>> libptmatlab.so.
>>>>>>>>> * Under Mac OS X, you must have the DYLD_LIBRARY_PATH environment
>>>>>>>>> variable set to include the directories that contain libmx.dylib
>>>>>>>>> and libptmatlab.jnilib.
>>>>>>>>> * Under Windows, you must have your PATH set to include the 
>>>>>>>>> Matlab
>>>>>>>>> bin/win32 or equivalent directory so that libmex.dll is found and
>>>>>>>>> the directory that contains libptmatlab.dll. In addition, if you
>>>>>>>>> are running under Windows from the Cygwin bash prompt, then you
>>>>>>>>> must start Vergil with the -jni argument: $PTII/bin/vergil -jni.
>>>>>>>>> For details, see $PTII/jni/package.html.
>>>>>>>>> Refer to $PTII/ptolemy/matlab/makefile for more information.
>>>>>>>>> in .Unnamed1.MatlabExpression
>>>>>>>>> Because:
>>>>>>>>> C:\Program
>>>>>>>>> Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: 
>>>>>>>>> The
>>>>>>>>> operating system cannot run %1
>>>>>>>>> at ptolemy.matlab.Expression.preinitialize(Expression.java:263)
>>>>>>>>> at ptolemy.actor.Director.preinitialize(Director.java:1056)
>>>>>>>>> at ptolemy.actor.Director.preinitialize(Director.java:1035)
>>>>>>>>> at
>>>>>>>>> ptolemy.domains.sdf.kernel.SDFDirector.preinitialize(SDFDirector.java:655) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.actor.CompositeActor.preinitialize(CompositeActor.java:1735) 
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.actor.Manager.preinitializeAndResolveTypes(Manager.java:930) 
>>>>>>>>>
>>>>>>>>> at ptolemy.actor.Manager.initialize(Manager.java:636)
>>>>>>>>> at ptolemy.actor.Manager.execute(Manager.java:340)
>>>>>>>>> at ptolemy.actor.Manager.run(Manager.java:1111)
>>>>>>>>> at ptolemy.actor.Manager$PtolemyRunThread.run(Manager.java:1641)
>>>>>>>>> Caused by: java.lang.UnsatisfiedLinkError: C:\Program
>>>>>>>>> Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: 
>>>>>>>>> The
>>>>>>>>> operating system cannot run %1
>>>>>>>>> at java.lang.ClassLoader$NativeLibrary.load(Native Method)
>>>>>>>>> at java.lang.ClassLoader.loadLibrary0(Unknown Source)
>>>>>>>>> at java.lang.ClassLoader.loadLibrary(Unknown Source)
>>>>>>>>> at java.lang.Runtime.load0(Unknown Source)
>>>>>>>>> at java.lang.System.load(Unknown Source)
>>>>>>>>> at
>>>>>>>>> ptolemy.data.expr.UtilityFunctions._loadLibrary(UtilityFunctions.java:2068) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.data.expr.UtilityFunctions.loadLibrary(UtilityFunctions.java:927) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at ptolemy.matlab.Engine.<clinit>(Engine.java:176)
>>>>>>>>> at ptolemy.matlab.Expression.preinitialize(Expression.java:260)
>>>>>>>>> ... 9 more
>>>>>>>>> Caused by: java.lang.UnsatisfiedLinkError: C:\Program
>>>>>>>>> Files\Kepler-2.3\common-2.3.0\lib\ptolemy\matlab\ptmatlab.dll: 
>>>>>>>>> The
>>>>>>>>> operating system cannot run %1
>>>>>>>>> at java.lang.ClassLoader$NativeLibrary.load(Native Method)
>>>>>>>>> at java.lang.ClassLoader.loadLibrary0(Unknown Source)
>>>>>>>>> at java.lang.ClassLoader.loadLibrary(Unknown Source)
>>>>>>>>> at java.lang.Runtime.load0(Unknown Source)
>>>>>>>>> at java.lang.System.load(Unknown Source)
>>>>>>>>> at
>>>>>>>>> ptolemy.data.expr.UtilityFunctions._loadLibrary(UtilityFunctions.java:2068) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.data.expr.UtilityFunctions.loadLibrary(UtilityFunctions.java:927) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at ptolemy.matlab.Engine.<clinit>(Engine.java:176)
>>>>>>>>> at ptolemy.matlab.Expression.preinitialize(Expression.java:260)
>>>>>>>>> at ptolemy.actor.Director.preinitialize(Director.java:1056)
>>>>>>>>> at ptolemy.actor.Director.preinitialize(Director.java:1035)
>>>>>>>>> at
>>>>>>>>> ptolemy.domains.sdf.kernel.SDFDirector.preinitialize(SDFDirector.java:655) 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.actor.CompositeActor.preinitialize(CompositeActor.java:1735) 
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> ptolemy.actor.Manager.preinitializeAndResolveTypes(Manager.java:930) 
>>>>>>>>>
>>>>>>>>> at ptolemy.actor.Manager.initialize(Manager.java:636)
>>>>>>>>> at ptolemy.actor.Manager.execute(Manager.java:340)
>>>>>>>>> at ptolemy.actor.Manager.run(Manager.java:1111)
>>>>>>>>> at ptolemy.actor.Manager$PtolemyRunThread.run(Manager.java:1641)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 4/20/2012 6:38 PM, Christopher Brooks wrote:
>>>>>>>>>> Hi Wade,
>>>>>>>>>> I don't think I have a WinXP installation at hand, but I was 
>>>>>>>>>> able
>>>>>>>>>> to run the MatlabExpression demo under Windows Server 2003 
>>>>>>>>>> with a
>>>>>>>>>> 32-bit JVM from a clean install of Kepler-2.3. Windows Server 
>>>>>>>>>> 2003
>>>>>>>>>> is fairly similar to XP.
>>>>>>>>>>
>>>>>>>>>> To determine the bit width of your JVM, start up Kepler, go to
>>>>>>>>>> Tools -> check settings and look at the value of
>>>>>>>>>> sun.arch.data.model = 32
>>>>>>>>>>
>>>>>>>>>> When I start a dos shell (Start->Run->cmd), I can start matlab
>>>>>>>>>> from the command line, which works for you.
>>>>>>> -- 
>>>>>>> ______________________________________________________________________________ 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Wade M. Sheldon
>>>>>>> GCE-LTER Information Manager/SIMO Database Administrator
>>>>>>> School of Marine Programs
>>>>>>> University of Georgia
>>>>>>> Athens, GA 30602-3636
>>>>>>> Email: sheldon at uga.edu
>>>>>>> WWW:
>>>>>>> http://gce-lter.marsci.uga.edu/public/app/personnel_bios.asp?id=wsheldon 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Kepler-users mailing list
>>>>>>> Kepler-users at kepler-project.org
>>>>>>> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
>>>>>>
>>>>>
>>>>
>>>>
>>>
>

-- 
Christopher Brooks, PMP                       University of California
CHESS Executive Director                      US Mail: 337 Cory Hall
Programmer/Analyst CHESS/Ptolemy/Trust        Berkeley, CA 94720-1774
ph: 510.643.9841                                (Office: 545Q Cory)
home: (F-Tu) 707.665.0131 cell: 707.332.0670



More information about the Kepler-users mailing list