670 likes | 1.09k Views
Introduction to SIOC By Manuel Vélez (Translation by Manuel Hdez-Peña). 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). .
E N D
Introduction to SIOC By Manuel Vélez (Translation by Manuel Hdez-Peña) 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). Introduction to SIOC
SIOC structure SIOC IOCP CLIENTE module IOCP SERVER SIOC Language interface FSUIPC CLIENT module Link with IOCards module Introduction to SIOC
SIOC <-> IOCP • 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. Introduction to SIOC
INPUTS - Joystick - Keyboard… OUTPUTS - Virtual landscape - Sound, gauges… The Flight Simulator Flight Simulator Simulation internal variables Simulation process X times per second Introduction to SIOC
IOCP Server IOCP vars INPUTS - Joystick - Keyboard… OUTPUTS - Virtual landscape - Sound, gauges… Linking to flight simulator Flight Simulator Simulation proccess Simulation internal variables Introduction to SIOC
IOCP Server IOCP vars Linking to flight simulator IOCP Client Flight Simulator Simulation internal variables IOCP Client IOCP Client TCP/IP network Introduction to SIOC
How IOCP works IOCP Client - 1 IOCP Server IOCP vars #0000 = 1 #0000 = 9 TCP/IP connection #0001 = 0 #0002 = 11 #0002 = 23 I want to know about #2 y #4 #0003 = 8 #0004 = 0 #2=23, #4=0 #2=11 #9999 = 1 Client-1 Var #0002 Var #0004 Client-1 Var #0002 Var #0004 Introduction to SIOC
IOCP vs FSUIPC • IOCP is faster because: • The client doesn’t ask for information constantly. • There’s no need of additional software to connect remotely. • IOCP is more efficient because: • Only the required information is sent. • If information doesn’t change, nothing is sent. Introduction to SIOC
System based on events • 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
Scripts execution due to events Associated script IOCP variable SIOC SIOC Module Iocards, IOCP or FSUIPC A change happens Introduction to SIOC
Events triggered from scripts (1) Associated script IOCP variable SIOC SIOC Module Iocards, IOCP or FSUIPC Change Introduction to SIOC
Events triggered from scripts (2) Associated script IOCP variable SIOC Introduction to SIOC
Diagram: SIOC and other elements connection Introduction to SIOC
SIOC – The golden rule • SIOC only run a script associated to a variable IF THIS VARIABLE CHANGES ITS VALUE. • The only exception is in the case of special variables named SUBROUTINES, that run the associated script EVERY TIME they take part in an assignment or when the CALL command is executed. Introduction to SIOC
SIOC software • There are 2 programs and one configuration file: • Config_SIOC.exe: to define scripts. • SIOC.exe: SIOC core. • SIOC.ini: configuration file. Introduction to SIOC
SIOC.INI • SIOC.INI file configures each SIOC module: IOCP CLIENT module IOCP SERVER SIOC Language interface FSUIPC CLIENT module IOCards linking module Introduction to SIOC
IOCP CLIENT module [ Desactivar el módulo cliente IOCP ] [ Disable IOCP client module ] IOCPclient_disable=yes [ IP del servidor donde debe de conectar el cliente ] [ IOCP client host name ] IOCPclient_host=localhost [ Puerto de envio del protocolo IOCP cliente ] [ IOCP client port ] IOCPclient_port=8090 Introduction to SIOC
SIOC.INI IOCP CLIENT module IOCP SERVER SIOC Language interface FSUIPC CLIENT module IOCards linking module Introduction to SIOC
FSUIPC CLIENT module [ Desabilitar lectura de las FSUIPC ] [ FSUIPC disable mode yes/no ] FSUipcdisable=No [ Refresco recepción FSUIPC ] [ FSUIPC refresh ] FSUipcRefresh=100 Introduction to SIOC
SIOC.INI IOCP CLIENT module IOCP SERVER SIOC Language interface FSUIPC CLIENT module IOCards linking module Introduction to SIOC
IOCards linking module USB=no MUSB=No deviceUSB=2048 USB_AD=0 Port=$0378 FullCompatible=No NCards=1 Expansion=No simulator=No MasterRefresh=10 Introduction to SIOC
SIOC.INI IOCP CLIENT module IOCP SERVER SIOC Language interface FSUIPC CLIENT module IOCards linking module Introduction to SIOC
IOCP server [ Puerto del servidor IOCP ] [ IOCP port ] IOCP_port=8092 [ Tiempo de respuesta máximo de los paquetes IOCP ] [ IOCP Timeout ] IOCP_timeout=4000 Introduction to SIOC
SIOC scriptslanguage // ***************************************************************************** // * Config_SIOC ver 1.8 Beta - By Manolo Vélez - www.opencockpits.com // ***************************************************************************** // * FileName : sioc.txt // * Date : 21/10/2004 Var 0001, Link FSUIPC_IN, Offset $07F2, Length 2 { C0 = TESTBIT V0001 ,15 IF C0 { L0 = 65536 - V0001 V0002 = L0 * -1 } ELSE { V0002 = V0001 } } Var 0002 // Real value for V/S Introduction to SIOC
SIOC scripts language • Variables definition language. Each SIOC variable and its attributes are defined depending on its LINK. • Commands execution language. Functions, assignments, conditions and other types of commands executed in sequence. Introduction to SIOC
Defining variables in 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. Introduction to SIOC
Types of LINKS Module LINK definition Description FSUIPC module FSUIPC_OUT Sends data to FSUIPC offsets. FSUIPC_IN Receives data from FSUIPC offsets. IOCP Client module IOCP Sends and receives IOCP variables data. IOCARD_SW Works with IOCards switches (inputs). IOCards module IOCARD_OUT Turns on/off IOCards outputs. IOCARD_DISPLAY Sends data to IOCards displays. IOCARD_ENCODER Receives data from IOCards encoders. IOCARD_ANALOGIC Receives data from IOCards analog inputs. IOCARD_SERVO Moves IOCards servomotors. IOCARD_MOTOR Moves IOCards DC and stepper motors SIOC SUBRUTINE Manages a variable as a Subroutine. Introduction to SIOC
Valid ATTRIBUTES in SIOC Attribute Description Link Defines type of link for the variable Type Defines special characteristics of the element Offset IOCP remote variable number or FSUIPC offset Value Initial value for the variable Length FSUIPC offset lenght Input Initial input in the Master card that variable links to Output Initial output in the Master card that variable links to Digit First figure in the Displays card that defines a number Aceleration Encoder acceleration factor Numbers Number of figures (displays) needed by the variable PosL Left position calibration PosC Centre position calibration PosR Right position calibration Introduction to SIOC
Scripts language main characteristics • Different identifiers, variables, constants and other elements are always separated by spaces, commas, brackets or tabulators. • { and } are used to indicate different 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. Introduction to SIOC
Temporary internal variables • 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, 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. • 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 example V0001. Introduction to SIOC
SIOC variables definition using scripts language Var Number 0-9999 Attribute parameter Attribute parameter … 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 Introduction to SIOC
Linking a SIOC variable to different modules Var 0001 Defines SIOC variable 0001, ready to be used Var 0006 , Value 360 // We will store heading here 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. Introduction to SIOC
Linking a SIOC variable to different modules Var 0009 , Link IOCARD_SW, Input 25, Type P Links variable 0009 with a switch connected to IOCards. If input (switch) Changes to OFF the value will be 0, and if input changes to ON value will be 1. Var 0006 , Link IOCARD_OUT, Output 54 // Led del F/D If variable 0006 changes to 1, output 54 in IOCards will be enabled If variable 0006 changes to 0, output 54 in IOCards will be disabled Var 1387, Link IOCARD_DISPLAY, Digit 0, Numbers 3 The value in the variable will be shown on 3 displays starting at #0. If we are using negative values, we have to use one addtional display. Var 9341, Link IOCARD_ENCODER, Input 3, Aceleration 1, Type 1 Each encoder click will send a value between 1 and 1+acceleration to the variable. The encoder is connected to input 3 and the type is defined Variable value will be 0 if encoder doesn’t turn. Introduction to SIOC
Linking a SIOC variable to different modules Var 0009 , Link IOCARD_ANALOGIC, Input #2, PosL 1, PosC 127, PosR 255 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. Introduction to SIOC
Defining a script associated to a SIOC variable Var Number 0-9999 Attribute parameter Attribute parameter … { Command parameters Command parameters . . . } Example : Var 0001, Link FSUIPC_IN, Offset $07F2, Length 2 { V0002 = V0001 + 1 CALL = V9999 L1 = V0001 * 1.35 L1 = ROUND L1 } Introduction to SIOC
Associated scripts execution SIOC scripts manager SIOC IOCP server Introduction to SIOC
Allowed COMMANDS in SIOC Command Description Assignment With this command we can assign values or calculation to the different SIOC variables. Function Different functions used with different SIOC variables CALL Lets run a script associated to a SUBROUTINE type variable, even send it a parameter. IF condition Run related commans only if the condition is true ELSE condition Part of an IF condition, lets run commands when the IF condition is false. Introduction to SIOC
Allowed OPERATORS in SIOC Operator Description + Adds two variables or constants - Subtracts two variables or constants * Multiplies two variables or constants / Divides two variables or constants AND Logic operation, or AND condition OR 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 Variable Variable Variable = Operator Constant Constant Examples: { V0002 = V0008 * 3.14 L2 = 3.8673 L1 = V0001 AND 128 C1 = L1 < 5 } Introduction to SIOC
FUNCTIONS allowed in SIOC Funtion Description Round Rounds the value to the closest integer Trunc Takes only the integer part from a variable Timer Programs periodic events using a chrono SetBit Sets specific bit in a variable ClearBit Clears specific bit in a variable TestBit Checks if a specific bit is set Not Inverts the value of a boolean variable (C0, C1 or C2) Rotate Does cyclical increases/decreases ToBCD Converts to BCD a decimal value FromBCD Converts to decimal a BCD value Toggle Makes a toggle function with a specific bit in a variable Abs Changes to absolute value the value of a variable Introduction to SIOC
FUNCTIONS definitions Function parameter1 parameter2 parameter3 Variable = 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 } Introduction to SIOC
SIOC functions Variable=Roundparameter1 Rounds the value to the closest integer. Parameter1: Variable, real or integer constant. Variable=Truncparameter1 Takes only the integer part from a variable (converts the decimal value to integer). Parameter1 : Variable, real or integer constant. Variable=SetBitparameter1 Sets to 1 the variable bit indicated in parameter. Parameter1 : Variable, real or integer constant. Introduction to SIOC
SIOC functions Variable=ClearBitparameter1 Sets to 0 the variable bit indicated in parameter. Parameter1 : Variable, real or integer constant. Variable=Toggleparameter1 Makes a toggle (set to 1 then back to 0) the variable bit indicated in the parameter Parameter1 : Variable, real or integer constant. Variable=ToBCDparameter1 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. Introduction to SIOC
SIOC functions Variable=Absparameter1 Assigns to variable the absolute value (positive) defined in parameter. Parameter1 : Variable, real or integer constant. Variable=FromBCDparameter1 Converts the value in parameter1 from BCD to decimal and assigns it to the variable. Parameter1 : Variable, real or integer constant. Variable=TestBitparameter1 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. Introduction to SIOC
SIOC functions Variable=Notparameter1 Assigns to the boolean variable the opposite value defined in parameter1. Parámetro1 : Boolean variable. Variable=Rotateparameter1 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 Introduction to SIOC
SIOC functions Variable=Timerparameter1 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). Introduction to SIOC
V0003 V0003 V0003 { script } { script } { script } TIMER function V0003 = Timer 3,1,10 1 sec 1 sec 1 sec V0003=0 V0003=1 V0003=2 V0003=3 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 } Introduction to SIOC
Commands: IF and ELSE conditions IF { commands } Condition 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. Introduction to SIOC