Jack,
As you have the script, there is no event to cause the commands to be run.
Jim.
Printable View
Jack,
As you have the script, there is no event to cause the commands to be run.
Jim.
Oh well, I'll see how it goes.
Just need to set up SIOC.ini at the moment, look at prev post.
Hi Jack,
There is no Value 0000 "event" in your SIOC script! You have to add an Attribute value, e.g. Value 0
This is described in my howto about initialisation constructs http://www.lekseecon.nl/howto.html#init . You must have missed it.
Another thing that you do not handle is the scaling of the IAS value. In FSUIPC the IAS value is times 128. So you have to divide by 128 first before doing any other mathematics...
Nico
Okay Nico, I MAY try that, but this doesn't explain why Rob's scripts seem to work okay for him without that?
No, you MUST do that otherwise that init statement ( &servo4 = 250 ) is not executed at start up. BTW: Missing that statement may not be a problem at all because right after programm start the servo will be controlled by the IAS value from the FSUIPC offset, so you MAY even get rid of the Var 0000 completely.
But IF you need an init statement in Var 0, then you MUST give Var 0 an Attribute value.
I am not aware of Rob's script (was not that sent to you be email?), but it might be because of the reason I explained above.
I'm only explaining SIOC theory here.
Nico
Okay, I will try and implement a value then.
Rob may have sent me a script but I have received nothing by email, not sure what happened there (he DID send some by PM though).
Here is a copy of my multiple servo set-up, also you will notice i don't have overlimits in my code because of this. A decent servo will NOT burn out if is driven to the stops. It is designed to go from stop to stop. If they did then allot of RC planes would crash. What they won't take well is binding/overloading from excessive workload or bad signal interpretation. I burnt up a couple of cheap servo's awile back but NEVER a good one. Jut my .02 :)
Code:// *****************************************************************************
// * Config_SIOC ver 3.7B1 - By Manolo Vélez - www.opencockpits.com
// *****************************************************************************
// * FileName : sioc.txt
// * Date : 7/4/2010
Var 0000, Value 0
{
&VSI = 612
&EngN1servo = 345
&Eng3N1servo = 346
&eng3N2servo = 345
&Eng2N2servo = 345
&egt1servo = 340
&servo1 = 100
&servo4 = 22
&servo5 = 335
&servo3 = 850
&servo6 = 335
&servo2 = 945
}
Var 0010, Link FSUIPC_IN, Offset $02C8, Length 4, Type 1 // Vertical Speed
{
L0 = V0010 * 0.7895 // FSUIPC conversion, L0=VS
L0 = ABS L0 // L0 not signed
L2 = L0
IF L0 <= 1000 // First sector
{
L1 = L2 * 0.15 // (150 steps/1000 values) = 0.15
}
ELSE // Is a greater value
{
L2 = L0 - 1000 // L2 only have values for next sector
IF L0 <= 2000 // Second sector
{
L1 = L2 * 0.1 // (100 steps / 1000 values) = 0.1
L1 = L1 + 125 // Add steps of others sectors
}
ELSE
{
L2 = L0 - 2000 // L2 only have values for next sector
IF L0 <= 4000 // 3. Sector
{
L1 = L2 * 0.08 // ( 160 / 2000) =0.08
L1 = L1 + 225 // Add steps of others sectors 150+100
}
ELSE
{
L2 = L0 - 4000 // L2 only next sector (Value-1000-1000-200
IF L0 <= 6000 // 4. Sector
{
L1 = L2 * 0.05 // ( 100 / 2000) =0.05
L1 = L1 + 410 // Add steps of others sectors 150+100+160
}
ELSE // Out of range
{
L1 = 510 // Max. position
}
}
}
}
IF V0010 < 0 // if vs is negative
{
&VSI = 612 + L1 // subctract from center
}
ELSE
{
&VSI = 612 - L1 // else add to center
}
}
Var 0001, name VSI, Link USB_SERVOS, Output 1, PosL 170, PosC 612, PosR 1023, Type 2 // vsiservo
Var 0002, name EngN1servo, Link USB_SERVOS, Output 2, PosL 345, PosC 647, PosR 950, Type 2 // N1 Servo
Var 0003, name egt1servo, Link USB_SERVOS, Output 3, PosL 1, PosC 550, PosR 1023, Type 2 // EGT Gauge
Var 0004, name eng3N2servo, Link USB_SERVOS, Output 4, PosL 345, PosC 647, PosR 950, Type 2
Var 0005, name Eng3N1servo, Link USB_SERVOS, Output 5, PosL 345, PosC 647, PosR 950, Type 2
Var 0006, name Eng2N2servo, Link USB_SERVOS, Output 6, PosL 345, PosC 647, PosR 950, Type 2
Var 0007, name eng3N2, Link FSUIPC_INOUT, Offset $09C6, Length 2 // N2 rpm for eng 3
{
L0 = &eng3N2 * 0.00606
L1 = L0 * 5.5
L2 = 345 + L1
&eng3N2servo = L2
}
Var 0011, name eng1N1, Link FSUIPC_IN, Offset $0898, Length 2
{
L0 = &eng1N1 * 0.00606
L1 = L0 * 5.5
L2 = 345 + L1
&EngN1servo = L2
CALL &ConfigWarn1
}
Var 0012, name Eng1Egt, Link FSUIPC_IN, Offset $08BE, Length 2 // Eng 1 EGT
{
L0 = &Eng1Egt * 0.05249023 // 16384=860C
L1 = L0 * 0.522727
L2 = L1 + 310
&egt1servo = L2
}
Var 0013, name relay1, Link USB_RELAYS, Output 1 // AP Power
Var 0014, name APMaster, Link FSUIPC_INOUT, Offset $0278, Length 2 // Status of AP master switch
{
IF &APMaster = 1
{
&relay1 = 1
}
ELSE
{
&relay1 = 0
}
}
Var 0015, name Eng1N2, Link FSUIPC_INOUT, Offset $0896, Length 2
{
L0 = &Eng1N2 * 0.00606
L1 = L0 * 5.5
L2 = 345 + L1
&Eng2N2servo = L2
}
Var 0016, name No2N1, Link FSUIPC_INOUT, Offset $0930, Length 2
{
L0 = &No2N1 * 0.00606
L1 = L0 * 5.5
L2 = 345 + L1
}
Var 0017, name eng3N1, Link FSUIPC_INOUT, Offset $09C8, Length 2
{
L0 = &eng3N1 * 0.00606
L1 = L0 * 5.5
L2 = 345 + L1
&Eng3N1servo = L2
}
Var 0018, name LeFlapyellow, Link USB_RELAYS, Output 2 // Leading Edge Flaps in transit
Var 0019, name LeFlapGrn, Link USB_RELAYS, Output 3 // Leading Edge Flaps Extended
Var 0020, name Eng1RevInd, Link USB_RELAYS, Output 4 // Reverser operating Engine 1
Var 0021, name Warning, Link USB_RELAYS, Output 5 // Config Warning light
Var 0022, name Eng3RevInd, Link USB_RELAYS, Output 6 // Reverser operating Eng #3
Var 0023, name Eng3StartValve, Link USB_RELAYS, Output 7
Var 0025, name eng3inrev, Link FSUIPC_INOUT, Offset $227C, Length 4 // Reverse thrust position
{
IF &eng3inrev = -5
{
&Eng3RevInd = 1
}
ELSE
{
&Eng3RevInd = 0
}
}
Var 0024, name LEFlapPos, Link FSUIPC_INOUT, Offset $30E8, Length 2
{
IF &LEFlapPos < 8200
{
&LeFlapyellow = 1
}
ELSE
{
&LeFlapyellow = 0
}
IF &LEFlapPos > 8500
{
&LeFlapGrn = 1
}
ELSE
{
&LeFlapGrn = 0
}
IF &LEFlapPos = 0
{
&LeFlapyellow = 0
}
}
Var 0026, name StartValve3, Link FSUIPC_INOUT, Offset $09C2, Length 2
Var 0027, name FlapsPos, Link FSUIPC_INOUT, Offset $0BDC, Length 2
Var 0028, name AConGnd, Link FSUIPC_INOUT, Offset $0366, Length 2
Var 0029, name ElevTrinInd, Link FSUIPC_INOUT, Offset $0BC2, Length 2
{
CALL &ConfigWarn1
}
Var 0030, name GearLvr, Link FSUIPC_INOUT, Offset $0BE8, Length 4
{
CALL &ConfigWarn1
}
Var 0031, name eng1inRev, Link FSUIPC_INOUT, Offset $207C, Length 4
{
IF &eng1inRev = -5
{
&Eng1RevInd = 1
}
ELSE
{
&Eng1RevInd = 0
}
}
Var 0032, name ConfigWarn1, Link SUBRUTINE
{
IF &AConGnd = 1
{
IF &GearLvr = 0
{
&Warning = 1
}
}
IF &AConGnd = 1
{
IF &eng1N1 > 7000
{
IF &FlapsPos < 5500
{
&Warning = 1
}
}
ELSE
{
&Warning = 0
}
}
IF &AConGnd = 1
{
IF &eng1N1 > 7000
{
IF &ElevTrinInd < 2000
{
&Warning = 1
}
}
ELSE
{
&Warning = 0
}
}
}
Var 0033, name servo1, Link USB_SERVOS, Device 1, Output 1, PosL 1, PosC 550, PosR 1023, Type 2 // Eng2EGT gauge
Var 0034, name servo2, Link USB_SERVOS, Device 1, Output 2, PosL 1, PosC 511, PosR 1023, Type 2 // eng1EPR
Var 0035, name servo3, Link USB_SERVOS, Device 1, Output 3, PosL 250, PosC 640, PosR 940, Type 2 // Eng1 FuelFlow
Var 0036, name servo4, Link USB_SERVOS, Device 1, Output 4, PosL 1, PosC 550, PosR 1023, Type 2 // Eng3EGT Gauge
Var 0037, name servo5, Link USB_SERVOS, Device 1, Output 5, PosL 335, PosC 635, PosR 930, Type 2 // Eng2N2 Gauge
Var 0038, name servo6, Link USB_SERVOS, Device 1, Output 6, PosL 335, PosC 635, PosR 930, Type 2 // Eng2N1 gauge
Var 0039, name Eng2Egt, Link FSUIPC_INOUT, Offset $0956, Length 2
{
L0 = &Eng2Egt * 0.05249023 // 16384=860C
L1 = L0 * 0.522727
L2 = L1 + 275
&servo1 = L2
}
Var 0040, name Eng3Egt, Link FSUIPC_INOUT, Offset $09EE, Length 2
{
L0 = &Eng3Egt * 0.05249023 // 16384=860C
L1 = L0 * 0.522727
L2 = L1 + 335
&servo4 = L2
}
Var 0041, name Eng2N2, Link FSUIPC_INOUT, Offset $092E, Length 2
{
L0 = &Eng2N2 * 0.00606
L1 = L0 * 5.5
L2 = 335 + L1
&servo5 = L2
}
Var 0042, name Eng2N1, Link FSUIPC_INOUT, Offset $0930, Length 2
{
L0 = &Eng2N1 * 0.00606
L1 = L0 * 5.5
L2 = 335 + L1
&servo6 = L2
}
Var 0043, name Eng1EPR, Link FSUIPC_INOUT, Offset $0898, Length 2
{
L0 = &Eng1EPR * 0.0001355
L1 = L0 * 415.625
L2 = 1325.625 - L1
L0 = L2
IF L2 > 910
{
L0 = 910
}
&servo2 = L0
}
Var 0044, name warning, static, Link IOCP, Offset 2, Value 0
{
IF &warning = 1
{
&Warning = 1
}
}
Var 0045, name FuelFLow, Link FSUIPC_INOUT, Offset $0918, Length 8, Numbers 1, Type 1
{
L0 = &FuelFLow / 10
L1 = 0.1279069 * L0
L2 = 939.83 - L1
&servo3 = L2
}
Var 0046, name radioalt, Link FSUIPC_INOUT, Offset $31E4, Length 4 // Radio Altimeter in meters
{
L0 = &radioalt / 65536
L0 = L0 * 3.2808399
L2 = TRUNC L0
L0 = L2
&RAtemp = L2
CALL V0103
IF L0 <= 490
{
L0 = L2 * -0.98 // 455 steps/500 ft
L1 = L0 + 945
}
C0 = L0 > 500
C1 = L0 < 1000
IF C0 AND C1
{
L0 = L2 * -0.134
L1 = L0 + 560
}
C0 = L0 > 1001
C1 = L0 < 1500
IF C0 AND C1
{
L0 = L2 * -0.07
L1 = L0 + 495
}
C0 = L0 > 1502
C1 = L0 < 2600
IF C0 AND C1
{
L0 = L2 * -0.04
L1 = L0 + 445
}
IF L0 > 2605
{
&servo2 = 325
}
}
Var 0047, name DH, Link FSUIPC_INOUT, Offset $3428, Length 8, Numbers 1 // Deceision Height
{
L0 = &DH / 3.045
&DHTemp = TRUNC L0
}
Var 0100, name DHTemp
Var 0101, name RAtemp
Var 0102
Var 0103, Link SUBRUTINE // DH Alert logic
{
L0 = &DHTemp - 25
L1 = &DHTemp + 25
C0 = L0 < &RAtemp
C1 = &RAtemp < L1
IF C0 AND C1
{
&Eng3RevInd = 1
}
ELSE
{
&Eng3RevInd = 0
}
}
Hi Rob,
Thanks for your example. It will show Jack how to use Var 0.
Just a tip: in your script you are using (at several places) a Var definition linked to a FSUIPC_INOUT offset. However, in your program you only use the IN part (never the OUT part). It would be better to replace all these FSUIPC_INOUT's by FSUIPC_IN's. This will better express what you are doing and it will result in a simpler execution by SIOC, costing less cpu cycles.
best regards,
Nico