jozef stefan institute program generators and control system software development klemen Žagar...

19
Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar @cosylab.com ) Anže Vodovnik ([email protected] ) Jozef Stefan Institute, Slovenia ( http://kgb.ijs.si ) in cooperation with Cosylab Ltd., Slovenia (http://www. cosylab .com )

Upload: dorthy-ball

Post on 29-Dec-2015

215 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef StefanInstitute

Program Generators and Control System Software Development

Klemen Žagar ([email protected])Anže Vodovnik ([email protected])

Jozef Stefan Institute, Slovenia (http://kgb.ijs.si)in cooperation with

Cosylab Ltd., Slovenia (http://www.cosylab.com)

Page 2: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

2

Overview

• Why program generators?

• Describing what a control system is

• Describing how to build software for the control system

• Demos

Page 3: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

3

What is a program generator?

• Generates source code– C++, Java, XML, XML schema (XSD, …), HTML

• Inputs:– Templates with placeholders– Values of placeholders

• Outputs– Useful code

• Comparison with Wizards:– Wizards offer interactive assistance to the

developer– Not suitable for massive use– Allow abundant code customization

Page 4: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

4

Need for program generators

• When there is a lot of repetitive code• When there are many artifacts that need

to be kept in-sync:– Device driver code– Networking protocol– Configuration database schema– GUI

• Many rules to follow during coding• Errare humanorum est

Page 5: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

5

How program generators work?

Model of the Control System (XML)

CORBA Server C++Template (XPGL)

GUI Plug Java Template(XPGL)

Configuration DatabaseXSD Schema Template

(XSL)

Program Generator (XPGL ProgGen, XSL/T Transformer)

Configuration DatabaseSchema (XSD)

CORBA Server (C++)GUI Plug (Java)

Page 6: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

6

Describing what to build?

• Control System Modeling Language (CSML) (work in progress)

• Use of standard CASE tools• Notation language (UML diagrams + XML representation)

– Properties of entities– Relationships– Documentation

• Defining entities in a control system– Devices– Properties– Operations– Events– Characteristics

Page 7: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

7

A Property

An observable in a control system

TemperatureElectric current

Data and behavior:CharacteristicsEventsOperations

Interfaces vs. classes

P_Double

<<Characteristic>> default_value : Double<<Characteristic>> graph_min : Double<<Characteristic>> graph_max : Double<<Characteristic>> min_step : Double

<<Characteristic>> min_delta_trigger : Double<<Characteristic>> min_timer_trigger : Time_Interval

get() : Double

RO_Double

<<Characteristic>> alarm_high_off : Double<<Characteristic>> alarm_high_on : Double<<Characteristic>> alarm_low_off : Double<<Characteristic>> alarm_low_on : Double

<<Event>> alarm()

Random_Input

<<Characteristic>> Average<<Characteristic>> Sigma

Binary_Input

<<Characteristic>> IO_port : Integer

<<Property>>

Page 8: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

8

A Device

• Models a physical device– Power supplies– Antennas– Motors– Vacuum gauge

• May contain other devices• May contain properties

Device

on()off()

reset()

Ramped_Power_Supply

i : Integerpoints : Double[]

start_ramp(points : Double[])stop_ramp()

Power_Supply

RPS<<Device>>

+current

+readback

1n +heart_beatn

Trigger_Provider

RO_Double

RW_Double

Page 9: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

9

Behavior: A State Machine

Initializing

do/ i=0

Ramping

entry/ current.set(points[i])entry/ i=i+1

heart_beat.trigger[ i<points.length ]start_ramp( points )

[ i>=points.length ]

[ i<points.length ]

[ i>=points.length ]

stop_rampstop_ramp

Page 10: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

10

XML

• Extensible Markup Language– World Wide Web Consortium Standard

• XML representation of CSML model:– Physical representation of the model– CASE-tool neutral– Easy to manipulate using widely-available XML

tools (parsers)• Extensible Style-sheet Language Transformations

– Standard way to transform XML into another XML or text

– XSL/T files are hard to maintain

Page 11: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

11

How to build?

• Software architects:– Decide on technology– Prescribe design patterns– Define classes and their relationships

• Programmers:– Translate the description of the system into

source code using architect’s instructions– In cases of high simplicity and repetition,

programmers just apply templates

Page 12: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

12

Extensible Program Generator Language (XPGL)

• Developed at IJS and Cosylab– Not a standard (yet )– Open for influence

• Reuses open standards wherever possible– XSL/T expressions and tag names,

XPath, …– Generates code from XML documents

(DOM)

Page 13: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

13

What is XPGL?

• XPGL is not an instance of XML– In XPGL, white spaces are important– Unnecessary verbosity of XML– Custom parser and transformation tool was needed

(ProgGen)– Only one configurable escape character

• XPGL simplifies frequently used constructs of XSL• XPGL allows for several named output streams• XPGL pays a lot of attention to spaces, so that the output

can be neatly indented• XPGL has provisions for preserving the output manually

inserted by the programmer.

Page 14: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

14

Example: our target

class SomeClass {

private int myVariable;

public int getMyVariable() {

return myVariable;

}

public void setMyVariable(int value) {

myVariable = value;

}

};

Page 15: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

15

Example: describing a class (XML)

<?xml version="1.0"?>

<class name=”some_class”>

<field type=”int” name=”my_variable”/>

</class>

Page 16: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

16

Example: the template (XPGL)

<?xpgl version="1.0"?>

class <”xpgl:naming('UU', /class/@name)”> {

<for-each "/class/field">

private <”@type”> <”xpgl:naming('LU', @name)”>;

public <”@type”> get<”xpgl:naming('UU', @name)”>() {

return <”xpgl:naming('LU', @name)”>;

}

public void set<”xpgl:naming('UU', @name)”>(<”@type”> value) {

<”xpgl:naming('LU', @name)”> = value;

}

</for-each>

};

Page 17: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

17

Demos

1. Java accessor and mutator

2. Generating HTML

3. Complex example:• A server (“Power Supply”)• A GUI client• C#

Page 18: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

18

Conclusion

• The entire system is defined in one place– E.g., the CSML model or XML– Includes documentation

• Other artifacts are kept in-sync with it– All other artifacts are generated– Generators are adjustable

• Coding effort greatly reduced• Less error prone

Page 19: Jozef Stefan Institute Program Generators and Control System Software Development Klemen Žagar (klemen.zagar@cosylab.com)klemen.zagar@cosylab.com Anže

Jozef Stefan Institute

19

Any questions?