SIOC Presentation
SIOC Presentation
SIOC Presentation
www.opencockpits.com
Introduction to SIOC
Designed to control not only the electronic hardware, but the simulation too. Balance between power and programming simplicity. Simulation linking element (control core).
23/10/2004
Introduction to SIOC
SIOC structure
IOCP CLIENTE module FSUIPC CLIENT module Link with IOCards module IOCP SERVER SIOC Language interface
SIOC
23/10/2004
Introduction to SIOC
SIOC is based in IOCP protocol. It s needed to know how IOCP works to understand SIOC. SIOC is an IOCP server itself. SIOC is based in EVENTS.
23/10/2004
Introduction to SIOC
Simulation process
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
IOCP Client
IOCP Client
Flight Simulator
23/10/2004
TCP/IP network
Introduction to SIOC
TCP/IP connection
IOCP Client - 1
23/10/2004
IOCP vs FSUIPC
The client doesn t ask for information constantly. There s no need of additional software to connect remotely. Only the required information is sent. If information doesn t change, nothing is sent.
23/10/2004
Introduction to SIOC
SIOC is an IOCP server. SIOC events modify the internal variables (the ones in the internal IOCP server). There are 3 types of events:
Due to a variable change (internal or external). Due to a change in the IOCards inputs (digital or analogic). Due to a Timer action.
Introduction to SIOC
23/10/2004
Associated script
SIOC Module
Iocards, IOCP or FSUIPC
A change happens
23/10/2004
Introduction to SIOC
Associated script
SIOC Module
Iocards, IOCP or FSUIPC
Change
23/10/2004
Introduction to SIOC
Associated script
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
SIOC
SIOC only run a script associated to a variable IF THIS VARIABLE CHANGES ITS VALUE. VALUE. The only exception is in the case of special variables named SUBROUTINES, that run SUBROUTINES, the associated script EVERY TIME they take part in an assignment or when the CALL command is executed.
Introduction to SIOC
23/10/2004
SIOC software
23/10/2004
SIOC.INI
IOCP CLIENT module FSUIPC CLIENT module IOCards linking module IOCP SERVER
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
SIOC.INI
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
SIOC.INI
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
SIOC.INI
23/10/2004
Introduction to SIOC
IOCP server
[ Puerto del servidor IOCP ] [ IOCP port ] IOCP_port=8092 [ Tiempo de respuesta mximo de los paquetes IOCP ] [ IOCP Timeout ] IOCP_timeout=4000
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
2.
23/10/2004
Introduction to SIOC
To work with a SIOC module, we have to link our SIOC variable with the module we want to work with, defining the attributes of the module and which particular element in the module we want to control. By this link, when our SIOC variable takes a value, an output will be generated via the defined module, and the variable value will change following the calculations made in the module.
23/10/2004
Introduction to SIOC
Types of LINKS
Module FSUIPC module IOCP Client module IOCards module LINK definition FSUIPC_OUT FSUIPC_IN IOCP IOCARD_SW IOCARD_OUT IOCARD_DISPLAY IOCARD_ENCODER IOCARD_ANALOGIC IOCARD_SERVO IOCARD_MOTOR SIOC
23/10/2004
Description Sends data to FSUIPC offsets. Receives data from FSUIPC offsets. Sends and receives IOCP variables data. Works with IOCards switches (inputs). Turns on/off IOCards outputs. Sends data to IOCards displays. Receives data from IOCards encoders. Receives data from IOCards analog inputs. Moves IOCards servomotors. Moves IOCards DC and stepper motors Manages a variable as a Subroutine.
Introduction to SIOC
SUBRUTINE
Description Defines type of link for the variable Defines special characteristics of the element IOCP remote variable number or FSUIPC offset Initial value for the variable FSUIPC offset lenght Initial input in the Master card that variable links to Initial output in the Master card that variable links to First figure in the Displays card that defines a number Encoder acceleration factor Number of figures (displays) needed by the variable Left position calibration Centre position calibration Right position calibration
Introduction to SIOC
Different identifiers, variables, constants and other elements are always separated by spaces, commas, spaces, commas, brackets or tabulators. tabulators. { and } are used to indicate different levels. levels. // can be used to insert general comments at the beguining of a line or at the end of a command line as a particular comment. Only one definition or command is allowed in each line. There s no difference between uppercase and lowercase. lowercase.
Introduction to SIOC
23/10/2004
We can use different types of temporary internal variables that only are valid for the script associated to a SIOC variable. There are two types:
Real, Real, named L0, L1 y L2. They can store decimal, integer, positive and negative values in the range 5 x 10^-324 a 1.7 x 10^308. 10^Boolean, Boolean, named C0, C1 y C2. They can store the value of a condition (true or false).
We can make reference to a SIOC variable in our scripts by naming it V + number of the SIOC variable, for variable, example V0001. V0001.
Introduction to SIOC
23/10/2004
Examples :
Var 0001, Link FSUIPC_IN, Offset $07F2, Length 2 Var 0001, Link IOCARD_ENCODER, Input 0, Acceleration 8, Type 1 // Encoder dec. Var 0006, Link IOCARD_DISPLAY, Digit 0, Numbers 5 Var 9023
23/10/2004
Introduction to SIOC
Here we define an initial value and insert a particular comment Var 1387, Link FSUIPC_OUT, Offset $0BDE, Length 2 Here we link with FSUIPC module (offset $0BDE, length 2). If variable 1387 changes, the value will be sent to FSUIPC Var 9341, Link FSUIPC_IN, Offset $0C32, Length 4 Variable 9341 will receive the value in offset $0C32 when it changes and the associated script will be launched then.
23/10/2004
Introduction to SIOC
Variable receives the value from analog input #2, calibrated with values 1, 127 and 255 (left, center and right).
Var 1209 , Link IOCARD_SERVO, Output 7, PosL 1, PosC 127, PosR 255
Servo in output 7 receives the value from variable 1209, previously adjusted with the calibrating parameters. We can define the 10 bits resolution control
Var 1387, Link IOCARD_MOTOR, Output 187, Aceleration 14, Type D
Depending on the variable value (> or <127), the motor connected to output 187 will turn one way or the other, with an acceleration coefficient of 14
Var 9999, Link SUBRUTINE
Variable 9999 will be a SUBROUTINE, so the associated script will be automatically run with the CALL command.
23/10/2004 Introduction to SIOC
. . .
} Example :
Var 0001, Link FSUIPC_IN, Offset $07F2, Length 2 { V0002 = V0001 + 1 CALL = V9999 L1 = V0001 * 1.35 L1 = ROUND L1 }
23/10/2004 Introduction to SIOC
END
NO
YES
23/10/2004
Introduction to SIOC
Description
Adds two variables or constants Subtracts two variables or constants Multiplies two variables or constants Divides two variables or constants Logic operation, or AND condition Logic operation, or OR condition Higher than condition Lower than condition Same as condition Higher or same as condition Lower or same as condition Different condition
Introduction to SIOC
ASSIGNMENT command
Variable Variable = Constant
Description Rounds the value to the closest integer Takes only the integer part from a variable Programs periodic events using a chrono Sets specific bit in a variable Clears specific bit in a variable Checks if a specific bit is set Inverts the value of a boolean variable (C0, C1 or C2) Does cyclical increases/decreases Converts to BCD a decimal value Converts to decimal a BCD value Makes a toggle function with a specific bit in a variable Changes to absolute value the value of a variable
Introduction to SIOC
FUNCTIONS definitions
Variable = Function parameter1 parameter2 parameter3
parameter can be a variable or a constant. Each function can only have 1, 2 or 3 parameters. The final value is assigned to the variable. Examples :
{ V0002 = Round L0 L2 = ToBCD V0005 C1 = TestBit V1234 5 V9888 = Timer 100 5 10 }
23/10/2004
Introduction to SIOC
SIOC functions
Variable = Round parameter1 Rounds the value to the closest integer. . Parameter1: Parameter1: Variable, real or integer constant. Variable = Trunc parameter1 Takes only the integer part from a variable (converts the decimal value to integer). Parameter1 : Variable, real or integer constant. Variable = SetBit parameter1 Sets to 1 the variable bit indicated in parameter. Parameter1 : Variable, real or integer constant.
23/10/2004
Introduction to SIOC
SIOC functions
Variable = ClearBit parameter1 Sets to 0 the variable bit indicated in parameter. Parameter1 : Variable, real or integer constant. Variable = Toggle parameter1 Makes a toggle (set to 1 then back to 0) the variable bit indicated in the parameter Parameter1 : Variable, real or integer constant. Variable = ToBCD parameter1 Converts the value in parameter1 to BCD format and sends it to variable (this format is very used in FSimulator). Parameter1 : Variable, real or integer constant.
23/10/2004 Introduction to SIOC
SIOC functions
Variable = Abs parameter1 Assigns to variable the absolute value (positive) defined in parameter. Parameter1 : Variable, real or integer constant. Variable = FromBCD parameter1 Converts the value in parameter1 from BCD to decimal and assigns it to the variable. Parameter1 : Variable, real or integer constant. Variable = TestBit parameter1 Assigns to the boolean variable a true or false value if the bit value in parameter is 1 or not. Parameter1 : Variable, real or integer constant.
23/10/2004 Introduction to SIOC
SIOC functions
Variable = Not parameter1 Assigns to the boolean variable the opposite value defined in parameter1. Parmetro1 : Boolean variable. Variable = Rotate parameter1 parameter2 parameter3 Increases or decreases the variable value in the quantity defined in parameter3. If the variable gets higher than parameter2, then it changes to the value in parameter1; and the opposite too. Is the typical heading case: parameter1 would be 0 and parameter2 359. Parameter1 : Variable, real or integer constant. Lower value. Parameter2 : Variable, real or integer constant. Higher value. Parameter3 : Variable, real or integer constant. Increment/Decrement
23/10/2004
Introduction to SIOC
SIOC functions
Variable = Timer parameter1 parameter2 parameter3 Starts the variable associated script periodically as set in parameter3 (1/10 sec). In each loop, the variable value is increased in parameter2, ending with the value reaches the value in parameter 1. Parameter1 : Variable, real or integer constant. Final value. Parameter2 : Variable, real or integer constant. Increase/Decrease. Parameter3 : Variable, real or integer constant. Time (1/10 sec).
23/10/2004
Introduction to SIOC
TIMER function
V0003 = Timer 3,1,10
1 sec
1 sec
1 sec
V0003 { script }
V0003=0 V0003=1
V0003 { script }
V0003=2
V0003 { script }
V0003=3
23/10/2004
Introduction to SIOC
CALL command
Variable CALL Variable (subroutine) Constant Executes the variable associated script; optionally, if a parameter is included, the variable will take its value. Anyway, the script is always executed. Example:
{ CALL V9888 CALL V1001 326 CALL V3004 L0 }
23/10/2004
Introduction to SIOC
ELSE
{ commands }
If condition is true, the commands between the IF brackets will be executed. If condition is false, then the commands between the ELSE brackets will be executed. The ELSE part is an option and must be always placed after the IF part. It is posible to nest up to 100 levels of these type of conditions.
23/10/2004
Introduction to SIOC
ExampleExample-1
How to use a switch, turn on a light and send tha information to the simulator:
Var 0001, Link FSUIPC_OUT, Offset $0D0C, Length 2 Var 0002, Link IOCARD_SW, Input 154 { IF V0002 = 1 // If the switch is on { V0001 = SETBIT 2 // Set Bit 2 V0003 = 1 // Turn on the LED } ELSE // If the switch is off { V0001 = CLEARBIT 2 V0003 = 0 // Turn off the led } } Var 0003, Link IOCARD_OUT, Output 38 // Lights
// Light switch
// Led
23/10/2004
Introduction to SIOC
ExampleExample-2
Using an encoder.
// Definition of an encoder (type 2, direct to Master card) Var 0001, Link IOCARD_ENCODER, Input 3, Aceleration 6, Type 2 { V0002 = ROTATE 1 ,360 ,V0001 // Increase/decrease in variable V0002 } // COURSE offset for autopilot Var 0002, Link FSUIPC_OUT, Offset $0C4E, Length 2, Value 1, Value 1
23/10/2004
Introduction to SIOC
ExampleExample-3
// Ailerons axle Var 0001, Link IOCARD_ANALOGIC, Input #1, PosL 0, PosC 128, PosR 255 // Input #1 means analog connector #1 in USB card. Without # would mean //digital input { L0 = V0001 * 129 // Potentiometer movement calculation V0002 = L0 - 16512 } // Simulator ailerons (offset from -16383 to 16383) Var 0002, Link FSUIPC_OUT, Offset $0BB6, Length 2
23/10/2004
Introduction to SIOC
23/10/2004
Introduction to SIOC
Write comments
// ************************************************************************** // This program moves the ailerons using an analog input in USB card * // ************************************************************************** Var 0001, Link IOCARD_ANALOGIC, Input #1, PosL 0, PosC 128, PosR 255 // Ailerons axle { L0 = V0001 * 129 // Potentiometer movement calculation V0002 = L0 - 16512 } Var 0002, Link FSUIPC_OUT, Offset $0BB6, Length 2 // Simulator ailerons (-16383 to 16383) (-
It s very interesting to insert comments along the program to make it understandable later. In the example, general comments are started with //. Particular comments also use //, but in this case at the end of the command line.
23/10/2004 Introduction to SIOC
Initializing variables
SIOC variables always are started with a NULL value, so the first value they get always causes an EVENT. EVENT. The attribute VALUE let us to initialize a SIOC variable. The initialization is made in the same order they are EVENT. written in the program and always causes an EVENT. Any started script can start many others by using the assignment commands, functions and the CALL command. With the initializations, the programmer can easily loose the script control, so we recommend to use the initializing variable technique for complex programs.
23/10/2004
Introduction to SIOC
The first variable to be initialized is the first defined (independently from the number of variable). If we 0, define a variable with an attribute VALUE 0, we will be sure its script will be executed. In this script we will set the assignments and calls to initializate the rest of the program.
Var 0000, Value 0 // Inicialization { V0007 = 1 // Set 1 V0002 = 8 // Initializes the 2 higher figures V0003 = 0 // and the 2 lower ones V0008 = 0 // Set to 0 the mode selector V9999 = 0 // 0=On 1=Off V0012 = TOBCD 1300 // Initializes freq NAV1 to 113.00 V9999 = TIMER 999 ,0 ,15 // Starts timer for blinking } Var 0002 // StdBy Freq two higher figures { CALL V1100 // Sends value to simulator }
23/10/2004
Introduction to SIOC
TIMER function is a powerful tool that let us to make sincronous loops, very important in the simulations design. Examples like starting an APU, retarding a valve opening are easily solved using TIMER function.
23/10/2004
Introduction to SIOC
Var 0000, Value 0 // Initializing values { V0002 = 0 // Output disabled V0003 = 1 } Var 0001, Link IOCARD_SW, Input 10 // Example switch { C0 = V0001 = 1 // If switch is on C1 = V0002 = 0 // If output is disabled, no repeat IF C0 AND C1 // If I turn on the switch { V0002 = 1 // Output is enabled V0003 = TIMER 0 ,-1 ,30 ,// 3 sec countdown } } Var 0002, Link IOCARD_OUT, Output 10 // Example led Var 0003 // Variable for counter { IF V0003 = 0 // If countdown has finished { V0003 = 1 // Prepare next countdown V0002 = 0 // Turn off the led } }
23/10/2004 Introduction to SIOC
Var 0012, Value 0 // Read IAS { V0007 = V0003 V0100 = TIMER 99999 ,0 ,50 // Start timer V0101 = TIMER 99999 ,0 ,5 }
Here we start two timers. As the variable doesn t timers. change, timers will never reach 99999, so they timers. are infinite timers. Another technique is to assign a value to the own timer variable from inside the timer. This will not start an event if the variable is a Subroutine type. This way when the variable reaches the final timer value, it will stop
23/10/2004
Introduction to SIOC
When using displays card II, we can show II, special characters. It s necessary to load special values in the variable as follows:
-999999 = -999998 = -999997 = -999996 = -999995 = -999994 = Display off Display shows Display shows Display shows Display shows Display shows
23/10/2004
Introduction to SIOC
Infinite loops
There is a possibility that our program starts an infinite loop, loop, so we must be cautions with the assignments we do.
Var 0001, Value 1 { V0002 = V0001 * -1 } Var 0002 { V0001 = V0002 }
23/10/2004
Introduction to SIOC
Concurrent processes
We must be cautious when programming complex scripts because SIOC work with concurrent processes. processes. Concurrent processes are two processes working in parallel (due to TIMERS), so if we are working with the same variable in two different processes we can obtain unexpected results.
23/10/2004
Introduction to SIOC
Power of SIOC
The SIOC system can be highly powerful. The system is managed as a virtual neuronal network, network, changing the general state depending on external or internal changes. The capacity of communication using SIOC enables the parallel proccessing so we can connect several computers in cascade.
23/10/2004
Introduction to SIOC
SIOCSIOC2
SIOCSIOC3
SIOCSIOC4
...
SIOCSIOC5
SIOCSIOC6
SIOC net
23/10/2004 Introduction to SIOC
The end
23/10/2004
Introduction to SIOC
http://www.opencockpits.com