Помогите с кодом SIOC для IOCARDS — «Железные» кокпиты

Начал строить кокпит для 767 уже приобрел IOCARD USB Expansion card и мастер карту,
Пока что собрал все на тестовой коробке, как разберусь с кодом перенесу все на панель.

сколько не пробывал разобраться с soic кодом ничего путнего не выходит,
прошу сильно не пинать за не знание, а помочь кто может.

Ответов: 19

Что никто не в силах оказать помощь?

С таким объяснением проблемы, как у вас, наверное никто. Причем вы первый пользователь «SOIC». Так же для вопроса не обязательно создавать новую «мертвотему». Можно задать вопрос в закрепленной вверху теме, либо найти тематическую ветку. В поиске по форуму наберите SIOC  ( SOIC не надо) и посмотрите что будет.

Var 0000 Name NGear Link IOCP Offset 0330 // Значение положения носового шасси получаемое из модуля IOCP4FSX
{
  IF V0000 = 16383 // Если значение переменной 0000 равно 16383, то
  {
	V0003 = 1 // Переменной 0003 (зеленая лампа носового шасси) присваиваем значение 1 (горит)
	V0006 = 0 // Переменной 0006 (красная лампа носового шасси) присваиваем значение 0 (не горит)
  }
  ELSE // Если значение переменной 0000 НЕ равно 16383, то
  {
	IF V0000 > 0 // Если значение переменной 0000 больше 0, то
	{
	  V0003 = 0 // Переменной 0003 (зеленая лампа носового шасси) присваиваем значение 0 (не горит)
	  V0006 = 1 // Переменной 0006 (красная лампа носового шасси) присваиваем значение 1 (горит)
	}
	ELSE // Если значение переменной 0000 не больше 0 (вероятно равно 0), то
	{
	  V0003 = 0 // Переменной 0003 (зеленая лампа носового шасси) присваиваем значение 0 (не горит)
	  V0006 = 0 // Переменной 0006 (красная лампа носового шасси) присваиваем значение 0 (не горит)
	}
  }
}
Var 0001 Name LGear Link IOCP Offset 0331
{
  IF V0001 = 16383
  {
	V0004 = 1
	V0007 = 0
  }
  ELSE
  {
	IF V0001 > 0
	{
	  V0004 = 0
	  V0007 = 1
	}
	ELSE
	{
	  V0004 = 0
	  V0007 = 0
	}
  }
}
Var 0002 Name RGear Link IOCP Offset 0332
{
  IF V0002 = 16383
  {
	V0005 = 1
	V0008 = 0
  }
  ELSE
  {
	IF V0002 > 0
	{
	  V0005 = 0
	  V0008 = 1
	}
	ELSE
	{
	  V0005 = 0
	  V0008 = 0
	}
  }
}
Var 0003 Name GNGearF2, Value 0 //Зеленая лампа носовой шасси, начальное значение устанавливаем 0
Var 0004 Name GLGearF2, Value 0 //Зеленая лампа левой шасси, начальное значение устанавливаем 0
Var 0005 Name GRGearF2, Value 0 //Зеленая лампа правой шасси, начальное значение устанавливаем 0
Var 0006 Name RNGearF2, Value 0 //Красная лампа носовой шасси, начальное значение устанавливаем 0
Var 0007 Name RLGearF2, Value 0 //Красная лампа левой шасси, начальное значение устанавливаем 0
Var 0008 Name RRGearF2, Value 0 //Красная лампа правой шасси, начальное значение устанавливаем 0

Конкретно, что не понятно? Это очень простой пример, в более сложных я пока сам не разбирался…

Сообщение отредактировал Shaman_2010: 08 March 2012 — 12:58

http://personales.ya…/hard/guiai.htm
Или сами или с переводчиком гугл. Более наглядной короткой и понятной объяснялки нет. Может еще вот тут:  http://www.lekseecon…encockpits.html
и по вкладочкам щелкаем и читаем.

vitabutch (09 March 2012 — 01:03) писал:

http://personales.ya…/hard/guiai.htm
Или сами или с переводчиком гугл. Более наглядной короткой и понятной объяснялки нет. Может еще вот тут:  http://www.lekseecon…encockpits.html
и по вкладочкам щелкаем и читаем.

Совершенно согласен! :)

// *****************************************************************************
// * Config_SIOC ver 4.01   -	 By Manuel Velez	-	www.opencockpits.com
// *****************************************************************************
// * FileName : sioc.txt
// * Date : 3/10/2012

Var 9001, name OutIAS, Link SUBRUTINE
{
  IF &searching = 1
  {
	&searching = 0   
	&searching = -999999   
  }
  ELSE
  {
	IF &searching = 1
	{
	  &searching = 1   
	  &searching = 888   
	}
	ELSE
	{
	  IF &searching = 0
	  {
		&searching = 0   
		&searching = -999999   
	  }
	  ELSE
	  {
		&searching = &searching   
		&searching = &searching   
	  }
	}
  }
}
Var 0275, name CMDLBut, static, Link IOCARD_SW, Input 3, Type P	 // CMD LEFT BUTTON
Var 0276, name CMDCBut, static, Link IOCARD_SW, Device 2, Input 6, Type P	 // CMD CENTRAL  BUTTON
Var 0277, name CMDRBut, static, Link IOCARD_SW, Device 2, Input 7, Type P	 // CMD RIGHT BUTTON
Var 0278, name MachSel, static, Link IOCARD_SW, Device 2, Input 89, Type P	 // MACHSEL BUTTON
Var 0279, name SpdIntBut, static, Link IOCARD_SW, Device 2, Input 116, Type P
Var 0280, name N1But, static, Link IOCARD_SW, Device 2, Input 130, Type P	 // N1 BUTTON
Var 0281, name SpdBut, static, Link IOCARD_SW, Input 5, Type P	 // SPD BUTTON
Var 0282, name ALTHLDBut, static, Link IOCARD_SW, Input 4, Type P	 // ALTHOLD BUTTON
Var 0283, name HdgHldBut, static, Link IOCARD_SW, Device 2, Input 85, Type P	 // HDGHOLD BUTTON
Var 0284, name HDGSelBut, static, Link IOCARD_SW, Input 112, Type P	 // HDGSEL BUTTON
Var 0285, name LNAVBut, static, Link IOCARD_SW, Device 2, Input 128, Type P	 // LNAV BUTTON
Var 0286, name VNAVBut, static, Link IOCARD_SW, Device 2, Input 127, Type P	 // VNAV BUTTON
Var 0287, name FLCHBut, static, Link IOCARD_SW, Device 2, Input 86, Type P	 // FLCH BOUTTON
Var 0288, name BCRSBut, static, Link IOCARD_SW, Device 2, Input 200, Type P	 // BACK COURSE BUTTON
Var 0289, name LOCBut, static, Link IOCARD_SW, Device 2, Input 47, Type P	 // LOC BUTTON
Var 0290, name APPBut, static, Link IOCARD_SW, Device 2, Input 48, Type P	 // APP BUTTON
Var 0291, name VSBut, static, Link IOCARD_SW, Device 2, Input 45, Type P	 // V/S BUTTON
Var 0292, name ATSwitch, static, Link IOCARD_SW, Input 15, Type I	 // A/T switch
Var 0293, name DisEngBar, static, Link IOCARD_SW, Device 2, Input 75, Type I
Var 0294, name CapFD, static, Link IOCARD_SW, Input 0, Type I	 // CAPT FLIGHT DIRECTOR (LEFT SIDE)
Var 0295, name FOFD, static, Link IOCARD_SW, Device 2, Input 0, Type I	 // FO FLIGHT DIRECTOR (RIGHT SIDE)
Var 0999, static
{
  CALL &searching
  CALL &searching
  CALL &searching
  CALL &searching
}
Var 0299, static	 // read/write ALT from/to level-D panel
{
  CALL &searching
}
Var 9002, name RO_ALT, Link IOCARD_ENCODER, Input 1, Aceleration 5, Type 2	 // ALTIMETER ROTARY
{
  L0 = &searching * -1	 // turning right should be plus
  V0299 = LIMIT 0 ,640 ,L0
}
Var 9003, name OutALT, Link SUBRUTINE
{
  IF &searching = 1
  {
	&searching = -999999   
	&searching = -999999   
	&searching = -999999   
  }
  ELSE
  {
	IF &searching = 1
	{
	  &searching = 888   
	  &searching = 8   
	  &searching = 8   
	}
	ELSE
	{
	  L0 = V0299 * 100
	  IF L0 >= 10000
	  {
	  }
	  ELSE
	  {
		&searching = -999999   
		IF L0 >= 1000
		{
		}
		ELSE
		{
		  &searching = -999999   
		  &searching = L0   
		}
	  }
	}
  }
}
Var 9004, name D_ALT, Link IOCARD_DISPLAY, Device 2, Digit 9, Numbers 3
Var 9005, name D_ALTL00, Link IOCARD_DISPLAY, Device 2, Digit 12, Numbers 1
Var 9006, name D_ALTL0, Link IOCARD_DISPLAY, Device 2, Digit 13, Numbers 1
Var 764 Static
{
  &O_Nose = TESTBIT v764 0
  &O_Left = TESTBIT v764 1
  &O_Right = TESTBIT v764 2
  &O_Gear = TESTBIT v764 3
  &O_Doors = TESTBIT v764 4
}
Var 9007 name O_Doors Link IOCARD_OUT Output 82
Var 9008 name O_Gear Link IOCARD_OUT Output 83
Var 9009 name O_Nose Link IOCARD_OUT Output 84
Var 9010 name O_Left Link IOCARD_OUT Output 85
Var 9011 name O_Right Link IOCARD_OUT Output 86
// Gear Lever:

Var 368 Static Link IOCARD_SW Input 73 Type I
Var 369 Static Link IOCARD_SW Input 72 Type I
Var 370 Static Link IOCARD_SW Input 74 Type I
// Flapsindicator
Var 9020 name FI_FlpsPos Link FSUIPC_IN Offset $0BE0 Length 4
{
  CALL &OutFlpsPos
}
Var 9021 name InitFlpsPos Link SUBRUTINE
{
  &O_Flaps0 = &InitFlpsPos
  &O_Flaps1 = &InitFlpsPos
  &O_Flaps5 = &InitFlpsPos
  &O_Flaps15 = &InitFlpsPos
  &O_Flaps20 = &InitFlpsPos
  &O_Flaps25 = &InitFlpsPos
  &O_Flaps30 = &InitFlpsPos
}
Var 9019 name OutFlpsPos Link SUBRUTINE
{
  IF &ColdAndDark = 1
  {
	CALL &InitFlpsPos 0   
  }
  ELSE
  { 
	IF &TestMIP = 1
	{
	  CALL &InitFlpsPos 1  
	}
	ELSE
	{
//
// FSLook measurements showed:
// Flaps 1 =  1638
//	   5 =  3948
//	   15=  7415
//	   20=  9080
//	   25= 13146
//	   30= 16384
//
	  IF &FI_FlpsPos < 50
	  {
		&O_Flaps0 = 1
	  }
	  ELSE
	  {
		&O_Flaps0 = 0
	  }
   
	  C0 = &FI_FlpsPos > 1588
	  C1 = &FI_FlpsPos < 2138
	  IF C0 AND C1
	  {
		&O_Flaps1 = 1
	  }
	  ELSE
	  {
		&O_Flaps1 = 0
	  }
   
	  C0 = &FI_FlpsPos > 3448
	  C1 = &FI_FlpsPos < 4448
	  IF C0 AND C1
	  {
		&O_Flaps5 = 1
	  }
	  ELSE
	  {
		&O_Flaps5 = 0
	  }
	  C0 = &FI_FlpsPos > 6915
	  C1 = &FI_FlpsPos < 7915
	  IF C0 AND C1
	  {
		&O_Flaps15 = 1
	  }
	  ELSE
	  {
		&O_Flaps15 = 0
	  }
	  C0 = &FI_FlpsPos > 8580
	  C1 = &FI_FlpsPos < 9580
	  IF C0 AND C1
	  {
		&O_Flaps20 = 1
	  }
	  ELSE
	  {
		&O_Flaps20 = 0
	  }
	  C0 = &FI_FlpsPos > 12646
	  C1 = &FI_FlpsPos < 13646
	  IF C0 AND C1
	  {
		&O_Flaps25 = 1
	  }
	  ELSE
	  {
		&O_Flaps25 = 0
	  }
	  IF &FI_FlpsPos > 15884
	  {
		&O_Flaps30 = 1
	  }
	  ELSE
	  {
		&O_Flaps30 = 0
	  }

	 }
  }
}
Var 990 Static
{
  CALL &OutFlpsPos
}
// Flaps indicator, generic part (FS9+FSX)
Var 9012 name O_Flaps0 Link IOCARD_OUT Output 9
Var 9013 name O_Flaps1 Link IOCARD_OUT Output 76
Var 9014 name O_Flaps5 Link IOCARD_OUT Output 77
Var 9015 name O_Flaps15 Link IOCARD_OUT Output 16
Var 9016 name O_Flaps20 Link IOCARD_OUT Output 79
Var 9017 name O_Flaps25 Link IOCARD_OUT Output 80
Var 9018 name O_Flaps30 Link IOCARD_OUT Output 12

Это пока то что я смог собрать на SOIC коде с использованием лексекон

Напишите, что не понятно/не работает?

Сообщение отредактировал woolf: 15 March 2012 — 10:59

A1exZandeR (16 March 2012 — 01:39) писал:

У меня проблема на данный момент с энкодером, когда начинаю его поворачивать программа просто вырубается, пробывал 3-4 разных вида все время одно и тоже. (подключены напряму к мастер карте)

Э… Какя программа-то? Ваш SIOC скрипт или сам SIOC? Или еще какая-то программа? И че значит вырубается — перестает работать или вылетает с ошибкой(и закрывается).
Енкодеры вы где взяли? Если  c opencockpits, то ок, а так не понятно, если вы пробовали 3-4 разных видов енкодеров, то они и не будут работать: Для mastercard нужно только с определенными хар-ми.

Если-же вы все приобретали с Opencockpits(включая енкодеры), то запустите controlador.exe(там же находится где и sioc.exe) и посмотрите, что происходит на входах когда крутите энкодер.

У меня проблема на данный момент с энкодером, когда начинаю его поворачивать программа просто вырубается, пробывал 3-4 разных вида все время одно и тоже. (подключены напряму к мастер карте)

woolf (16 March 2012 — 03:38) писал:

Э… Какя программа-то? Ваш SIOC скрипт или сам SIOC? Или еще какая-то программа? И че значит вырубается — перестает работать или вылетает с ошибкой(и закрывается).
Енкодеры вы где взяли? Если  c opencockpits, то ок, а так не понятно, если вы пробовали 3-4 разных видов енкодеров, то они и не будут работать: Для mastercard нужно только с определенными хар-ми.

Если-же вы все приобретали с Opencockpits(включая енкодеры), то запустите controlador.exe(там же находится где и sioc.exe) и посмотрите, что происходит на входах когда крутите энкодер.

Энкодеры брал не на Opencockpits а на digikey, когда открываю controlador.exe то там когда вращаешь энкодер показываеться номер входа к которому подключен. а когда запускаю соик то открываться нормально, но при повороте энокдера программа просто закрываться без ошибок. если отключить энкодер то все работает как должно

A1exZandeR (16 March 2012 — 15:45) писал:

Энкодеры брал не на Opencockpits а на digikey, когда открываю controlador.exe то там когда вращаешь энкодер показываеться номер входа к которому подключен. а когда запускаю соик то открываться нормально, но при повороте энокдера программа просто закрываться без ошибок. если отключить энкодер то все работает как должно

Вы уверены, что энкодер совместимый?
Энкодер подключается средней ногой на common ground(одной из групп inputs!)  а две других ноги на последовательные! логические! входы.
Допустим мы подключили к inputs 7и 8. Когда крутим, то controlador будет показывать примерно так (7 — 8) +> (7 — ) => ( — ) => (7 — ) => (7 — 8).
У вас так?

A1exZandeR (16 March 2012 — 15:45) писал:

но при повороте энокдера программа просто закрываться без ошибок. если отключить энкодер то все работает как должно

Так быть не должно. Не важно правильный энкодер или нет, сиок не должен закрываться. Попробуйте более ранние версии.
Неправильный энкодер просто «очень быстро» шевелит ногами, и циклы не отрабатываются. Он ничего не имеет против работы сиока :)

vitabutch (16 March 2012 — 18:43) писал:

Так быть не должно. Не важно правильный энкодер или нет, сиок не должен закрываться. Попробуйте более ранние версии.
Неправильный энкодер просто «очень быстро» шевелит ногами, и циклы не отрабатываются. Он ничего не имеет против работы сиока :)

Все правильно говорите.
Только человек мог либо не тот энкодер купить, либо не так подключить, что я и пытаюсь выяснить.

SIOC вылетает например когда файл не до конца переведен в byte код. У меня такое было когда ошибка в скрипте не дает sioc compiler доработать до конца и нажать ctrl+s, тогда получается кривой файл.  Но если я правильно помню, там сообщение об ошибке сначала выдается.

woolf (16 March 2012 — 19:16) писал:

Все правильно говорите.
Только человек мог либо не тот энкодер купить, либо не так подключить, что я и пытаюсь выяснить.

SIOC вылетает например когда файл не до конца переведен в byte код. У меня такое было когда ошибка в скрипте не дает sioc compiler доработать до конца и нажать ctrl+s, тогда получается кривой файл.  Но если я правильно помню, там сообщение об ошибке сначала выдается.

какаято ошибка выскакивает при импорте тхт файла в соик
Изображение

Изображение
так выглядит когда не вращаю энкодером

Изображение
Когда вращаю энкодер появляеться и исчезает 001-

   Изображение
запускаю СОИК и только первый клик энкодером сразу вырубаеться программа.
Навжно быстро вращать или медленно результат один.

woolf (17 March 2012 — 07:44) писал:

Хехе, судя по скринам, у вас:
1) Не тот Не так подключен энкодер. EDIT: Хмм… сходил по вашей ссылке на digikey, энокодер правильный. Значить просто не так подключен.
2) Не докомпелировался скрипт.

Из-за 2) — вылетает SIOC…
Из-за 1) — оно и так работать нормально не будет

энкодер подключен земля на среднюю ногу крайние на входы

A1exZandeR (17 March 2012 — 08:24) писал:

энкодер подключен земля на среднюю ногу крайние на входы

Если подключено на входы 6 и 1, то и 6 и 1 должны оба исчезать и появляться. Последовательность я уже писал.
Опять же входы должны быть последовательные. То есть 1,и 2, 2 и 3 итд.

После того как разберетесь с подключением, поработайте над скриптом, чтобы он компилировался. Сейчас компилятор жалуется, что переменная с именем SEARCHING не определена.

Хехе, судя по скринам, у вас:
1) Не тот Не так подключен энкодер. EDIT: Хмм… сходил по вашей ссылке на digikey, энокодер правильный. Значить просто не так подключен.
2) Не докомпелировался скрипт.

Из-за 2) — вылетает SIOC…
Из-за 1) — оно и так работать нормально не будет

Сообщение отредактировал woolf: 17 March 2012 — 07:59

woolf (17 March 2012 — 10:33) писал:

Если подключено на входы 6 и 1, то и 6 и 1 должны оба исчезать и появляться. Последовательность я уже писал.
Опять же входы должны быть последовательные. То есть 1,и 2, 2 и 3 итд.

После того как разберетесь с подключением, поработайте над скриптом, чтобы он компилировался. Сейчас компилятор жалуется, что переменная с именем SEARCHING не определена.

1)попробывал подключить на другие выходы (3-4) теперь controlador показывает при вращении энкодера (   )  (003-) (003-004-) (004-) (  ) как я понимаю это правильно показывает.
2) в скрипте разобраться не могу знания програмирования у меня нету совсем, весь код собирал из leeksecon там файлы готовые есть
3) какой выход использовать в SIOC  в моем случае (3 или 4)?   (попробывал и 3 и 4 ставить все равно вылетает SIOC)

ПЫ.СЫ. Огромное спасибо за вашу помощь.

Сообщение отредактировал A1exZandeR: 17 March 2012 — 20:45