vijeo cicode course v7

Post on 02-Apr-2015

1.282 Views

Category:

Documents

71 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Cicode Programming <Instructor’s Name>

Objectives

Good Understanding & Competent in Use of Cicode

Be Able to Use Cicode in Commands and Expressions

Apply Learning to Your Own Site or Project Be Able to Write Your Own Cicode Functions Know How to Debug Your Own Cicode

Functions

This Presentation is © 2005 – 2007 Citect Pty Ltd

Agenda - Day 1

Welcome Introduction to Cicode Variable Operators Used in Cicode The Cicode Editor Writing Simple Functions Using Cicode Variables Conversion Functions Include Files

Agenda - Day 2

Conditional Executors Cicode Return Functions Arrays Debugging Your Code

Training Facilities

Emergency Exits

Ladies’ & Gents’

Kitchen

Breaks / lunch

Mobile Phones

Compendium

Welcome

Introduce trainer Students introduce self

Name Employer Current Citect or SCADA experience Expected outcomes from training

Training Agreement

It’s OK to…. Express ideas Challenge the facilitator Offer examples Question Relax

Training Agreement

Trainer’s role Start and end on time Professionally facilitate the exchange of

information and knowledge Allow time for (and encourage) input Listen non-defensively Help you learn

Training Agreement

Your role Be on time Participate Learn in your own way Provide honest open feedback Enjoy yourself

Ergonomics

Desks and chairs Adjust to your comfort level Relocate screen, keyboard, mouse as required

Environmental conditions Lighting Air conditioning

Rest and relaxation Regular movement Eye strain

Introduction to Cicode Chapter 2

Introduction to Cicode

Chapter Overview Commands, Expressions and Functions Use Commands to Control Processes Display Data from Expressions

What is Cicode? A programming language!

A means of extending the functionality of Vijeo Citect projects Interact with variable tags Exchange data with external sources Create complex formulae

Why do we need it? When we are unable to achieve the required outcome by

configuring graphics pages

For the programmers in the audience: It’s like any high-level language, but without complex

structures, pointers, recursion or inheritance

Cicode Project

Pre-configured project: Cicode_Milk

Pasteurisation Page

Chapters Page

Restore Milk Project Restore Milk project

from the folder supplied by your facilitator

Compile the project and then run the Computer Setup Wizard (express)

Run Milk project

Test Pasteurisation page

View Chapters page

Commands

Cicode Commands can be issued:

Manually Operator types in commands Clicking on a button or object on a graphics page

Automatically Operator logs in or out of the runtime system A graphics page is opened or closed An alarm is triggered In a report When an event is triggered

Cicode Commands

Single statement or group of statements

Open Chapters Page

Create buttons to turn Silo Agitator off and on

Create 2 buttons in the Chapters Page

Compile and Test by switching to the Chapters Page to view results

Setting Variables

Execute Command Digital Tag

Change status of Tag

Analog Tag Set value of Tag

Variable1=value Variable1=Variable2

Plant1_Pump=1 ;

Plant1_Pump=0 ;

Oven_Temp=10 ;

Oven_Temp=Kettle_Temp;

String Variables

Set variable

BATCH_NAME = “Bread”

Literal strings must be enclosed in quotation marks

Expressions

Any combination of variables, operators, and statements which evaluate to some result

8 + 4 Motor_Speed / 5

Calculations in a Cicode statement Result = Operand1 + Operand2 – Operand3

Displaying Data

Displayed Value changes as value of expression changes

Expressionchanges

Valuechanges

Multiple Statements

Multiple statements can be separated by a

semi-colon ;

Kettle_Temp=10 ;

Oven_Temp=Kettle_Temp ;

Batch_Name=“Bread” ;

Multiple statements Add a prompt

TIC_P4_PV = TIC_P1_PV + TIC_P2_PV ;

Prompt("Calculation is Finished")

Operator Input Define keyboard Command as a Key sequence

Key Sequence ending in ENTERAllows up to 3

characters to be entered

F2 signals start ofKey Sequence

Arguments

Arg1 provides input to variables by Keyboard entry Conveyor_Speed=Arg1

Conveyor_Speed=ArgValue1

DoThisThenDoThat(Arg1,Arg2)

Variable Argument #1

Argument #1Checks for Numeric value

Argument #1 Argument #2

<F2> 123 , 345 <enter>

Enter Keyboard Key Definition

Change Misc1 properties

Calling Functions

Definition Function A general term used for a subroutine Parentheses identifies statement as function FunctionName(Arg1,Arg2 …)

Prompt(“Shutdown”) Shutdown()

Arguments passedto the functionName of the Function

Calling functions

Function Information

Look up in online help

Prompt Shutdown PageDisplay

Passing Data to Functions

Functions can support 0,1 or many arguments

Prompt(“Press F1 for Help”)

JunkFunction(“1st Argument”,“2nd Argument”)

Arguments passedto the functionPlace double quotes around any string passed

to a function

Add Key sequence to project RBUTTON_UP executes command anywhere on page

Not RBUTTON_CMD_UP

Search capability

Invoke external programs from within Vijeo Citect 1. Find Excel in

Windows Explorer

2. Click & Drag

to a

Command

Window

3. Copy & Paste to Vijeo Citect

Multiple Arguments

All arguments must be listed

Separate arguments with a comma , Argument order is important Strings are “quoted” Login(“Manager”, “ABC”)

Login ID Password

Passing Numeric Arguments

Both Integers and Floating Point numbers can be passed to a function

INT

REAL

AssWin("!Valve",580,150,512+8+1,“Valve_Cool_CMD")

Name of Popup window

Location on screen

Mode of Popup

windowTag

Passing Variable Arguments

When variables are used as arguments Value of variable is passed, not variable string itself

DspStr - Displays a string at a specified AN DspStr(25,”TextFont”, COAL_LEVEL);

DspStr(25,”TextFont”, “COAL_LEVEL”);

Animation Point

number

Display using this

font

Value of COAL_LEVEL variable will Display

COAL_LEVEL string will Display – as its “quoted”

DspStr(326, "ControlLimits", Recipe)

AN 326

Returning Data

Functions can return a value to the calling statement Success 0 Failure error number

or Data

As in:

date()

Prompt(“Hello,” + FullName() )

Result of ‘FullName’ used as a

parameter to ‘Prompt’

%Tag%=FormNumPad("Enter",%Tag%,0)

Pass Value from num-pad into Tag

variable

Title given to number

pad

Value passed if cancelled

Mode – standard in this case

Execute Function on Startup

Message(“Startup”,“Hello World”,64)Select

Custom Mode

Modify

Summary of Variables

Digital (a.k.a. Boolean or Logical) Digital_Variable = 0 Digital_Variable = 1 Digital_Variable1 = Digital_Variable2

Integer (-32768 - +32767) Integer_Variable = 34 Integer_Variable = -1274 Integer_Variable1 = Integer_Variable2 + 3

Strings (Up to 255 characters) String_Variable = “apple” String_Variable = “string variable” String_Variable1 = String_variable2 + “more text”

Datatypes MUST match during assignments

Data Types Fred

Variable PLC variable Cicode variable

“Fred” String

Fred() Function

[Fred] Path substitution Array index

{Fred} Field definition Compile error context

Chapter 2 - Summary Questions What are the two mechanisms to activate a

command?

What is a Cicode expression?

What character is used to combine several tasks?

What is the syntax to call a function?

What is the result of enclosing a tag in double-quotes?

How do you set a system start-up function?

Introduction to Cicode

Chapter Summary Setting variables Using expressions Operator input Passing data to functions Returning data from functions

Variable Operators Chapter 3

Variable Operators

Chapter Overview Classes of Operators in Cicode Order of Precedence

Classes of Operators

Mathematical

Operator Description

+ Addition (for numeric value)

+ Concatenation (for string variables)

- Subtraction

* Multiplication

/ Division

MOD Modulus (Remainder)

IntToStr() function

Used where function only accepts strings Use a function like IntToStr()

Prompt(“ Value ” + IntToStr(Tag_1))

MOD Operator TIC_P2_PV = TIC_P4_PV MOD 10

Concatenation Message(”P2" , ”TIC_P2_PV = " +

IntToStr(TIC_P2_PV) , 64)

Logical Operators

Operator ‘True’ returns 1 Operator ‘False’ returns 0

Operator Description Operator

AND Logical AND Binary

OR Logical OR Binary

NOT Logical NOT Unary

XOR Logical XOR Binary

Truth Tables

AND 0 1

0 0 0

1 0 1

OR 0 1

0 0 1

1 1 1

Truth Tables

XOR 0 1

0 0 1

1 1 0

NOT 0 1

1 0

Agitator_Silo_V = Agitator_Alfast_V AND Centrifuge_Clar_V

Agitator_Silo_V will be turned on ONLY when both Agitator_Alfast_V and Centrifuge_Clar_V are turned on.

Create multi-state text object

Bit Operators Standard bit operators

11011AND 1101 = 01001

Operator Description

BITAND Bitwise AND

BITOR Bitwise OR

BITXOR Bitwise XOR

Relational Operators

Tests the relationship between two values

Operator Description

= is equal to

<> is not equal to

< is less than

> is greater than

<= is less than or equal to

>= is greater than or equal to

Create advanced alarm

Format Operator

Convert numeric values into formatted strings

Tag1 : ###.#

Display tag1 as three digits before and one digit after the decimal point

Operator Description

: (colon) String Format

Format OperatorsSpecifier Description Function Use Example

# The hash character

The number of characters to display to the right of the AN

#### + 23

+472213

0 Zero Padding #0## +0023

- Minus Justification #-### +23

. Period Decimal notation   

###.## + 23.54

EU Engineering units

#.##EU

S Exponential notation

#s### +1.234e+012

Format Operator

Message(“P3" , TIC_P3_PV:###.##,64)

TAG Format

Operator order of Precedence

Order Operator

1 ()

2 NOT

3 * , / , MOD

4 :

5 + , -

6 < , > , <= , >=

7 = , <>

8 AND

9 OR

10 BITAND, BITOR, BITXOR

Precedence Examples

Tag_1 OR Tag_2 AND NOT Tag_3

1. NOT Tag_3

2. AND Tag_2

3. OR Tag_1

(Tag_1 OR (Tag_2 AND (NOT Tag_3)))

Test Order of Precedence

Centrifuge_Clar_V = NOT Agitator_Silo_V AND Agitator_Alfast_V

Chapter 3 - Summary Questions Name two of the classes of operators used in

Cicode.

How do you test the relationship between two values?

How do you convert numeric values into formatted strings?

Why are brackets used in formulas?

Variable Operators

Chapter Summary Mathematical operators Logical operators Relational operators Order of precedence

The Cicode Editor Chapter 4

The Cicode Editor

Chapter Overview Starting the Cicode Editor Compile, Run and Debug Your Code File Navigation Features Code Editing Tools Dockable Windows and Toolbars Changing Preferences

Starting the Cicode Editor

Click on Cicode Editor icon Select New Cicode page

Context Sensitive Help

MCursor

anywhere on ‘Logout’

termHit <F1>

Key

Open the Cicode Editor Save as Training

Compile & Run GoTo button provided

Provides line number where error occurred

Compile & Run Compile only

Error shown

GoTo error

GoTo Errors

Compiler points to error Click GoTo Button

Error Condition

FUNCTION

ChangeValue()

TagValue1=10

END

FUNCTIONChangeValue()

TagValue1=10END

ERROR

New Editor Features

Colour Coding Auto Indenting Comment / Uncomment feature

Enhanced File Navigation

Tabs give 3 different views View open Files

Changing Toolbars

Click and drag to reposition toolbars Right Click toolbar area background

Adds New toolbars

Indent and Comment

Outdent Uncomment

Indent Comment

Select text

Click comment

icon

Comments Comment your code constantly Preface every Cicode file with

/*DESCRIPTION: Function to do this and thatMore description here*/

// REV DATE AUTHOR DESCRIP// 1.0 02/12/04 B.Bob Original// 2.0 01/04/05 I.Rabbitt Add BlowUpIkea() function

//// NOTES: All functions will be written in Cicode // project given in the courses

FUNCTION DoThisAndThat()! Function starts here

Int iCounter // Local loop counter

C-style ‘block comments’ (dangerous! What about overlap?) C++ style comments Line comments

Bookmarks & Breakpoints

Clear Previous

Toggle BookmarkNext

Left Click - Breakpoint

Right Click - Bookmark

nAN = ANbyName(“WebBrowser”) ;

DspSetTip(nAN, “My Web Browser”) ;

Experiment with bookmarks comments and indents

Use Comments Liberally

List Functions

Context sensitive function list <ctrl> <space>

Select List Functions

Right Click in text

Intellisense Autoprompt

Typing function and opening bracket displays Autoprompt

Function list displays Autoprompt

REAL

FUNCTION

AreaOfCircle(REAL rRadius)

RETURN (3.141 * Pow(rRadius,2)) ;

END

_______________________________________

Function

Test()

AreaOfCircle(20)

END

Preferences

Customising Cicode Editor

View | PreferencesTo change options

Cicode Preferences

Chapter 4 - Summary Questions How can you view files easily?

Why use bookmarks and breakpoints?

How can you change the look of the code window?

The Cicode Editor

Chapter Summary Starting the editor Goto errors File navigation Editing tools Function tools Preferences

Cicode Functions Chapter 5

Cicode Functions

Chapter Overview Simple Functions Structure of a Function Public & Private Functions Declaring & Naming Functions Statements Void Functions Cicode Variables Include Files

Simple Functions

PUBLIC

FUNCTION

IncCounter()

IF Count < 100 THEN

COUNT=COUNT + 1;

ELSE

COUNTER = 0 ;

END

END

Scope of Function Public or Private

Start of Function

Name of Function

Start of Code

End of IF statement

End of Code

Function Syntax – Pseudocode

HELLOStandUp()

IF told THENStand Up ;

ELSERemain Seated;

Finished

GOODBYE

Function Elements

Scope Declaration Name Statement

Scope PUBLIC

Default Shared across Project

PRIVATE Only works within Cicode

file where written

Declaring Functions

Indicates beginning and end of function code

Scope

FUNCTION

FunctionName()

Statement ;

END

Naming Functions

Up to 32 characters Do not use reserved words Case insensitive Use CamelCase

UpperCamelCase lowerCamelCase

Scope

FUNCTION

FunctionName()

Statement ;

END

Statements

Perform the “work” in the function

PUBLICFUNCTIONStatementExample() IF MASH_PUMP THEN PROMPT(“Mash Pump On”);

ELSE PROMPT(“Mash Pump Off”);

ENDEND

Statements

Void Functions

Do not return any data to the calling function

PUBLICFUNCTIONVoidExample() IF MASH_PUMP THEN PROMPT(“Mash Pump On”);

ELSE PROMPT(“Mash Pump Off”);

ENDEND

PUBLICFUNCTIONMyDateTime()

MISC1=Date(3);MISC2=Time(1);

END

PUBLICFUNCTIONAudAlarm()

DspPlaySound(“[RUN]:Tada.wav”,0);Message(“Alarm”,”Holding Tube too Hot”,48);

END

HTA.H OR HTA.HH

FUNCTION

AverageEx1()

TIC_P2_PV = (TIC_P1_PV + TIC_P4_PV) / 2

END

Cicode Variables

Located in Computer memory Temporary data storage Data Types

Strings - STRING Integers - INT Real Numbers - REAL

SILO_LEVEL value

OVEN_TEMP value

STRING_TAG value

iAverage

rArea

sMyName

PLC Registers Computer Memory

Declaring Cicode Variables

Like Variable Tags – a Data Type must be specified for Cicode Variables

Global, Module, Local

Cicode Variable Syntax

Syntax:

SCOPE DATATYPE NAME = INITIALVALUE

GLOBAL STRING sMyString = “” ! Null Value

GlobalModuleLocal

STRINGINT

REAL

Variable Name

Initialize Variable

Global Cicode Variables Valid across all Cicode files and all include

projects Maintenance more difficult Local variables preferred

GLOBAL STRING gsDefaultPage = “MIMIC” ;INTFUNCTIONGlobalExample(String sPage)

INT iStatus ;iStatus = PageDisplay(sPage) ;

IF iStatus <> 0 THENPageDisplay(gsDefaultPage) ;

ENDRETURN iStatus ;

END

Module Cicode Variables

Specific to the file where it is declared Default for Cicode variables Declare before functions use it Multiplies maintenance issues

Local Cicode Variables

Specific to function where declared Any variable defined within a function

is local by default (no prefix required) Only valid while function executes Local variables take precedence if

name conflict occurs

Local Cicode Variables

PUBLIC

INT

FUNCTION

LocalExample()

INT iAverage ;

iAverage=(TAG1 + TAG2) /2;

RETURN iAverage

END

Variable Naming Standards Hungarian Notation

Initial (lowercase) letter describes variable usage Coined by Charles Simonyi of Microsoft

Applications Hungarian vs. System Hungarian

System Hungarian Notation

Prefix Interpretation

i, n Integer

r Real

s String

o Object (activeX)

h Handle (int)

Apps Hungarian Notation

Prefix Interpretation

p Pump (on/off)

t Temperature

x Horizontal coord

y Vertical coord

c Control variable

FUNCTION

AudAlarm2(STRING sFile, STRING sTitle, STRING sMessage)

DspPlaySound(sFile,0);

Message(sTitle,sMessage,48);

END

AudAlarm2("C:\WINDOWS\Media\chimes.wav", “Oven Temp", “Holding Tube Too Cold")

Button

Converting Cicode Variables

Convert Data Types for further processing

IntToStr()

RealToStr()

StrToInt()

StrToReal()

Input() StrToInt() Calculations+-*/

Use RealToStr function Need to convert number to string for use by message()

function

RealToStr(Number, Width, Places) Number: The floating-point number to convert Width: The width of the entire string Places: Number of decimal places in the string

Message(“Holding Tube”,RealToStr(TIC_HOLD_PV,6,3),64)

Eg the specification 6,3 can store 12.345

Enter a value into a Tag

FUNCTIONOperatorInput()STRING sTag//sTag is a stringsTag=Input("ENTER","Enter a value","");// Displays dialog box, operator can input a // single value (Title, Prompt, Default)LIC_Silo_PV=StrToInt(sTag);// Convert sTag value to string and place in // LIC_Silo_PV variableEND

Display Time

Cent_RT is the accumulator

TimeToStr(Time, Format, UTC)

TimeToStr(Cent_RT,5)

Include Files

Command field limited to 128 Characters

Include Files accommodate a single complex statement sequence

Any valid DOS filename Convention: Filename.cii Referenced by:

@<filename>

DO Include <>

Create an Include file Use Notepad <Alarms.cii>

AudAlarm2(C:\WINDOWS\Media\chimes.wav,“Holding Tube”, “Holding Tube Too Cold”)

Chapter 5 - Summary Questions How many built-in functions are supplied with Vijeo Citect?

What are the four basic elements of Functions?

How and why use the Private function attribute?

What is ‘declaring a function?’

How many characters can be used in a function name?

What is ‘the statement?’

What are Void functions?

What is a Cicode variable?

What is an include file?

Cicode Functions

Chapter Summary Elements of a function Void functions Cicode variables Converting and formatting variables Include files

Conditional Executors Chapter 6

Conditional Executors

Chapter Overview Four conditional executors IF FOR WHILE SELECT CASE

IF Statement

Execute code based on result of a test

IF .. THEN or IF .. THEN .. ELSE

IF test expression THENTrue Statements ;

END

- Or -

IF test expression THENTrue Statements ;

ELSEFalse Statements ;

END

Use IF .. THEN .. ELSE statement

FUNCTION

IF_Example1()

IF Centrifuge_Clar_V = 1 THEN

Message(“Clarifier Status”, “Running”,64)

ELSE

Message(“Clarifier Status”,”Stopped”,64)

END

END

Use IF THEN ELSE using Cicode variables

FUNCTION// set data types for variables in this functionIF_Example2(INT iTag1, STRING sTitle, STRING sOnMessage, STRING

sOffMessage)// If Tag1 is on then display ‘On’ popup

IF iTag1 = 1 THENMessage(sTitle , sOnMessage ,64)

ELSE// Tag is 0 – display ‘Off’ Popup

Message(sTitle , sOffMessage ,64)// End of IF statement

END// End of FunctionEND

FOR Loop

Execute statements a number of times

FOR variable = expression1 TO expression2 DO

Statements ;

END

Variable used as counter

Start Count Value

End Count Value

Count

Exp1++

++++

Exp2

Statements

Sleep & SleepMS

// Sleep for 1 second

Sleep(1)

// Sleep for 500 milliseconds

SleepMS(500)

FOR Loop

Execute statements a number of times

FUNCTIONIncrementLevel()// Counter is an IntegerINT Counter ; // Set Counter to count 10 levels

FOR Counter = 0 TO 9 DO// Add 1 to counter

TagX = tagX + 1; Sleep(2);

// End of FOR loopEND

END

FUNCTIONFOR_ExampleX()INT Counter;INT iSP;INT iPV;

iSP = LIC_Balance_SP;iPV = LIC_Balance_PV;

Use sleep(1) to delay the loop

Increase LIC_Balance_PV

FUNCTIONFOR_Example1()INT Counter;INT iSP;INT iPV;

iSP = LIC_Balance_SP;iPV = LIC_Balance_PV;

FOR Counter = iPV TO iSP - 1 DO LIC_Balance_PV = LIC_Balance_PV + 1;SleepMS(300);

ENDEND

Decrease LIC_Balance_PV

FUNCTIONFOR_Example2()INT Counter;INT iSP;INT iPV;

iSP = LIC_Balance_SP;iPV = LIC_Balance_PV;

FOR Counter = iSP TO iPV - 1 DO LIC_Balance_PV = LIC_Balance_PV - 1;SleepMS(300);

ENDEND

FUNCTIONFOR_Example3()INT Counter;INT iSP;INT iPV;

iSP = LIC_Balance_SP;iPV = LIC_Balance_PV;

IF LIC_Balance_PV > LIC_Balance_SP THENFOR Counter = iSP TO iPV - 1 DO LIC_Balance_PV = LIC_Balance_PV - 1; SleepMS(300);END

ELSEFOR Counter = iPV TO iSP-1 DO LIC_Balance_PV = LIC_Balance_PV + 1; SleepMS(300);

ENDEND

END

WHILE Loop

Execute statements while condition is true

WHILE Expression DO

Statements ;

END

WHILE Trigger DO

Count = Count + 1 ;

Sleep(1) ;

END

Decrement LIC_Balance_PV while Pump_Feed_CMD is true Set LIC_Balance_PV to 100 when Pump_Feed_CMD is false

FUNCTION

WHILE_Example1()

WHILE Pump_Feed_CMD = 1 AND LIC_Balance_PV > 20 DO

LIC_Balance_PV = LIC_Balance_PV -1;

SleepMS(500);

END

LIC_Balance_PV = 100

Pump_Feed_CMD = 0 !optional

END

Select Case Statement

Executes one of a choice of statements

SELECT CASE Expression

CASE CaseExpression1,CaseExpression2

Statements ;

CASE CaseExpression3 TO CaseExpression4

Statements ;

CASE IS > CaseExpression5 , IS < CaseExpression6

Statements ;

CASE ELSE

Statements ; ! nothing satisfied

END SELECT

Case ExpressionsCase Keyword Description Example

(none) Expression

6

iTestValue

“Monday”

, Multiple discrete matches

3, 5, 8

iTestValue, iTestValue1

“apples”, “oranges”

TOSpecifies inclusive range of values. Smaller value placed before TO keyword.

3 TO iTestValue

“apples” TO “oranges”

“Friday” TO “friday”

ISUse with <,>,<=,>=,=,<>

IS <=14

IS > iTestValue

IS < “cherries”

ELSE‘Catcher’ for when no other Case clause matches

FUNCTIONWhatDayIsIt()

SELECT CASE Delivery_Day CASE 0

MISC2 = "SUNDAY"; CASE 1

MISC2 = "MONDAY"; CASE 2

MISC2 = "TUESDAY"; CASE 3

MISC2 = "WEDNESDAY"; CASE 4

MISC2 = "THURSDAY"; CASE 5

MISC2 = "FRIDAY"; CASE 6

MISC2 = "SATURDAY";CASE ELSE

Message(" Invalid ",“Not a valid number",64);END SELECT

END

Chapter 6 - Summary Questions What are the two formats of the IF statement?

Why is the FOR loop used?

Why is the WHILE loop used?

Which statement is used to execute one of several groups of statements, depending on the result of an expression?’

Conditional Executors

Chapter Summary IF statement FOR loop WHILE loop SELECT CASE statement

More Cicode Functions Chapter 7

More Cicode Functions

Chapter Overview Return Functions Cicode Arrays Comments

Return Functions

Return functions return data to calling function

HowAreYou()

RETURN(“I am fine”)

Return Functions

Must declare the returning Data type

Function Called

Evaluate Statements & store

in memory

Result returned& Stored in Tag

or Variable

Functions Returning Values Return Values

PUBLIC

INT

FUNCTION

ReturnExample()

Blah;

Return(3);

END

Return Values

PUBLIC

STRING

FUNCTION

CurrentRecipe()

Blah;

Return(“Full Cream Milk”);

END

Data Type

returned

Data Type

returned

Create Function

FUNCTION

AverageEx1()

TIC_P2_PV = (TIC_P1_PV + TIC_P4_PV) /2

END Return Function

INT ! return data type is Integer

FUNCTION

AverageEx2()

RETURN (TIC_P1_PV + TIC_P4_PV) /2 ! return expression

END

Create Function – AverageEx3()

INT

FUNCTION

AverageEx3(INT iTagX, INT iTagY)

RETURN (iTagX + iTagY)/2

END

Change OperatorInput() to a Return function

INT

FUNCTION

EnterTagValue()

STRING sTag

sTag=Input("ENTER","Enter a value","");

RETURN StrToInt(sTag);

END

Bugs – Part 1

// Return the area of a circle into Pizza_Area given the// radius in Pizza_Size// Note the use of local variables and database variables

FUNCTIONAreaofPizza()

rArea = pi()* POW(Pizza_Size,2); Pizza_Area = rArea;

END

Bugs – Part 1, Answers

// Return the area of a circle into Pizza_Area given the// radius in Pizza_Size// Note the use of local variables and database variables

FUNCTIONAreaofPizza()

real rArea; rArea = pi()* POW(Pizza_Size,2); Pizza_Area = rArea;

END

What about Pizza_Area & Pizza_Size?

Probably a Variable tag or a global variable, judging by the usage

Bugs – Part 2

// This function will convert the diameter of the variable// tag from inches to centimetres// This is a RETURN function.

FUNCTIONInchToCent(REAL a)

REAL rCent rCent=a*2.54

END

Bugs – Part 2, Answers

// This function will convert the diameter of the variable// tag from inches to centimetres// This is a RETURN function.

REALFUNCTIONInchToCent(REAL a)

REAL rCent; rCent=a*2.54;

RETURN(rCENT)

END

Bugs – Part 3

// Show the value of Pizza_Area on the prompt line.

FUNCTIONPromptPizza(REAL rRealValue)

Prompt("The area of the Pizza is " + rRealValue); Sleep(3); Prompt("");

END

Bugs – Part 3, Answers

// Show the value of Pizza_Area on the prompt line.

FUNCTIONPromptPizza(REAL rRealValue)

Prompt("The area of the Pizza is " + RealToStr(rRealValue,6,3));

Sleep(3); Prompt("");

END

Alternate: ...Pizza is " + rRealValue:##.###)

Arrays Arrays hold equally-sized data elements, of the same data type.

Individual elements are accessed by index using a consecutive range of integers

INT Apartment[4] Unit A … Apartment[0] Unit B … Apartment[1] Unit C … Apartment[2] Unit D … Apartment[3]

A B C D

Index[0]Index[1]Index[2]Index[3]

Arrays

INT MyArray[10]

INT Count ;

For Count = 0 to 9 do

MyArray[Count]=Count+1 ;

END

Initialising an Array

STRING Array[5]=“This”,”is”,”a”,”string”,”array”;

Array is satisfied as:

Array[0]=“This”

Array[1]=“is”

Array[2]=“a”

Array[3]=“string”

Array[4]=“array”

Array Dimensions

Arrays can have more than one dimension

INT MyArray[Dim1Size][Dim2Size][Dim3Size] = Values ;

STRING StrArray[5] ; ! List

REAL Result[5][2] ; ! 2-D Table

INT IntArray[4][3][2] ; ! 3-D Table

Using Arrays

Arrays are declared as Module or Global (cannot be declared locally)

Placed at the beginning of a Cicode file Do not exceed the bounds of the array You cannot pass an entire array into a

Cicode function

Assign text description to numeric Tag

STRING sRecipeArray[5] = “Full Cream", “Lite", “Sport", “Skim", “High protein";

STRING FUNCTION

RecipeSelection()

END

STRING sRecipeArray[5] = “Full Cream", “Lite", “Sport", “Skim", “High protein";

STRINGFUNCTIONRecipeSelection()STRING sRecipe;INT iRecipe;

sRecipe = Input("Recipe Number","Enter a number between 0 and 4","");iRecipe = StrToInt(sRecipe);

SELECT CASE iRecipeCASE 0 TO 4

RETURN sRecipeArray[iRecipe];CASE ELSE

Message("Error","Not a valid number",64);END SELECT

END

Comments

Comment ,Comment and Comment again

! Single Line CommentFunction()/* Multiple Line commentsCan extend over several linesEnd comment block with a delimiter- Cannot be started on the same line as a statement*/Function2()// Another style of comment// Begin each line with forward slashes

Chapter 7 - Summary Questions What does a return function do?

What is an Array?

Why should comments be included in all Cicode files?

More Cicode Functions

Chapter Summary Return functions Debugging code Arrays Comments

Cicode Debugger Chapter 8

Cicode Debugger

Chapter Overview Starting the Debugger Debug Options Debug your Code

Citect Kernel

Covered in Intermediate Course Core of the Vijeo Citect system Low-level diagnostic and debugging

Use with extreme care Secure access – over-rides all other security

measures Command Line interface

Cicode Editor in Debug Mode

Open Debug Toolbar Right-Click on blank area of

toolbar

Open and test Pizza page

Toggle Breakpoints

Find Errors From

DevFind(hDev,sPizzaNumber,”NUMBER”) ;

To

DevFind(hDev,sPizzaNumber,”NUM”) ;

Advanced Stepping

Chapter 8 - Summary Questions Explain debug mode.

There are three tools to control stepping through functions. What are they?

Cicode Debugger

Chapter Summary Cicode editor environment Advanced stepping

Did we Achieve the Objectives?

Good Understanding & Competent in Use of Cicode

Be Able to Use Cicode in Commands and Expressions

Apply Learning to Your Own Site or Project Be Able to Write Your Own Cicode Functions Know How to Debug Your Own Cicode

Functions

SCADA Training Roadmap

Upgrade & New Features

Networking & Architecture

Customisation & Design

Cicode Programming

Vijeo Citect Configuration

Tech

nic

al Skill

Requ

irem

ent

End of Course

Questions Certificates CCSE Certification Course evaluation

www.citect.com/evaluation

top related