VisSim for Dynamic Simulation and Control Design Visual Solutions, Inc. 487 Groton Road, Westford MA 01886 USA (800) VISSIM-1 www.vissim.com Agenda • Morning – – – – – – VisSim product line review VisSim basics Dynamic systems with feedback Building hierarchical systems Data import/export System tuning with auto restart • Afternoon – – – – Optimization PID Tuning 3D plotting & animation UML State Charts VisSim Overview • Visual block diagram software for dynamic system simulation and embedded system development. – Automatic production of high quality fixed point code – Exceptional dynamic and DSP-in-loop simulation capabilities – Automatic programming of on-chip DSP peripherals Product Line • VisSim Core Visual Simulation Tool - build, simulate and debug dynamic systems – – – – – – Simulink Translator State Transition block Over 100 built-in blocks Built-in C interpreter Matlab interface Royalty free redistributable Viewer VisSim Viewer • Free redistributable run-time version of VisSim • Download from www.vissim.com/downloads/demos.html • Allows free distribution of models to anyone • Easy way to share ideas, models and simulations • Supply proof-of-concept simulations to potential customers VisSim Add-ons • Real-Time - Allows up to 30 kHz closed loop sampling from VisSim on PC • C-Code - Generates ANSI C from diagram • Analyze - Frequency domain analysis of linearized non-linear subsystem • Fixed-point - Block set of bit true scaled integer operations for simulation and code generation VisSim Add-ons (cont.) • Comm - Physical layer data communication • Optimize Pro - Generalized Reduced Gradient method of parameter optimization • Neural nets - Neural network construction and training package • DSP Targets - F243,LF2407, F2812, C30,C40,C67 VisSim/Real-Time • Supports National Instruments and Measurement Computing • Analog (12-16 bit), digital, thermocouple, counter, PWM, encoder • Devices can be PCI, PCMCIA, USB, ISA • 30 kHz closed loop sampling straight from Windows/NT,XP – (Jitter ~1-5ms) • Just place block and select “Run in Real-Time” from Simulations Properties dialog. VisSim/CAN • VisSim driver for USB device that connects to Controller Area Network (CAN) bus • Can read and write CAN packets up to 1 kHz rate. • Packets configurable as to: – data length – number and types of data elements in the packet – Byte sex (bigendian vs little endian) • Enable pin on write, data ready pin on read VisSim/Motion • Extensive block set for simulation of electric motor systems • Supports AC induction, brush and brushless DC motors • Stepper motors • Low level PWM switching simulation level • Selection of Sensors, Loads, Controllers, Transforms VisSim/OPC • OLE for Process Control • VisSim OPC block set has server connection block, OPC read and OPC write block • Connects to any server (Kepware, Matrikon etc.) Supports all major DCS, PLC vendors (Honeywell, Allen Bradley, Foxboro, GE Fanuc, Siemens, etc) VisSim Plays Well with Others • OLE interface- allows inclusion of any OLE compliant software – VisSim - Mathcad OLE interface allows graphics plus data exchange • VisSim - Matlab Integration allows matrix data exchange and Matlab expression evaluation • Simulink Translator brings Simulink diagrams into VisSim workspace. VisSim Custom Block API • MSVC Wizard creates project for custom block. Just drop in code. • API allows: – Menu positioning – Block & connector naming and data typing – Code generation – Simulation info on integration method, integration step, time step, current time etc. VisSim Co-simulation API • VisSim co-simulation API allows fast, efficient interprocess communication for co-simulation interfacing. • Based on NT shared memory and Events • In use by iLogix Statemate • General purpose API Large Model Support • Load 300,000 block model in under 2 minutes • Embed blocks insert separate component model files as subsystems • Path aliases allow macro expansion to remove file system dependencies • Tags allow quick navigation in large system Diagram Construction • Insert block by clicking toolbar icon or Block menu • Change parameter by double or right mouse click on block • Connect by mouse-down on connector, drag, mouse up on or near target connector • Must have consumer to execute (Plot, display, export etc.) Exercise: Plot sin Insert sin and plot blocks Connect sin to plot and run Right click sin, change to 1 Hz, and run Double click plot title bar to enlarge Double click again to restore Block manipulation • • • • Select blocks by left-mouse+drag background Right click to operate on selected blocks Edit menu also operates on selected blocks Left-mouse+drag on any selected block moves group • Left click background to remove selection Exercise: Add triangle wave Insert triangle wave to existing sin plot Connect triangle to plot and run Select sin and triangle blocks Right click one, select “align outputs” Try and keep wires short and straight if possible System Properties • • • • System/System Properties… Sets start time/stop time for simulation Sets step interval for both simulation and code gen Auto-restart puts sim in continuous mode for Monte Carlo or parametric investigation • “Retain states”: states not initialized on restart • “Run in real-time” for real-time response • “RT Scale Factor” to run at some multiple faster or slower than real-time Exercise: Change Time Range Select System Properties… Enable run in real time Run diagram again. Now it takes 10 real secs. Useful for monitoring embedded target > 1 kHz Data acquisition and control Change End Time to 1 sec, rerun Simulation Debug • • • • • • Single step button (click single “shoe”) Right click on connector to see value Stop block allows user controlled stop point Error block allows user controlled error alert Interactive plots Display blocks Exercise: Basic 2nd order system • Create new diagram • Insert and connect const “1” to two 1/S integrators and a plot. • Input is acceleration, output is position, intermediate pin is velocity. • Run (what is expected output?) Exercise: More 2nd order system • Put summing junction between const and 1/S • Output of 1st 1/S is velocity, 2nd is position • Put feedback gain from “position” to summer • Change sign on sum feedback (ctrl+right+click) • Run (what is expected output?) • x” = 1 + -kx VisSim Variables • VisSim variables allow data exchange by name instead of by wire – Create variables “u” and “y” to represent input and output to filter and wire to diagram. Use variable “find” operation. Note “Find definition only” option • Variable Scoping – “:” prefixed variables are scoped to current level – “::” prefixed variables are scoped to definition level and down Usage of Variables • Built-in variables: pi, $timeStart, $timeStep, $timeEnd, $runCount, $firstPass, $lastPass, $randomSeed • Variable block • Can use in many blocks as parameters: 1/S, gain, transferFunction, const etc. • Expression block • Constants • Scoping (:prefix local, ::definition scope) Exercise: More 2nd order system • Change feedback gain to “k” • Insert Annotation >Variable block • Right+click and name “K” • Insert Signal Producer > slider block, cx to var • Right+click and change bounds to 0 to 10 • Run Finding Blocks or Variables • Edit/Find… dialog lets you search for variables or blocks • Can look only for definitions • Case sensitivity • Partial match • Match on block type Plot Options • Right click to configure -> • Most options obvious • Plot averaging filters data points over multiple runs • Marker count of -1 marks all points • Multiple XY traces uses pairs of inputs for each trace • Line type controls paint style of data points • Max plotted points limits total # of points in sim range (0 plots all points) Plot Options(cont) • “External Trigger” places enable pin on plot and only plots when pin is 1 • “Read Coordinates” enables interactive coordinate readout • “Snap to Data” restrict readout to actual data points • “Over Plot” retains data run to run • “Save Data to File” saves current plot data to a file Exercise: Add damping term to 2nd order system • Add pin to sum input (Edit > Add Connector, then click next to existing connector when grey bar appears) and ctrl+right+click to toggle sign • Add new gain called kDamp • Copy/paste slider and “k” var • rename var to “kDamp” and reconnect Numerical Integration • Change time step for 2nd order system • Notice instability at large step relative to system frequency • Euler is simplest fastest, least accurate • Adaptive step are most accurate • Stiff good for solving “stiff” sets of equations (hi freq component that has small amplitude) Exercise: Change integration step and method for 2nd order system • Change time step to .5 • Run, and see divergence due to numerical instability • Change integration method to adaptive step and see that system is now stable – Adaptive step tries smaller steps to see if it improves results – Gives good answer but is slow Limited and Reset Integral • Limited Integrator lets you specify upper and lower limits for the internal state. Avoids “windup” of limit block and plain integrator – Wire slider->limited integrator->plot – Connect const 50 to u, and 0 to l of limited integ – Set to “run in real-time”, click 'go' and play with slider – Add 1/s in parallel and plot both outputs. Notice “windup” • Reset Integrator allows you to reset internal state on the fly. (See bounce.vsm) Plot Axis Settings • Bounds set here for “fixed bounds” option • Scaling is applied to x axis • Sub Plot Count gives multiple y-axis windows • Axis divisions fixes tick count manually • Retrace options restricts plot to given interval and sets x-axis interval (used for eye-diagrams) View Options • Presentation Mode: Prettier diagrams • Display Mode: for front panels and animation • Data Types: colors connectors based on data type. Green=integer, yellow=scaled integer, red=floating point, purple=matrix – Fat wires=Matrix, thin wire=scalar • Block labels appear under block • Connector labels appear on compound block or user function block Hierarchy • Edit/Create Compound… creates container for selection • Edit/Add Connector.. gets “Add” cursor. Click cursor on block to add connectors. Click left side to add on left edge, right side to add right. • Edit/Remove Connector… gets “Remove” cursor. Click cursor on block to remove connectors. Click left side to remove on left edge, right side to remove from right. • Ctrl+Right-Mouse on Compound to edit subsystem properties • Click Right-Mouse on Compound to enter compound • Click Right-Mouse on background to leave compound • Double-Left click on connector to add label Subsystem Properties • Local Time – allows running at slower rate than main sim. Must be multiple of base clock for DSP targeting. • External Trigger – Use external logic to control execution of subsystem. • Name – Applies name to face of block • Bitmap- Applies bitmap image to face of block • Password protection – Use password to control access to compound contents • Create dialog box from contained dialog constants User Dialog Box • Insert “Dialog Constant” blocks into compound contents for each dialog item. • Dialog constants can be numeric, integer list, or boolean. • Check “Create dialog box from contained dialog constants” option in compound block. • User selections are saved to .vsm file. • Nice way to encapsulate complexity. Exercise: Create compound from 2nd order system • Select 2nd order system, right click on a selected block and create compound • Insert dialog constants for feedback gains • Ks (spring const) Kd (damping factor) • Label input and output pins • Enable “create dialog from contained dialog constants” in compound properties • Right click compound to see user dialog • Run Labeling • Use label block to insert label anywhere in diagram • Label can be hyperlink to doc or URL • Doc can link to .vsm label • Double left click Compound connector to give a label • Use Comment block to put large body of scrollable rich text into diagram System Setup: Preferences • Checkpoint state: saves integrator, delay states and plot contents to file – Useful for restarting from known state • • • • • • • • • Notify Sim End: gives message box on sim end Warn nonintegral clock: gives warning at sim start if requested time step for periodic signal like pulseTrain, squareWave etc. is not integral multiple of sim timeStep. Warn nonintegral delay: warn if continuous delay is given time delay that is not integral multiple of timeStep Checkpoint during sim: saves checkpointed diagram to file with name suffixed with current time at specified checkpoint intervals. Check Connections: warns of unconnected inputs at sim start. Warn numeric overflow: warn if conversion causes numeric truncation Startup Script file: Specify .m or .c file to run before starting sim Random Seed: specify starting random seed for random variables. Frequency Units: specify units for filter design wizards in transfer function Conditionals (“if-then”) • Relational expressions can be used anywhere • Merge and case use a selector input to produce an output from several possible inputs – Create new diagram with button, merge, 2 consts and display Dialog Table • Inserts parametric data from an external data set or spread sheet. • User selects item from 1st column via dropdown combo. • See Diagrams > examples > blocks > signalProducer > dialogTable.vsm Exercise: Build IIR Filter 1 • • • • Place step, xfer, and plot blocks in workspace Connect & run Change sim rate to .001, end time to .1 Design 2nd order 100Hz Butterworth lowpass filter • run Build filter 2 • Ctrl-Rt quick dup xfer, convert copy from S->Z domain • run • enable fixed point precision • run • change to 2 bits magnitude • run - zoom plot FIR filter • Rt-click xfer, check “discrete”, click FIR Filter button • For each band, enter start, end freq, weight & gain • Be sure to leave room between end of one band and start of next • Click “Calc Filter” • FIR requires large state count (>10) for good operation Discrete systems • • • • 1/Z sampled delay - clock input Discrete transfer function Sample hold Other blocks work with both continuous and discrete systems • Compound block can be enabled, or run at different sampling rate • Work with scaled fixed-point data Data Import/Export/Lookup Table • Import block – Can import text data, .mat, .wav – Optional header supplies time start/stop/step info • Export block – Can export text, .mat, .wav – Can control data flush interval, inclusion of import header • Map block – 1D, 2D, 3D lookup tables Import Export Usage • How to use... – Place sin block and export in work space, configure export for file name “test.dat”, wire sin to export and run. Note possibility for decimation, data flush interval, and suppression of header information. – Place import block in diagram, configure for “test.dat”, connect to plot, and run. Note possibility for interpolation and extrapolation. Import/Export features • Import block – Option for ‘,’ as decimal point – Allows text data column. Treats as null. – Accepts hh:mm:ss.ff time notation as data element • Export block – Option for ‘,’ as decimal point – Can make data export background task Matrix Operations • All arithmetics (add,mul,div,gain etc) • Const block takes matrix syntax ([1:n],eye(n) etc. • Unit delay, merge, plot, display all take matrix operations • Matrix mul, buffer, dot product, vector sum, diag, PSD, fft,ifft,transpose,reshape,index Q&A - Lunch • 1 hour Put .vsm files on VisSim menu • Save to directory structure that you want mirrored in VisSim menu • Edit > Preferences… > Menu Directories – Double click “…” – Add directory path to be put on menu and menu name to be stored under – Next time you restart VisSim, all .vsm files in directory tree will appear on VisSim menu Optimization • Built-in optimizer can find optimal system parameters – Open diagram \vissim80\examples\SystemID\2ndOrder6DOF.vsm – Note that cost function can be anything, but a good one is integral of square error between test function and data set Issues when optimizing • OptimizePro addon will restrict parameter search to bounds in parameterUnknown blocks. Built-in solver will not. • Do not simply sum multiple error terms for cost function, as terms may cancel. Terms must be squared or abs() before sum. • Try to minimize # of unknowns as optimization can bog down with too many unknowns • If using real-world plant, allow settling time between runs • Cost function is typically integration of sum of square error PID Tuning • • • • ParameterUnknown blocks for PID terms Use overshoot penalty to find stable solution Use sliders with simple plant in auto-restart mode to examine the PID response space Good paper “PID Control System Analysis & Design” Feb 2006, IEEE Control Systems Magazine Effects of independent P, I, and D tuning on closed-loop response. Rise Time Overshoot Settling Time Steady-State Error Stability ↑ KP -- ++ + -- Degrade ↑ KI - ++ ++ --- Degrade ↑ KD - -- -- ~ Improve - derivative term can degrade stability if plant has transport delay - 80% of PID controllers in use have the derivative part switched off PID structures • Simple 3 term: y = e(x)(Kp + Ki/s + Kds) – Implement s (d/dx) via zero/pole, zero gives derivative, pole is tuned for low pass filter. • If Ti ≥ 4TD can do series PD-PI: y =e(x)(α + TDs) KP(1 +1/αTis) Where α =(1 ± √(1 − 4TD/ Ti ) )/2 > 0 • Examine response w/autorestart, sample plant, and sliders for gains. • Can be helpful to fix d/dt coef by hand and opt P and I State Transition Block • Allows creation of any number of states • Each state has any number of transition conditions to change to another state • Conditions are written in C code and may reference VisSim variables (must be syntactic C – no space or punctuation in name) • Block output is current state, and rule that last fired to enter this state • VisSim lets you use state names anywhere you can use expressions, like const and expression blocks 3D Plotting • 3D plot block takes time sequence of 3 element vectors for xyz position • Use mouse to rotate and zoom plot even while simulation running • See Diagrams > Examples > New in 7.0 > 3D Animation • • • • Manipulate individual meshes Manipulate objects in 3D VRML (.wrl) file Manipulate scene elements with mouse Control “camera” (view angle, position) programatically • See Diagrams > Examples > New in 7.0 > Lunar Lander Game Event Logging • Event log quietly tracks time-stamped events • Signal Consumer > EventLog takes event string and boolean enable pin to send text to log • Signal Consumer > EventDisplay gives display of all events in run • VisSim/RT and VisSim/OPC have quiet eventLog mode VisSim/OPC Client • OPC server block select server connection and connection mode (continous connection vs sim run connection) • OPC read/write blocks select tags to read and write. • Works with any OPC server Scaled Fixed-Point Operations • Arithmetics (add,mul,div,gain etc) • Limit, unit delay, merge, map, PI regulator • Hands-on • • • • • Make sample diagram of sin->FixPt gain->plot run - observe high/low values in block. Change scaling to 13.16. Run. Observe plot Change sin amplitude to 4, scaling to 1.16 Run. Enable Tools/FixedPoint Configure… Autoscale. Rerun. VisSim/Embedded Controls Developer • Bundle of VisSim, C-Code, C2000 target, TI DMC block-set , fixed-point block set, TI Code Composer Studio plug-in • Supports F243, LF2407, F2812 on-chip peripherals: Analog in, PWM, CAN, encoder, event capture, serial, SPI, I/O ports, watch dog DSP Target Support • Texas Instruments: TMS320F243, LF2407, F2812,F2808,C31, C32, C44, C54xx,C67xx • Card Vendors: Innovative Integrations, California Spectrum Digital, Houston, Texas Softbaugh, Atlanta, GA Debug, Test, and Validate • Minimize time spent in debug and test • Use high-level, predebugged blocks • Support simulation of controller at block level on PC • Allow mouse probe of every input and output to display values at any instant • Debug block-level simulation on PC Debug and Validation • Pure simulation plus DSP-in-loop simulation and block level monitoring gives rapid feedback of controller response VisSim on PC C2000TM DSP External Hardware Peripheral Input Blocks Peripheral Output Blocks (I/O Only) VisSim block diagram User Blocks DMC Blocks Fixed-Point Blocks Standard Blocks Test DSP based controller against virtual plant on PC using JTAG HotLink • Inject plant failure modes to test controller response • High/Low watermark on fixed-point blocks gives numerical “headroom” safety factor • Interactive DSP utilization gives continuous CPU load factor • Interactively Change DSP controller gains from VisSim and plot DSP response. Debug and Validate • Rapid diagram edit-compile-download-debug cycle (under 10 secs) * Code automatically generated, compiled, linked, and downloaded VisSim on PC Plant Under Control C2000 Peripherals Control Application Code* C2000 DSP JTAG VisSim Interface block downloads and monitors code running on DSP VisSim blocks for: • Virtual plant • Interactive gains • Plots of DSP response • DSP-in-loop simulation of controller at code level on DSP through automatic code generation, compile, link, and download, and using JTAG in Real-Time Monitor mode • Test, debug, and validate the complete control system executing on DSP using an interface block • Provide test input vectors and observe DSP results in VisSim on PC Build AC - induction DSP in loop • Open AC induction motor speed control system – C:\visSim50\Embed_Controls_Developer\c2407(281 2)eZdsp\QuickStart\acim_spd_control_qs.vsm • Run and observe pure simulation results • Select controller, click Tools/Codgen…, click “Include VisSim Comm Interface” • Push “Codegen” button 7 Insert DSP component • Delete simulated controller • Insert VisSim/DSP|C2407(F28xx)|DSPinterface block • Wire up in diagram same as simulated controller • Save diagram as <filename>-d.vsm Add blinking LED to controller • Add blink logic to sim model – Hint LED connected to C0 (2407) or F14 (F2812) • Re-codegen • Re-rerun DSP based version • Compare F2812 waveforms to LF2407 – Difference is due to increased JTAG delays in 2407 part Burn FLASH • Create FLASHable blink program and burn to flash. Note that 2812 must use Spectrum Digital FLASH utility. Break • 15 min Basic pressure-flow system • Pressure differential causes flow • Integral of flow into a volume gives current mass occupying the volume • Pvolume = nRT/V Review of User Diagram Look at specific customer diagram On-chip peripherals • All on-board DSP peripherals supported including: analog inputs (outputs on EVM) digital inputs and outputs simple PWMs and full compare PWMs quadrature encoder event capture, watch dog, interrupt, CAN bus serial port SPI I/O ports TI Digital Motor Control (DMC) Library – – – – written by TI in C-callable assembler hand-written, tested and optimized by TI available in VisSim/ECD in easy-to-use block set supports simulation mode (pure PC based simulation with 16-bit truncation effects) – supports code generation mode Custom Block Creation • VisSim DLL Wizard for MSVC • Automatically creates project with code for creating block, naming block, pin count and pin names, data types, dialog for parameters • VisSim exported function vissimRequest() allows query of VisSim properties: current time, time step, current block handle, block properties. – DLL exported function: <my block>Event(eventCode, p1, p2) is called by VisSim on interesting events like sim start, end, step, code gen, mouse click