Programming Help Topics

___________________________________________________________

Programming Technique

Programming Language

Wagon Structure

This program is mainly designed for process control material handling systems. Programming is friendlier & user’s oriented with this program.

For each wagon there is one program. Each program is associated with each transport wagon. I.E. wagon1 program is related to wagon1, wagon2 program programming is related to wagon2.

Each line in program is called statement.

With Line as beginning, Easiest way to program is to select from List (If user wants to know about statement, Press F1 Key) then double click List Line, do it until program is over. User may be asked for feeding a value at certain instruction, at such time give values in given range and press “Return Key”

User can insert comments with Prefix ‘ , either in beginning of a line or at end of statement + Space.

E.g.

Your statement Lift From Tank.12 in Interpreter1 commands transport wagon1 to move to station number 12 and then lift load from station 12.

Your statement Lift From Tank.12 in Interpreter2 commands transport wagon2 to move to station number 12 and then lifts load from station 12.

Wagon1 Input controls, Like (proxies, limit switches and push buttons) are wired to InputCard-1.

Wagon1 Output controls, Like (traverse motor, hoist motor and Fast Traverse) are wired to OutputCard-0(1 to 7).

Wagon2 Input controls, Like (proxies, limit switches and push buttons) are wired to InputCard-2.

Wagon2 Output controls, Like (traverse motor, hoist motor and Fast Traverse) are wired to OutputCard-0(9 to 15).

After user has finished programming, for an Interpreter one should compile it (Click compile on menu.). Only compiling of one wagon interpreter does not form a program for Soni-Ab. All Interpreters should be compiled.

For simplicity of programming, User selects statement from Programming Guide then presses Space Key, until Programming Guide is cleared. Use Up Arrow or Down Arrow key after selection to select other list.


Programming Technique

___________________________________________________________

Programming is not case sensitive. One can write in uppercase or lowercase or mixed case.

While writing a program in a Interpreter, first user has to write all statements required to initialize Counters, Flags, AlarmTimer, Wagon Basic Position & then statement Do & then again statements. Last statement should be always Loop. It means every Interpreter must have One Do and One Loop statement.

So your Interpreter Looks like as following,

Alarm Station Time = 4

Alarm Hoist Time = 15

Rack Drip Time = 5

Barrel Drip Time = 10

Wagon Basic Position = 1

Do         (Must)

  Statements

  - - -

Loop       (Must)

Whenever user switched to Auto-Restart (Plant From Basic Position), program will start from first Statement of first wagon program, but when user switched to Auto-Start (Plant from Power Interrupt or from Auto Interrupted to Manual) program will start from statements from last interrupted statement. In both case when LOOP statement is received, program will start from DO Statement.

Program also scan next Wagon’s Interpreter whenever one of

Wagon program is busy.

To achieve a proper timing for a load, process time in any tank, users are provided following objects.

Tank

Input

Output

Charge

Global

GlobalFlag

Tank, Input, Output, Global and GlobalFlag are referred as object having collection Tanks, Inputs, Outputs, Counters and Flags used while programming.

Note:

User can use name of Object Instead of it’s index,

If name of Tank 12 is SoakDegrease One can write statement

Lift From Tank.SoakDegrease Instead of Lift From Tank.12


Programming Language

___________________________________________________________

+1 Charge

-1 Charge

+1 Global

-1 Global

Alarm Hoist Time = DATA

Alarm Station Time = DATA

Barrel Drip Time = DATA

Charge = DATA

Global = DATA

Disable Drip Time

Do

Enable Drip Time

End If

Else

ElseIf Flag = True

ElseIf Flag = False

ElseIf Counter Operator Data

Flag = False

Flag = True

Get Information

If FLAG = True

If FLAG = False

If Counter Operator DATA

Lift By Counter

Lift From TANK

Log

Loop

Lower By Counter

Lower On Tank

Pause For Seconds = DATA

Pause For Minutes = DATA

Put Information

Rack Drip Time = DATA

Wagon Basic Position = TANK

Wait Flag

Wait Not Flag

XTransportLoadSide Forward

XTransportLoadSide Reverse

XTransportOtherSide Forward

XTransportOtherSide Reverse


Tank As Object

Tanks are numbered in indexing mode 0 onwards, starting from Load Station or from buffer station if provided.

Wagons are moving on tanks to lift or lower on required tank.

Limits For Tanks are 0 To 63

Statements Example:

Wagon Basic Position = Tank.10

Lift From Tank.10

Lower On Tank.10

Get Information From Tank.10

Put Information To Tank.10


Input As Object

Input 0 To 15 refers to input 0 To 15 of Input Card 0

Input 16 To 31 refers to input 0 To 15 of Input Card 1

Input 32 To 47 refers to input 0 To 15 of Input Card 2

Limit For Inputs are 0 To 127

Inputs are used to count tank number, to decide wagon lift arm position up or down, to change plant mode. Like Auto: Manual, or to change user’s function Like Passivation

Statements Example:

If Input.12 = True

If Input.13 = False

ElseIf Input.12 = True

ElseIf Input.13 = False


Output As Object

Output 0 To 15 refers to output 0 To 15 of Output Card 0

Output 16 To 31 refers to output 0 To 15 of Output Card 1

Output 32 To 47 refers to output 0 To 15 of Output Card 2

Limit For Outputs are 0 To 47

Outputs are used to drive a wagon forward, Reverse or to lift or lower a load.

Statements Example:

Output.10 = True

Output.10 = False


Global As Object

Limit for Global are 0 to 15 & can store value 0 to 9999

Global are used to count an event or to count a tank to lift a lower a load.

Statements Example:

Global.0 = 12

+1 Global.2

-1 Global.3

If Global.1 = 12

If Global.5 > Global.10

ElseIf Global.1 = 12

ElseIf Global.5 > Global.10

Lift By Global.10

Lower By Global.10

Get Information by Global.10

Put Information by Global.10


Charge As Object

Limit for Charge are 0 to 3 & can store value 0 to 9999

Charge are used to decide whether a flightbar is loaded, or type of process to be carried.

Charge0 is used to decide whether is loaded or not.

Charge1 is used to count a number of flightbar is entering into the plant.

One should take following steps to use charges properly.

1)	Change Charges only when Load is entering into plant i.e. Lifting from Load Tank.

2)	Do not use statement “Get Information From/By” or Statement “Put information to/By” or “+1 Charge” or “-1 Charge” while a load is lifted.

3)	Charge are carried with a Flightbar so once they are set they remains attached to Flightbar and changes automatically while they are on different tank.

Statements Example:

Charge.0 = 12

+1 Charge.2

-1 Charge.3

If Charge.1 = 12

ElseIf Charge.1 = 12


GlobalFlag As Object

Limit for GlobalFlags are 0 to 15 can have value True Or False

Statements Example:

GlobalFlag.10 = True

GlobalFlag.10 = False

If GlobalFlag.12 = True

If GlobalFlag.13 = False


+1 Counter

___________________________________________________________

-1 Counter

Counter = DATA

Syntax: +1 COUNTER

Syntax has these parts.

Part            Description

_______         __________________________________________

COUNTER         Global or Charge

___________________________________________________________

Statement increments Counter by 1.

If counter value is 98 it becomes 99.

If counter value is 9999 it becomes 0.

Example:

+1 Global.Choice

Counter named Choice of a Global, had value 9999. After completing statement it becomes 0.

+1 Charge.0


-1 Counter

___________________________________________________________

+1 Counter

Counter = DATA

Syntax: -1 COUNTER

Syntax has these parts.

Part            Description

_______         __________________________________________

COUNTER         Global or Charge

___________________________________________________________

Statement decrements Counter by 1.

If counter value is 9999 it becomes 9998.

If counter value is 0 it becomes 9999.

Example:

-1.Global.Choice

Counter named Choice of a Global, had value 0. After completing statement it becomes 99.

-1 Charge.0


Alarm Time

___________________________________________________________

Sets Alarm Time in seconds for a given function. If function is not completed within given data(time) automatically an error is generated. Plant (All wagons) comes to halt. Output-0 of OutputCard-0 turns on, corresponding WAGON STATUS display will show error.

Syntax: Alarm FUCTION Time = Data

Syntax has these parts.

Part            Description

_______         __________________________________________

Function        Hoist Or Station

_______         __________________________________________

DATA            0 To 99 (In Seconds)

___________________________________________________________

FUCTION is described as

Hoist:  until wagon arm reaches to LiftEnd position

        while Lifting load, or wagon arm reaches to

        LowerEnd position while lowering load.

Station: While traversing, from one station to next

         station.

Example:

Alarm Hoist Time  = 12

Whenever a wagon start lifting/lowering a related interpreters alarm-timer starts. If lift/lower function is not completed in 12 Seconds then an error will be generated.

Alarm Station Time  = 4

Assume wagon current position is 2 has to go to station 10 and As it starts an alarm timer also starts. If wagon does not reach to station 3 in 4 seconds an error will be generated else alarm timer will be regenerated and continue repeating it unless it reaches station 10.

Note: If selected Time is 0 seconds then No Alarm will be    generated.


Drip Time

___________________________________________________________

See Also

Sets drip time. Whenever wagon lifts a Jig, it requires some time to halt, so that liquid from the load drains out. There are mainly two type of jigs to hold loads. Rack and Barrel. Certain plant have Rack or Barrel or both.

It is program which decides through PLC input, which type of jigs it lifts.

If Rack is lifted then it will be lifted up to LiftEnd position, and waits for Rack Time before it execute next statement.

If Barrel is lifted then it will be lifted to MidBarrelProxy position, waits for Barrel Time and start again lifting up to LiftEnd position. In case MidBarrelProxy is not sensed then wagon will reach to LiftEnd position but will not wait for barrel drip time.

Syntax: Function Drip Time = DATA

Syntax has these parts.

Part            Description

_______         __________________________________________

Function        Rack Or Barrel

_______         __________________________________________

DATA            0 To 99 (In Seconds)

___________________________________________________________

Example:

Barrel Drip Time = 10

Rack Drip Time = 5

Note: If selected Time is 0 seconds then No Drip take place.


Counter Assigning

___________________________________________________________

+1 Counter

-1 Counter

Syntax: Counter = Value

Syntax has these parts.

Part            Description

_______         __________________________________________

COUNTER         Global or Charge

                Global Limits are 0 To 15 and these

                counters expressed as Global.0 To Global.15

                Charge Limits are 0 to 3 and these counters

                are expressed as Chrge.0 To Charge.3

_______         __________________________________________

Value           0 To 9999

___________________________________________________________

Example:

Global.0 = 10

Charge.0 = 5


Enable Disable Dripping

___________________________________________________________

See Also

Syntax: Function Drip Time

Syntax has these parts.

Part            Description

_______         __________________________________________

Function        Enable Or Disable

___________________________________________________________

At certain Tanks Like Load, Dryer one does not require drip

Time, in such case one has to use statement “Disable Drip Time” before lifting load from station. To enable drip time one has to use “Enable Drip Time” before lifting load.

Example:

Enable Drip Time

Disable Drip Time


Do Loop

___________________________________________________________

In every Wagon programming file there should be only one statement “Do” and only one and the last statement “Loop”. Thus “Do” and “Loop” is in pair.

Whenever user switched to Auto-Restart (Plant From Basic Position), program will start from first Statement of first wagon program, but when user switched to Auto-Start (Plant from Power Interrupt or from Auto Interrupted to Manual) program will start from statements from last interrupted statement. In both case when LOOP statement is received, program will start from DO Statement.

Example:

Do

  Statements

  . . . . . .

Loop


Charge Information

___________________________________________________________

Syntax: Get Information From Tank

On executing this statement program gets information from given Tank and loads it into Charges

This instruction should be used when user wants to test charge of required tank.

Syntax: Put Information To Tank

On executing this statement program gets information from Charges and loads it into given tank

This instruction should be used only while one load at Buffer or Load Tank.

Syntax: Get Information By Global

On executing this statement program gets information from tank(tank number is the value of given Global) and loads it into Charges

Syntax: Put Information By Global

On executing this statement program gets information from Charges and loads it into tank(tank number is the value of given Global)

Example:

Get Information From Tank.0

Put Information To Tank.0

Get Information By Global.0

Put Information By Global.0


Conditional Statement

___________________________________________________________

Syntax1:

If Condition

  Statements

  . . . . .

End If

If Condition is met then statement between “If Condition” and “End If” are executed

Otherwise

Program skip up to statement “End If”

Example:

If Input.1 = True

  Lift from Tank.1

End If

Syntax2:

If Condition

  Statements

  . . . . .

Else

  Statements

  . . . . .

End If

If Condition is met then statement between “If Condition” and “Else” are executed

Otherwise

Statement between “Else” and “End If” are executed.

Example:

If Input.1 = False

  Lift from Tank.1

Else

  Lift from Tank.2

End If

Syntax3:

If Condition

  Statements

  . . . . .

ElseIf Condition

  Statements

  . . . . .

ElseIf Condition

  Statements

  . . . . .

End If

If Condition is met then statement between “If Condition” and “ElseIf Condition” are executed and then program jumps to “End IF”.

Otherwise

Next “ElseIf Condition” is examined, if condition is met then statement between “ElseIf Condition” and next “ElseIf Condition” are executed and then program jumps to “End IF”

Otherwise

Next “ElseIf Condition” is examined, if condition is met then statement between “ElseIf Condition” and next “End If” are executed and then program jumps to “End IF”

Otherwise

Program jumps to “End IF”

Example:

If Charge.1 = 0

  Lift from Tank.1

ElseIf Charge.1 = 1

  Lift from Tank.2

ElseIf Global.3 = 4

  Lift from Tank.3

End If

Syntax4:

If Condition

  Statements

  . . . . .

ElseIf Condition

  Statements

  . . . . .

ElseIf Condition

  Statements

  . . . . .

Else

  Statements

  . . . . .

End If

If Condition is met then statement between “If Condition” and “ElseIf Condition” are executed and then program jumps to “End IF”.

Otherwise

Next “ElseIf Condition” is examined, if condition is met then statement between “ElseIf Condition” and next “ElseIf Condition” are executed and then program jumps to “End IF”

Otherwise

Next “ElseIf Condition” is examined, if condition is met then statement between “ElseIf Condition” and next “End If” are executed and then program jumps to “End IF”

Otherwise

Statement between “Else” and next “End If” are executed.

Example:

If GlobalFlag.1 = True

  Lift from Tank.1

ElseIf Global.2 = 99

  Lift from Tank.2

ElseIf Input.3 = True

  Lift from Tank.3

Else

  Lift from Tank.4

End If

Following Condition can be examined.

Input = True

Input = False

Output = True

GlobalFlag = True

GlobalFlag = False

Global = (0 To 9999)

Global < (0 To 9999)

Global > (0 To 9999)

Global <> (0 To 9999)

Global <= (0 To 9999)

Global >= (0 To 9999)

Global = Global

Global < Global

Global > Global

Global <> Global

Global <= Global

Global >= Global

Charge = Global

Charge < (0 To 9999)

Charge > (0 To 9999)

Charge <> (0 To 9999)

Charge <= (0 To 9999)

Charge >= (0 To 9999)

Note: For Each “If Condition” there should be one “End If”


Moving Wagon And Lifting Load

___________________________________________________________

Initialize Wagon Basic Position

Moving Wagon And Lowering Load

Syntax1: Lift From Tank

On executing above statement wagon traverses from its current tank position to given tank position (so called destination position) and then lifts load, direction of movement is decided by program itself. In case current tank position is same as given tank position then no traverse takes place. If load is in lift position then program skips to the next statement otherwise it lifts load performs dwell time (If Enabled) then skips to next statement.

Next statement is not executed until wagon moves to correct position as in given statement.

Example:

Lift From Tank.5

Syntax2: Lift By Global

It does the same function as syntax1, the only difference is that the destination position is content of given Global i.e. if global content is 10 then destination position is 10

Example:

Lift By Global.5


Moving Wagon And Lowering Load

___________________________________________________________

Initialize Wagon Basic Position

Moving Wagon And Lifting Load

Syntax1: Lower On Tank

On executing above statement wagon traverses from its current tank position to given tank position (so called destination position) and then lowers load, direction of movement is decided by program itself. In case current tank position is same as given tank position then no traverse takes place. If load is in lower position then program skips to the next statement otherwise it lowers load then skips to next statement.

Next statement is not executed until wagon moves to correct position as in given statement.

Example:

Lower On Tank.5

Syntax2: Lower By Global

It does the same function as syntax1, the only difference is that the destination position is content of given Global i.e. if global content is 10 then destination position is 10

Example:

Lower By Global.5


Logging Time Of  Flightbar
Logging of a load in different tank.

___________________________________________________________

Syntax: Log Data

Syntax has this part

Part            Description

_______         __________________________________________

Data            0 To 15

___________________________________________________________

User can log, FlightBar entry Time(Time In), Exit Time(Time Out), and Charge values of 16 Tanks.

While executing statement if load is in lift position then “Time Out” and Charges of a FlightBar is logged, if load is in lower position then “Time In” and charges of a FlightBar is logged. User should write statement properly after lift and lower statement from a required Tank to be logged.

Note: if Charge 0 has value 0 then no logging will take place, this charge is also cleared when lifting. User should change Charge 0 value to 1 while loading and increments Charge 1 as this charge is considered as FlightBar number.


Waiting for Process Time

___________________________________________________________

Syntax: Pause For TimeUnit = Data

Syntax has these parts

Part            Description

_______         __________________________________________

TimeUnit        Seconds Or Minutes

_______         __________________________________________

Data            0 To 99 Seconds

___________________________________________________________

On certain Tank wagon may require to wait for some time to lift or lower a load or to wait for other wagon to complete work before program proceed for next statement.

Example:

Pause For Seconds = 12

Related wagon program waits for 12 seconds before it proceeds to next statement

Pause For Minutes = 2

Related wagon program waits for 2 minutes before it proceeds to next statement


Assigning Flag

___________________________________________________________

See

Syntax: Flag = Value

Syntax has these part

Part            Description

_______         __________________________________________

Flag            GlobalFlag Or Output

_______         __________________________________________

Value           True Or False

___________________________________________________________

If assigned value is True then Flag is turned on , If assigned value is False then Flag is turned of.

Example:

GlobalFlag.0 = True

Output.0 = False


Assigning Wagon Basic Position

___________________________________________________________

Moving Wagon And Lifting Load

Moving Wagon And Lowering Load

Syntax: Wagon Basic Position = Tank

Whenever user switched to Auto-Restart (Plant From Basic Position), program should know where wagon is positioned on which Tank, since the position of wagon is on count base and not on binary base. To identify this Auto-Restart position user must supply wagon basic position before “Do” statement.

Example:

Wagon Basic Position = Tank.0


Waiting For Signal From another Wagon
Waiting For Signal

___________________________________________________________

Syntax: Wait (Not) Flag

Syntax has this part

Part            Description

_______         __________________________________________

Flag            Input or Output or GlobalFlag

___________________________________________________________

Program step of related wagon is not incremented until condition is not fulfilled.

Example:

Wait GlobalFlag.0

Program step of related wagon is not incremented until GlobalFlag.0 = True

Wait Not GlobalFlag.0

Program step of related wagon is not incremented until GlobalFlag.0 = False


Moving Load Side Cross Transport

___________________________________________________________

Syntax: XTransportLoadSide Forward

        XTransportLoadSide Reverse

User can move Load-Side-Cross-Transport in forward or reverse direction at desired point by this statement. After reaching to desire position movement automatically cut-down by limit switch placed on other side.

Example:

XTransportLoadside Forward

XTransportLoadside Reverse

Note: Moving direction is controlled by Output and Limit-Switch and motor-winding wiring.


Moving Other side Cross Transport
Moving Other Side (Not Load Side) Cross Transport

___________________________________________________________

Syntax: XTransportOtherSide Forward

        XTransportOtherSide Reverse

User can move Other-Side-Cross-Transport in forward or reverse direction at desired point by this statement. After reaching to desire position movement automatically cut-down by limit switch placed on other side.

Example:

XTransportOtherSide Forward

XTransportOtherSide Reverse

Note: Moving direction is controlled by Output and Limit-Switch and motor-winding wiring.


Proxy arrangement on a transport wagon

_____________________________________________