Uživatelské nástroje

Nástroje pro tento web


tutorialy:wizard_cw

Matlab Wizard CW

MATLAB to ControlWeb Wizard umožňuje v prostředí ControlWeb používat model navržený původně v MATLAB Simulinku. Na základě správně navrženého matematického modelu v prostředí MATLAB R2006b umožňuje vygenerovat z tohoto prostředí Windows dynamic link library, dále DLL. Toto DLL má formát ovladače pro ControlWeb (v. 5.0), který odpovídá matematickému modelu nadefinovanému v prostředí MATLAB.

Instalace

  1. Zkopírujte celý instalační adresář s Wizardem (RTW Target) do vhodného lokálního adresáře, kde ho budeme mít po celou dobu používání.
  2. V MATLABU přes hlavní menu File→Set Path…→Add folder… přidejte cestu ke zkopírovanému Wizardu. Před zavřením okna Set Path… nezapomeňte uložit změny (Save).
  3. Nyní by už měl být v nabídce Real-Time Workshopu nový .tlc soubor s názvem CtrlWeb.tlc (do nabídky Real-Time Workshopu se dostanete v otevřeném modelu v Simulinku stiskem Ctrl+E, potom tlačítko Browse v kolonce RTW system target file:).


  1. Předpokladem funkčního překladu je nastavení Solveru překládaného modelu na Type: fixed-step a je vhodné zvolit Stop time: inf.
  2. V parametrech Real-Time Workshopu zvolte RTW target file: CtrlWeb.tlc a stlačte Build.
  3. Pokud proběhla kompilace bez chyby, tak se v aktuálním adresáři vytvoří podadresář se jménem (NázevModelu)_CtrlWeb_rtw. V tomto podadresáři najdete soubory (NázevModelu).dll, (NázevModelu).par, (NázevModelu).dmf a (NázevModelu).txt potřebné v prostředí ControlWeb a soubory generované Real-Time Workshopem.


Použití ovladače v prostředí ControlWeb

  1. Soubory (NázevModelu).dll, (NázevModelu).par a (NázevModelu).dmf nakopírujte do adresáře, ve kterém se nachází základní soubor aplikace (aplikace).cw.
  2. V souboru aplikace (.cw nebo .cwu) doplňte kód v sekcích DRIVER a DATA dle předlohy v souboru (NázevModelu).txt. Případné duplicity a nesrovnalosti jmen ovladačů, souborů, kanálů atp. (vzniklé např. použitím více driverů, nebo různých verzí driverů) již musí uživatel vyřešit svépomocí.
  3. V ovladači jsou definované dva specifické kanály RESET a PAUSE typu boolean (číslo kanálu 501 a 502). Nastavením kanálu RESET dojde k resetování modelu a nastavení počátečních hodnot modelu. Nastavením kanálu PAUSE dojde k pozastavení běhu modelu a po opětovném nastavení kanálu na hodnotu false dojde k opětovnému spuštění modelu.
  4. Názvy vstupních i výstupních kanálů jsou převzaty ze Simulinkového modelu z názvů vstupů a výstupů




Propojení modelu a Flashové animace umístěné v kontejneru ActiveX v aplikaci Control Web

  • Na panel nebo pracovní ploch umístěte z inspektoru přístrojů přístroj ActiveX .
  • V inspektoru přístrojů vyplníme název přístroje například na mujFlash, nastavíme hodnotu identifikátoru třídy Active X na hodnotu Shockwave Flash Object {D27CDB6E-AE6D-11CF-96B8-444553540000}
  • vyplňíme událostní proceduru OnStartup() např. následovně:
procedure OnStartup();
var
  path=string,'';
  ok=boolean,false;
  error=integer,0;
begin
  files.GetREDFullPath('nazev_klipu.swf', &path,&ok,&error);
  self.LoadMovie(0,path);
end_procedure;
  • Pokud chceme měnit hodnoty nějaké proměnné v Flashové aplikaci může ActionScript vypadat následovně:
var nazevPromenne:Number;
 
this.onEnterFrame = function(){
  mujText_txt.text = "Hodnota promenne je " + nazevPromenne;
}
  • V CW přístroji, od kterého chceme zobrazovat výstupní hodnotu ve Flashi vyplníme událostní proceduru OnOutput() následovně:
procedure OnOutput( Output : real );
begin
     mujFlash.SetVariable('nazevPromenne' ,str(Output,10));
end_procedure;
  • pokud chceme načíst hodnotu z flashe do proměnné StringovaHodnota použijeme metodu:
    StringovaHodnota = val(mujFlash.GetVariable('nazevPromenne'),10);

Problém komunikace s ActionScriptem 3

FIXME

ActionScript 3 komunikuje s vnějším světem pomocí dvou procedur

komunikace z flashe ven:

flash.external.ExternalInterface.call("názevVnějšíFunkceTřebaVJavaScriptu", parametr1, parametr2,...)

komunikace z vnějšku do flashe:

flash.external.ExternalInterface.addCallback("názevFunkceTřebaVJavaScriptu", nazevFunkceVActionScriptu);

to dobře funguje s Java Scriptem: např. flasová animace v AS3:

Pro přehrání obsahu potřebujete Adobe Flash Plugin.

může komunikovat s JavaScriptem v prohlížeči a ve vyskakovacím okénku prohlížeče se bude periodicky zobrazovat zpráva o tom, že šnek zalezl nebo vylezl.

zdroj v ActionScriptu:

import flash.external.*;
class SnekASlunce extends MovieClip {
	var snek_mc:MovieClip;
	var slunce_mc:MovieClip;
	var obloha_mc:MovieClip;
	function SnekASlunce() {
		snek_mc.onVylezlJsem = function() {
			//šnek zacne lézt
			ExternalInterface.call("pokus", "vylezl jsem");
			_parent.play();
		};
		snek_mc.onZalezam = function() {
			//šnek zaleze
			ExternalInterface.call("pokus", "zalezam");
			//šnek se zastavi
			_parent.stop();
		};
		slunce_mc.onVychod = function() {
			if (_parent.snek_mc.jsemZalezlej == true) {
				_parent.snek_mc.vylez();
			}
			_parent.obloha_mc.rozedniSe();
		};
		slunce_mc.onZapad = function() {
			if (_parent.snek_mc.jsemVylezlej == true) {
				_parent.snek_mc.zalez();
			}
			_parent.obloha_mc.setmiSe();
		};
		//volání z Flashe ven
		//ExternalInterface.call("názevFunkceVJavaScriptu", parametr1, parametr2,...)
		ExternalInterface.call("pokus", "Ahoj z flashe");
		//volání do flashe
		//ExternalInterface.addCallback("názevFunkceVJavaScriptu", nazevFunkceVActionScriptu);
	}
}

zdroj v HTML:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>pokus</title>
</head>
<body bgcolor="#ffffff">
<!--url's used in the movie-->
<!--text used in the movie-->
<!-- saved from url=(0013)about:internet -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="800" height="600" id="pokus" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="pokus.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="pokus.swf" quality="high" bgcolor="#ffffff" width="800" height="600" name="pokus" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<!-- *************************** -->
<!--ručně přidáno do flashem 9 vygenerované html stránky -->
<script language="JavaScript">
	function pokus(text){
		if (text==undefined){
			text="iniciální text";
		}
		window.alert(text);
	}
</script>
<!-- *************************** -->
</body>
</html>

zazipovaný zdroják

Zatím ale neumím komunikovat s CW. Je to důležité, protože nám to dá možnost komunikovat se sofistikovanými objekty uživatelského rozhraní poskládanými ve Flexu (např. s „gumovými grafy“).

FIXME JK 18.3.2007

tutorialy/wizard_cw.txt · Poslední úprava: 2007/05/13 23:40 autor: tribula