Jump to content
The simFlight Network Forums

Recommended Posts

Posted
On 10/18/2019 at 10:35 PM, aua668 said:

Hi,

In the included ZIP-File I added two files: One is a definition file for the XML-functions I use with my hardware. The numbers I got from the provided utility, which calculates the hash value for the specific variable.

The second file is a sample module, which toggles the TOGA button. For every button I have such a routine. In a master file, which is automatically started, I start all my modules for the Q400  with ipc.runlua("<<<modulename>>>")

For reading values from the XML interface I use one single module transferring all the necessary XML-Values into global variables, which later I can use in different modules. The core of the routine can be seen here:


-- initialize XML interface to HW

function readXMLIF ( pFunc )						-- function to read specific IF value

	local lMJC_readCode
	local lMJC_readValue
	local lCount = 0

	-- select function by hash code
	ipc.writeLvar("L:MJC_VAR_READ_CODE", pFunc)
	ipc.sleep(5)
	
	-- read results
	lMJC_readCode = ipc.readLvar("L:MJC_VAR_READ_CODE")
	
	-- wait if not ready
	while lMJC_readCode ~= 9991999 and lMJC_readCode ~= 9992999 and lCount < 20
	do
		lCount = lCount + 1
		ipc.sleep(10)
		lMJC_readCode = ipc.readLvar("L:MJC_VAR_READ_CODE")
	end

	if lMJC_readCode == 9991999 then
		lMJC_readValue = ipc.readLvar("L:MJC_VAR_READ_VALUE")	-- success
	else
		lMJC_readValue = 9992999								-- variable not found
		ipc.log("Error reading MJC interface for function "..pFunc)
	end
	
	return lMJC_readValue		-- return value or error

end


function readAllXMLValues()		-- synchronize global variables from Q400 values

	-- autopilot
	ipc.set ("Q400_YD_LIGHT" , readXMLIF ( 31461 ) )			-- AFCS_->outputs.YD_engaged
	ipc.set ("Q400_AP_LIGHT" , readXMLIF ( 31281 ) )			-- AFCS_->outputs.AP_engaged

	-- glare shield
	ipc.set ("Q400_CAUTION" , readXMLIF ( 143090 ) )			-- CautionWarning_->outs_.master_caution_light_blinking
	ipc.set ("Q400_WARNING" , readXMLIF ( 143112 ) )			-- CautionWarning_->outs_.master_warning_light_blinking

	-- fuel
	ipc.set ("Q400_AUX_FUEL" , readXMLIF ( 59590 ) )			-- Fuel_->systems[0].AuxFuelPumplight

	-- Autofeather
	ipc.set ("Q400_AUTO_FEATHER" , readXMLIF ( 41047 ) )		-- PCU_->AutofeatherSelectLight

	-- Hydraulic
	ipc.set ("Q400_HYDRAULIC" , readXMLIF ( 91735 ) )			-- Hydraulical_->outs_.stby_hydr_ON_indicator

end

while 0 < 1 do
	readAllXMLValues()
	ipc.sleep(50)
end

The reason, why I read all the values at once in one single module is, that the interface always fetches one single value at one time. If you would call it from several independent threads, the calls could interfere. This is a limitation of the current XML interface. The training edition will include a more sophisticated interface.

Luckily most of the values can be read directly out of Lvars and you can avoid the XML-Interface. So a simple ipc.readLvar("<<<variable name>>>") will provide you the value directly.

If you have no programming skills, it's hard. Maybe you find some student nearby, which helps you with that part. You can offer him later some simulator hours 😉

Rgds
Reinhard

 

Hi Reinhard,

just one question: when you refer to ipc.readLvar("<<<variable name>>>") is "<<<variable name>>> the variable name as is called in variablesmap.xlsx spreadsheet? Example: ipc.readLvar("AFCS_->outputs.AP_engaged")

Thanks,

Alessandro

Posted

Hi,

No - ipc.readLvar() function reads the Lvars like L:OHD_AC_CTRL_GEN1_SW. here is a list of the variables:

L:CPT_CONS_LDG_FLAP_INH_GUARD = 0
L:EFIS_ADC_SRC = 0
L:EFIS_ATTHDG_SRC = 0
L:ENG_LEFT_DOOR_POS = 0
L:ENG_RIGHT_DOOR_POS = 0
L:FC_AILERON_LEFT = -0
L:FC_AILERON_RIGHT = 0
L:FC_COLUMN_LEFT = 50.015181303024
L:FC_COLUMN_RIGHT = 50.015181303024
L:FC_ELEVATOR_LEFT = -14.99771105028
L:FC_ELEVATOR_RIGHT = -14.998748369733
L:FC_FLAPS_LEFT = 0
L:FC_FLAPS_RIGHT = 0
L:FC_GEAR_DOOR_POS_LEFT = 0.5
L:FC_GEAR_DOOR_POS_NOSE = 0.8
L:FC_GEAR_DOOR_POS_RIGHT = 0.5
L:FC_GEAR_LEFT_STRUT = 83.345882343581
L:FC_GEAR_NOSE = 100
L:FC_GEAR_NOSE_STRUT = 85.00757313897
L:FC_GEAR_POS_LEFT = 180
L:FC_GEAR_POS_RIGHT = 180
L:FC_GEAR_RIGHT_STRUT = 83.335765407711
L:FC_NOSE_WHEEL_STEERING = 100
L:FC_PEDALS_LEFT = 49.999848008156
L:FC_PEDALS_RIGHT = 49.999848008156
L:FC_RUDDER = -0
L:FC_SPOILER_LI = 0
L:FC_SPOILER_LO = 0
L:FC_SPOILER_RI = 0
L:FC_SPOILER_RO = 0
L:FC_WHEEL_LEFT = 50.414788722992
L:FC_WHEEL_RIGHT = 50.414788722992
L:Filter = 0
L:FSDT_VAR_Frozen = 0
L:GS_ALTSEL_KNOB_ANGLE = 0
L:GS_ANTISKID_SW = 0
L:GS_CLK1_ARROW_POS = 0
L:GS_CLK1_SELECTOR_POS = 2
L:GS_CLK2_ARROW_POS = 0
L:GS_CLK2_SELECTOR_POS = 2
L:GS_CRS1_KNOB_ANGLE = 100
L:GS_CRS2_KNOB_ANGLE = 100
L:GS_HDG1_KNOB_ANGLE = 0
L:GS_HDG2_KNOB_ANGLE = 0
L:GS_NAV1_KNOB_ANGLE = 14
L:GS_NAV2_KNOB_ANGLE = 21
L:GS_PITCH_WHEEL_ANGLE = 50
L:GS_SPOILERS_SW = 1
L:LastLeftPropPos = 0
L:LastRightPropPos = 0
L:LayerAirports = 0
L:LayerAirspaces = 0
L:LayerCompass = 0
L:LayerILSs = 0
L:LayerIntersections = 0
L:LayerLowAirways = 0
L:LayerNDBs = 0
L:LayerRangeRings = 0
L:LayerTags = 0
L:LayerTerrain = 0
L:LayerVORs = 0
L:MAINPANEL_PUSHBUTTONS = 0
L:MAIN_ALTERNATE_STATIC_POS = 0
L:MAIN_GEAR_HANDLE_POS = 1
L:MAIN_GEAR_HORN_SW = 0
L:MAIN_GEAR_LOCK_POS = 0
L:MAIN_GPWS_FLAP_SLCTR_POS = 0
L:MAIN_INDX1_DH_KNOB_ANGLE = 53
L:MAIN_INDX1_DH_MDA_SW = 0
L:MAIN_INDX1_QNH_KNOB_ANGLE = 59
L:MAIN_INDX1_SPDBUG_KNOB_ANGLE = 67
L:MAIN_INDX2_DH_KNOB_ANGLE = 42
L:MAIN_INDX2_DH_MDA_SW = 0
L:MAIN_INDX2_QNH_KNOB_ANGLE = 79
L:MAIN_INDX2_SPDBUG_KNOB_ANGLE = 69
L:MAIN_STBY_QNH_KNOB_ANGLE = 0
L:MapInit = 0
L:map_ZoomFactor = 0
L:map_ZoomStep = 0
L:MJC_VAR_READ_CODE = 9991999
L:MJC_VAR_READ_VALUE = 0
L:MJC_VAR_WRITE_CODE = 9991999
L:MJC_VAR_WRITE_VALUE = 19400
L:OBS_ADF1_VOL_KNOB = 0
L:OBS_ADF2_VOL_KNOB = 0
L:OBS_AUX1_PB = 0
L:OBS_AUX1_VOL_KNOB = 0
L:OBS_AUX2_PB = 0
L:OBS_AUX2_VOL_KNOB = 0
L:OBS_BOOM_MASK_SW = 0
L:OBS_DME1_VOL_KNOB = 0
L:OBS_DME2_VOL_KNOB = 0
L:OBS_HF_PB = 0
L:OBS_HF_VOL_KNOB = 0
L:OBS_INT_PB = 0
L:OBS_INT_RAD_SW = 0
L:OBS_INT_VOL_KNOB = 0
L:OBS_MKR_VOL_KNOB = 0
L:OBS_VHF1_PB = 0
L:OBS_VHF1_VOL_KNOB = 0
L:OBS_VHF2_PB = 0
L:OBS_VHF2_VOL_KNOB = 0
L:OBS_VOR1_VOL_KNOB = 0
L:OBS_VOR2_VOL_KNOB = 0
L:OBS_VOR_MLS_SW = 0
L:OHD_ACONDPNL_DUCTTEMP_IND_ANGLE = -15
L:OHD_AC_CTRL_EXT_PWR_SW = 0
L:OHD_AC_CTRL_GEN1_SW = 0
L:OHD_AC_CTRL_GEN2_SW = 0
L:OHD_AICE_AFRAME_MAN_KNOB_ANGLE = 0
L:OHD_AICE_AFRAME_MODE_KNOB_ANGLE = 0
L:OHD_AICE_AFRAME_PROPTIMER_KNOB_ANGLE = 0
L:OHD_AICE_BOOT_AIR_SW = 0
L:OHD_AICE_DOOR_PUSHBUTTONS = 0
L:OHD_AICE_ENG_INTAKE_REF_SW = 0
L:OHD_AICE_PITOT_1_SW = 0
L:OHD_AICE_PITOT_2_SW = 0
L:OHD_AICE_PITOT_STBY_SW = 0
L:OHD_AIR_COND_BLEED1_SW = 0
L:OHD_AIR_COND_BLEED2_SW = 0
L:OHD_AIR_COND_BLEED_KNOB = -1
L:OHD_AIR_COND_GAUGE_KNOB = 20
L:OHD_AIR_COND_PACKS1_SW = 0
L:OHD_AIR_COND_PACKS2_SW = 0
L:OHD_AIR_COND_RECIRC_SW = 0
L:OHD_AIR_COND_TEMP_CABIN_KNOB = 49
L:OHD_AIR_COND_TEMP_FCOMP_KNOB = 49
L:OHD_APU_PUSHBUTTONS = 0
L:OHD_CAB_ALT_FWD_OUTFLOW_KNOB = 0
L:OHD_CAB_ALT_LDG_ALT_KNOB = 52
L:OHD_CAB_ALT_MODE_SW = 0
L:OHD_CAB_MAN_OFF_SW = 0
L:OHD_DC_CNTRL_PNL_AUX_SW = 0
L:OHD_DC_CNTRL_PNL_EXTPWR_SW = 0
L:OHD_DC_CNTRL_PNL_GEN1_SW = 0
L:OHD_DC_CNTRL_PNL_GEN2_SW = 0
L:OHD_DC_CNTRL_PNL_MAIN_SW = 0
L:OHD_DC_CNTRL_PNL_MASTER_SW = 0
L:OHD_DC_CNTRL_PNL_RESET_SW = 0
L:OHD_DC_CNTRL_PNL_STB_SW = 0
L:OHD_DC_CNTRL_PNL_TIE_SW = 0
L:OHD_EMER_LT_ARM_SW = 1
L:OHD_EMER_LT_CAUT_BRT_SW = 0
L:OHD_EMER_LT_CAUT_TEST_SW = 0
L:OHD_EMER_LT_FASTEN_BELTS_SW = 0
L:OHD_EMER_LT_NO_SMOKING_SW = 1
L:OHD_ENGSTART_IGN1_KNOB_SW = 1
L:OHD_ENGSTART_IGN2_KNOB_SW = 1
L:OHD_ENGSTART_SELECT_SW = 0
L:OHD_ENG_START_BUTTON = 0
L:OHD_EXT_LIGHTS_L_APPR_SW = 0
L:OHD_EXT_LIGHTS_L_FLARE_SW = 0
L:OHD_EXT_LIGHTS_L_TAXI_SW = 0
L:OHD_EXT_LT_ACOL_SW = 0
L:OHD_EXT_LT_LOGO_SW = 0
L:OHD_EXT_LT_POS_SW = 1
L:OHD_EXT_LT_WING_SW = 0
L:OHD_FDR_GNDTEST_SW = 0
L:OHD_FDR_MODE_SW = 1
L:OHD_FIRE_BAGGAGE_TEST_SW = 0
L:OHD_FIRE_ENG1_EXTH_SW = 0
L:OHD_FIRE_ENG1_PULL_HANDLE = 0
L:OHD_FIRE_ENG2_EXTH_SW = 0
L:OHD_FIRE_ENG2_PULL_HANDLE = 0
L:OHD_FIRE_TEST_DETECTION_SW = 0
L:OHD_PFD_ALT_UNITS_SW = 0
L:OHD_PNL_LIGHTS_CENTER_KNOB_ANGLE = 0
L:OHD_PNL_LIGHTS_DOME_SW = 0
L:OHD_PNL_LIGHTS_ENGPNL_KNOB_ANGLE = 0
L:OHD_PNL_LIGHTS_GLARESHIELD_KNOB_ANGLE = 0
L:OHD_PNL_LIGHTS_OVHD_KNOB_ANGLE = 0
L:OHD_PNL_LIGHTS_STORM_SW = 0
L:OHD_PRESSCOMP_CABALT_IND_ANGLE = 7.15
L:OHD_PRESSCOMP_DIFF_IND_ANGLE = 1.0562358197914e-005
L:OHD_PRESSCOMP_RATE_IND_ANGLE = 50
L:OHD_PRESSPNL_LDGALT_IND_ANGLE = 37.136116
L:OHD_WDO_HEAT_SW = 0
L:OHD_WSHIELD_HEAT_KNOB_ANGLE = 0
L:OHD_WSHIELD_WIPER_KNOB_ANGLE = 1
L:OVH_GUARD_EXT_APU = 0
L:OVH_GUARD_EXT_BGAFT = 0
L:OVH_GUARD_EXT_BGFWD = 0
L:PEDESTAL_PUSHBUTTONS = 0
L:PED_ALT_FTHR_ONE_GUARD = 0
L:PED_ALT_FTHR_TWO_GUARD = 0
L:PED_COM1_FREQ_HI = 50
L:PED_COM1_FREQ_LOW = 40
L:PED_COM1_MODE_KNOB = 0
L:PED_CPT_MFD_BRT_KNOB = 56.250858319982
L:PED_CPT_NAV_SRC_LFT_KNOB = 4
L:PED_CPT_NAV_SRC_RGT_KNOB = 0
L:PED_CPT_PFD_BRT_KNOB = 56.250858319982
L:PED_CPT_RANGE_KNOB = 2
L:PED_CPT_WX_BRT_KNOB = 81.251239795529
L:PED_ED_BRT = 56.250858319982
L:PED_FO_MFD_BRT_KNOB = 56.250858319982
L:PED_FO_NAV_SRC_LFT_KNOB = 4
L:PED_FO_NAV_SRC_RGT_KNOB = 0
L:PED_FO_PFD_BRT_KNOB = 56.250858319982
L:PED_FO_RANGE_KNOB = 2
L:PED_FO_WX_BRT_KNOB = 81.251239795529
L:PED_FUEL_TRANSFER_SWITCH = 0
L:PED_IRS_KNOB = 1
L:PED_MFD1_MODE = 0
L:PED_PITCH_HANDLE = 0
L:PED_ROLL_DISC_HANDLE = 0
L:PED_TRIM_AILERON_SW = 0
L:PED_TRIM_RUDDER_KNOB = 0
L:PED_WR_GAIN = 0.0016212710737955
L:PED_WR_MODE = 0
L:PED_WR_TILT = 0
L:PFD_MFD2_MODE = 1
L:PLANEHEADINGDEGREESGYRO = 0
L:PROP_LEFT_BLADES_ANGLE = 43.275265038013
L:PROP_LEFT_DISK_VISUAL_ANGLE = 0.76904296875
L:PROP_LEFT_RPM = 0
L:PROP_RIGHT_BLADES_ANGLE = 43.275265038013
L:PROP_RIGHT_DISK_VISUAL_ANGLE = 0.1495361328125
L:PROP_RIGHT_RPM = 0
L:Q400_2PILOT_HEAD = -15
L:Q400_2PILOT_POS = 0
L:Q400_AILERON_TRIM_IND_ANGLE = 0
L:Q400_ALT_LG_EXT_COVER = 0
L:Q400_ALT_LG_EXT_HANDLE = 0
L:Q400_ALT_LG_FLOOR_HANDLE = 0
L:Q400_AP_DISENGAGE_KNOB = 0
L:Q400_BEACON_SPLASH = 0
L:Q400_BIRD_STRIKE = 0
L:Q400_CAMERA_PERSPECTIVE = 1
L:Q400_COND_LEVER_1 = 0
L:Q400_COND_LEVER_2 = 0
L:Q400_CONTROL_LOCK = 100
L:Q400_DOMELIGHT = 0
L:Q400_ELEVATOR_TRIM_IND_ANGLE = 99.607843137255
L:Q400_EMER_HATCH = 0
L:Q400_FIRE = 0
L:Q400_FIRE_COCKPIT = 0
L:Q400_FLAP_POS = 0
L:Q400_FLARELIGHT = 0
L:Q400_FUELFLOW_PPH_L = 0
L:Q400_FUELFLOW_PPH_R = 0
L:Q400_FWD_WHEEL = 68.006361624844
L:Q400_GEAR_LEFT_RPM = 0
L:Q400_GEAR_LOCK_PIN_IN = 1
L:Q400_GEAR_NOSE_RPM = 0
L:Q400_GEAR_RIGHT_RPM = 0
L:Q400_GFORCE_FPS = -32.144016132336
L:Q400_GPU_VISIBLE = 1
L:Q400_HUD = 0
L:Q400_HUD_BRIGHTNESS = 100
L:Q400_ICING_LEVEL_INTAKES = 0
L:Q400_ICING_LEVEL_NO_DEICE = 0
L:Q400_ICING_LEVEL_SIDE_WINDOW = 0
L:Q400_ICING_LEVEL_TAIL = 0
L:Q400_ICING_LEVEL_WINDSHIELD = 0
L:Q400_ICING_LEVEL_WINGS = 0
L:Q400_LANDLIGHT = 0
L:Q400_LAND_LTST = 0
L:Q400_LEFT_WHEEL = 18.554237379552
L:Q400_LEVER_ANTIMIST = 0
L:Q400_LG_DNLOCK_VER_SWITCH = 0
L:Q400_LG_DN_SEL_INH_GUARD = 0
L:Q400_LG_DN_SEL_INH_SWITCH = 0
L:Q400_LIGHTTAXI = 0
L:Q400_LOW_VENT_HANDLE = 0
L:Q400_LT_FUSES_LEFT_LT = 0
L:Q400_LT_FUSES_RIGHT_LT = 0
L:Q400_LT_HALL_LT = 0
L:Q400_LT_HALL_SW = 0
L:Q400_LT_MAP_LEFT_LT = 0
L:Q400_LT_MAP_LEFT_SW = 0
L:Q400_LT_MAP_RIGHT_LT = 0
L:Q400_LT_MAP_RIGHT_SW = 0
L:Q400_LT_PILOT_LEFT_LT = 0
L:Q400_LT_PILOT_LEFT_SW = 0
L:Q400_LT_PILOT_RIGHT_LT = 0
L:Q400_LT_PILOT_RIGHT_SW = 0
L:Q400_MAN_GEAR_EXT_HANDLE = 0
L:Q400_MAN_GEAR_EXT_READY = 0
L:Q400_MIST_COPILOTWIN_LEVEL = 7
L:Q400_MIST_PILOTWIN_LEVEL = 0
L:Q400_MIST_WINDSHIELD_LEVEL = 0
L:Q400_NAV_LIGHTS = 0
L:Q400_PILOT_HEAD = 0
L:Q400_PILOT_POS = 0
L:Q400_PITOT_ISOL_VALVE_GUARD = 0
L:Q400_POWER_LEVER_1 = 46.35498046875
L:Q400_POWER_LEVER_2 = 49.69623613931
L:Q400_PROP_LEFT_RPM = 0
L:Q400_PROP_RIGHT_RPM = 0
L:Q400_RAIN_FRAMES = 0
L:Q400_RIGHT_WHEEL = 18.575972976864
L:Q400_RUDDER_TRIM_IND_ANGLE = 0
L:Q400_SIDE_RIGHT_TABLET = 0
L:Q400_SIDE_TABLET = 0
L:Q400_STEERING_TILLER = 56.628936767578
L:Q400_STROBELIGHT_DN = 0
L:Q400_STROBELIGHT_UP = 0
L:Q400_SUN_SHIELD_LEFT = 0
L:Q400_SUN_SHIELD_RIGHT = 0
L:Q400_TYRE_BLOWN_LEFT = 0
L:Q400_TYRE_BLOWN_RIGHT = 0
L:Q400_WINGLIGHT = 0
L:Q400_WIPER_ANGLE = 0
L:Q400_WIPER_RIGHT_ANGLE = 0
L:Q400_YOKE_VISIBILITY = 255
L:RADIO1_ADF1_KNOB = 0
L:RADIO1_ADF2_KNOB = 0
L:RADIO1_AUX1_KNOB = 0
L:RADIO1_AUX2_KNOB = 0
L:RADIO1_BOOM_MASK_SW = 0
L:RADIO1_CENTRAL_KNOB = 0
L:RADIO1_DME1_KNOB = 0
L:RADIO1_DME2_KNOB = 0
L:RADIO1_HF_KNOB = 0
L:RADIO1_HOT_MIC_SW = 0
L:RADIO1_MKR_KNOB = 0
L:RADIO1_NORM_EMER_SW = 0
L:RADIO1_SERV_INT_KNOB = 25.001525972044
L:RADIO1_SPKR_KNOB = 0
L:RADIO1_SRC_SELECTOR = 0
L:RADIO1_TUNE_HIGH = 23
L:RADIO1_TUNE_LOW = 67
L:RADIO1_VHF1_KNOB = 0
L:RADIO1_VHF2_KNOB = 0
L:RADIO1_VOR1_KNOB = 0
L:RADIO1_VOR2_KNOB = 0
L:RADIO2_ADF1_KNOB = 0
L:RADIO2_ADF2_KNOB = 0
L:RADIO2_AUX1_KNOB = 0
L:RADIO2_AUX2_KNOB = 0
L:RADIO2_BOOM_MASK_SW = 0
L:RADIO2_CENTRAL_KNOB = 0
L:RADIO2_DME1_KNOB = 0
L:RADIO2_DME2_KNOB = 0
L:RADIO2_HF_KNOB = 0
L:RADIO2_HOT_MIC_SW = 0
L:RADIO2_MKR_KNOB = 0
L:RADIO2_NORM_EMER_SW = 0
L:RADIO2_SERV_INT_KNOB = 25.001525972044
L:RADIO2_SPKR_KNOB = 0
L:RADIO2_SRC_SELECTOR = 0
L:RADIO2_TUNE_HIGH = 50
L:RADIO2_TUNE_LOW = 50
L:RADIO2_VHF1_KNOB = 0
L:RADIO2_VHF2_KNOB = 0
L:RADIO2_VOR1_KNOB = 0
L:RADIO2_VOR2_KNOB = 0
L:seatFO = 0
L:seatKVS = 0
L:SIDE_PNL_ADC_TEST = 0
L:SIDE_PNL_CIRC_BRK_LT = 0
L:SIDE_PNL_FLT_PNL_BRT = 0
L:SIDE_PNL_FO_CIRC_BRK_LT = 0
L:SIDE_PNL_FO_DEICE1_IND_ANGLE = 0
L:SIDE_PNL_FO_DEICE2_IND_ANGLE = 0
L:SIDE_PNL_FO_FLT_PNL_BRT = 0
L:SIDE_PNL_FO_OXYGEN_IND_ANGLE = 90
L:SIDE_PNL_INPH_XMIT = 0
L:SIDE_PNL_PROP_OSG = 0
L:SIDE_PNL_STALL_WARN_TEST = 0
L:SIDE_PNL_STEERING = 0
L:SIDE_PNL_TO_WARN = 0
L:SMOKE3STATE = 0
L:SMOKE4STATE = 0
L:SMOKE59STATE = 0
L:SPNL_FORWARD_OUTFLOW_VALVE_GUARD = 0
L:SPNL_FWD_OUTFLOW_VALVE = 0
L:VehicleObjectDetail = 0

The variables in the supplied XLS-Sheet must be handled via the XML-interface.

Rgds
Reinhard

 

 

  • 1 month later...
Posted
On 10/18/2019 at 10:35 PM, aua668 said:

Hi,

In the included ZIP-File I added two files: One is a definition file for the XML-functions I use with my hardware. The numbers I got from the provided utility, which calculates the hash value for the specific variable.

The second file is a sample module, which toggles the TOGA button. For every button I have such a routine. In a master file, which is automatically started, I start all my modules for the Q400  with ipc.runlua("<<<modulename>>>")

For reading values from the XML interface I use one single module transferring all the necessary XML-Values into global variables, which later I can use in different modules. The core of the routine can be seen here:


-- initialize XML interface to HW

function readXMLIF ( pFunc )						-- function to read specific IF value

	local lMJC_readCode
	local lMJC_readValue
	local lCount = 0

	-- select function by hash code
	ipc.writeLvar("L:MJC_VAR_READ_CODE", pFunc)
	ipc.sleep(5)
	
	-- read results
	lMJC_readCode = ipc.readLvar("L:MJC_VAR_READ_CODE")
	
	-- wait if not ready
	while lMJC_readCode ~= 9991999 and lMJC_readCode ~= 9992999 and lCount < 20
	do
		lCount = lCount + 1
		ipc.sleep(10)
		lMJC_readCode = ipc.readLvar("L:MJC_VAR_READ_CODE")
	end

	if lMJC_readCode == 9991999 then
		lMJC_readValue = ipc.readLvar("L:MJC_VAR_READ_VALUE")	-- success
	else
		lMJC_readValue = 9992999								-- variable not found
		ipc.log("Error reading MJC interface for function "..pFunc)
	end
	
	return lMJC_readValue		-- return value or error

end


function readAllXMLValues()		-- synchronize global variables from Q400 values

	-- autopilot
	ipc.set ("Q400_YD_LIGHT" , readXMLIF ( 31461 ) )			-- AFCS_->outputs.YD_engaged
	ipc.set ("Q400_AP_LIGHT" , readXMLIF ( 31281 ) )			-- AFCS_->outputs.AP_engaged

	-- glare shield
	ipc.set ("Q400_CAUTION" , readXMLIF ( 143090 ) )			-- CautionWarning_->outs_.master_caution_light_blinking
	ipc.set ("Q400_WARNING" , readXMLIF ( 143112 ) )			-- CautionWarning_->outs_.master_warning_light_blinking

	-- fuel
	ipc.set ("Q400_AUX_FUEL" , readXMLIF ( 59590 ) )			-- Fuel_->systems[0].AuxFuelPumplight

	-- Autofeather
	ipc.set ("Q400_AUTO_FEATHER" , readXMLIF ( 41047 ) )		-- PCU_->AutofeatherSelectLight

	-- Hydraulic
	ipc.set ("Q400_HYDRAULIC" , readXMLIF ( 91735 ) )			-- Hydraulical_->outs_.stby_hydr_ON_indicator

end

while 0 < 1 do
	readAllXMLValues()
	ipc.sleep(50)
end

The reason, why I read all the values at once in one single module is, that the interface always fetches one single value at one time. If you would call it from several independent threads, the calls could interfere. This is a limitation of the current XML interface. The training edition will include a more sophisticated interface.

Luckily most of the values can be read directly out of Lvars and you can avoid the XML-Interface. So a simple ipc.readLvar("<<<variable name>>>") will provide you the value directly.

If you have no programming skills, it's hard. Maybe you find some student nearby, which helps you with that part. You can offer him later some simulator hours 😉

Rgds
Reinhard

 

Hi Reinhard,

I'm again on this post.

I successfully read a Q400 variable via a LUA script and wrote it's value in a file just to see if script is working well. The LUA script is run by FSUIPC (Buttons+Switches control).

Now I'm guessing if it is possible to save this value in a new variable that FSUIPC can share externally (i.e Spad.neXt). If yes how can I achieve this?

Thanks in advance,

Alessandro

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.