19
Introduction to NI Actor Framework How to integrate DIM? DIMActor Ancestor Class Holger Brand steht unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Unported z hinausgehende Erlaubnisse können Sie unter https://www.gsi.de/work/organisation/bereiche/personalrecht/patente_und_technologietransfe 28.02.2013 [email protected] 1

Introduction to NI Actor Framework

  • Upload
    elsu

  • View
    122

  • Download
    0

Embed Size (px)

DESCRIPTION

Introduction to NI Actor Framework. How to integrate DIM? DIMActor Ancestor Class. - PowerPoint PPT Presentation

Citation preview

Page 1: Introduction to NI Actor Framework

[email protected] 1

Introduction to NI Actor Framework

How to integrate DIM?DIMActor Ancestor Class

DIMActor von Dr. Holger Brand steht unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.Über diese Lizenz hinausgehende Erlaubnisse können Sie unter https://www.gsi.de/work/organisation/bereiche/personalrecht/patente_und_technologietransfer.htm erhalten

28.02.2013

Page 2: Introduction to NI Actor Framework

[email protected] 2

Agenda

• Prerequisites• Motivation: Active objects• LVOOP

• Pros & Cons• Application• NI Actor Framework

• DIM• Example:

• DIMActor anchestor class• DIMActor derived classes

• DIMDemoServer• DIMDemoClient

• How to extend existing Actors?• References

28.02.2013

Page 3: Introduction to NI Actor Framework

[email protected] 3

Prerequisites

• LabVIEW Basics 1 & 2• Project Explorer• Libraries• Dataflow concept

• Is knowledge about object oriented programming necessary?• No!• LabVIEW-Classes enables a developer to define his own data types,

that provide much more abilities than (strict) type-definitions.• Experience with conventional OO programming languages, e.g. C++

or Java, is maybe confusing.

28.02.2013

Page 4: Introduction to NI Actor Framework

[email protected] 4

LabVIEW Dataflow

• No variables are existing in LabVIEW• There are data sources and data sinks!

• A priori it is not clear from where data is originating! E.g.:• From front panel controls in case of interactive mode.• From calling VI as parameter via connector pane.

• Local and global variables are not really variables with respect to common sense, but different places in memory which are copied by LabVIEW Runtime-Engine asynchronously. This can lead to unintentional race conditions.

• Copies of data are created at wire forks.• The compiler is responsible to maintain a minimum number of copies to be used.• Therefore LabVIEW is inherent thread-save!• LabVIEW provides several options to transport data safely with respect to data flow

without race conditions between different threads, VIs or loops.• Queues, Notifications, FGV optionally protected by Semaphore etc.

• That’s all true for LabVIEW Objects, too!

28.02.2013

Page 5: Introduction to NI Actor Framework

[email protected] 5

Pros of LVOOP Classes(in comparison to type definitions)

• Encapsulation• Attribute data is always private. It can be changed by class methods only.• The internal data structure is hidden.• Access rights: Public, Protected, Private, Community (friend)

• Modularity• Each class has its own clearly defined responsibility.• The public interface should be well defined.

• It should be modified with very good reason, only!

• Eases testability.• Extensibility

• Derived classes extend the attributes and methods of their ancestor class.• Specialization

• Derived classes special the behavior of their ancestor class.• LabVIEW Objects behave exactly like other LabVIEW data types

• They are following the dataflow paradigm!

28.02.2013

Page 6: Introduction to NI Actor Framework

[email protected] 6

LVOOP Cons - Solutions

• There are no real cons.• (Copy-) Constructors and Destructors are not existing.

• They are simply not necessary. • LabVIEW Objects behave the same as other LabVIEW data types.

• Attributes are always private.• They cannot be displayed or changed directly on the front panel.• XControls are the solution for this problem.

• XControls can also be used as probes.

• Polymorphic class-VIs are not supported.• Parameters could be implemented as derived class of a common ancestor class.• Parameters as Variant.

• Especially Variant-Attributes.

• Multiple inheritance is not supported.• An alternative is the Composition design pattern

• References to Objects• Dataflow: Single Element Sized Queue• Data Value Reference

• Danger of deadlocks

28.02.2013

Page 7: Introduction to NI Actor Framework

[email protected] 7

LVOOP Application

Possible cases for the application of LVOOP classes:• Cluster or type definitions, which become potentially extended, can be replaced with classes.

• Derives classes add attributes to the ancestor class. • Replacement of data type dependent (e.g. Enumeration) Case-Structures by dynamic dispatching.

• Dependent of the objects class the correct corresponding Overwrite-VI is called.

• Beispiel: Queued State-Maschine

• Development of generic frameworks• The application layer uses base classes only.• Details are implemented in derived classes.• Actor Framework ..............................................

28.02.2013

Page 8: Introduction to NI Actor Framework

[email protected] 8

NI Actor FrameworkCommunication Scheme – Local Queues

Launching Actors• Actors are derived classes of

Actor.lvclass• Caller-Enqueuer

is used by Actor to send messages to the Caller.

• Actor-Enqueueris used by Caller to send messages to the Actor.

Asynchronous Communication via Queue• Messages are derived classes of

Message.lvclass• Messages are calling public VIs of an

Actor.• Actor-Messages can be generated

automatically be using Tools>Actor Framework Message Maker.

28.02.2013

Linked Network Actor: https://decibel.ni.com/content/docs/DOC-24051is using a nested actor maintaining networkstreams.

Page 9: Introduction to NI Actor Framework

[email protected] 9

Network Communication: DIM

• Originally developed at CERN (www.cern.ch/dim)• DIM provides

• Publisher-Subscriber Pattern• Command Pattern

• DIM connects heterogenous systems.• Various operating systems• Various programming languages

• LabVIEW-DIM-Interface is existing• http://wiki.gsi.de/cgi-bin/view/CSframework/LVDimInterface

28.02.2013

Page 10: Introduction to NI Actor Framework

[email protected] 10

DIMActor – Project & Class Hierarchy

• DIMActor.lvlib contains• DIMActor.lvclass derived from Actor.lvclass• DIMActor Messages

• DIMActorDemo.lvlib contains• Server

• DIMDemoServer.lvclass derived from DIMActor.lvclass• Server Messages

• Client• DIMDemoClient.lvclass derived from DIMActor.lvclass• Client Messages

• Application: Test.vi

28.02.2013

Page 11: Introduction to NI Actor Framework

[email protected] 11

DIMActor Demo Application

• Initialize Caller to Actor Queue• Initialize DIMDemoServer• Initialize two DIMDemoClients• Launch Actors

• Wait for Stop• Sent Stop-Messages• Report Error

28.02.2013

Page 12: Introduction to NI Actor Framework

[email protected] 12

Launch Actor

28.02.2013

Page 13: Introduction to NI Actor Framework

[email protected] 13

DIMActor – Overwrite VI‘s

28.02.2013

Actor Core.vi

Stop Core.viPre Launch Core.vi

Dynamic Dispatch-VI:CastByteArrayAndDispatchMsg.vi

Page 14: Introduction to NI Actor Framework

[email protected] 14

DIMActor – Dynamic Dispatch VI

28.02.2013

Dynamic Dispatch-VI:CastByteArrayAndDispatchMsg.vi

Example DIMDemoServer.lvclass:CastByteArrayAndDispatchMsg.vi

Page 15: Introduction to NI Actor Framework

[email protected] 15

DIMActor – Other VIs

28.02.2013

Add Command Start Serving

Add Service Update Service

Add Subscription Probe

Page 16: Introduction to NI Actor Framework

[email protected] 16

DIMDemoServer.lvclass:Actor Core.vi

28.02.2013

Page 17: Introduction to NI Actor Framework

[email protected] 17

DIMDemoClient.lvclass:Actor Core.vi

28.02.2013

Page 18: Introduction to NI Actor Framework

[email protected] 18

Extending existing Actors to use DIM

• Inherit from DIMActor.lvclass instead of Actor.lvclass• Extend Actor Core.vi to add

• Commands• Services• Subscriptions

• Overwrite: CastByteArrayAndDispatchMsg.vi• For each Command and Subscription

• Typecast DIM byte-array to expected G data type• Send corresponding (already existing) Message to self.

• Publish Service data where necessary.

• Use CoreLib.CallProcess.vi to sendMessages to CS-Objects

28.02.2013

Page 19: Introduction to NI Actor Framework

[email protected] 19

References

• LabVIEW Menu -> Help -> Search the LabVIEW Help... -> Contents -> Fundamentals -> LabVIEW Object-Oriented Programming

• LabVIEW Menu -> Help -> Find Examples -> Browse by Task -> Fundamentals -> Object-Oriented

• LabVIEW Object-Oriented Programming: The Decisions Behind the Design • LabVIEW Object-Oriented Programming FAQ• Applying Common OO Design Patterns to LabVIEW• Actor Framework• Measurement Abstraction and Model-View-Controller (MVC) Project with A

ctor Framework in LabVIEW • HGF Baseclass Library • Mobile Agent System• Thanks to Stephen Mercer for his contributions to web documents &

discussions

28.02.2013