Форум » » Конвертирование модуля *.axi (AMX) в SIMP+ или SIMPL# » Ответить

Конвертирование модуля *.axi (AMX) в SIMP+ или SIMPL#

Kaveckiy: Коллеги, имеется модуль для охрнной централи Satel написанный под AMX. Исходник написан на чем-то С-подобном. Есть желание изучить SIMP+ или SIMPL# на данном практическом примере. Насколько там схожий синтаксис? Откуда начать читать?

Ответов - 5

Игорь K.: Откомпилировать из AMX в SIMPL+ напрямую не получится. В АМХ все, что нужно знать в листинге программы, в т.ч. настройки портов и внешние связи. Не нужно думать, что где-то лучше, а где то хуже, просто немного по-другому. Сначала нужно определить что относится к настройкам железа, затем разбираться с логикой. Синтаксис AMX и SIML+ очень похож для внутренней обработки.

Kaveckiy: Игорь K. там листинг программы в читабельном виде: PROGRAM_NAME='sauna' define_constant devchan SaunaIn_D0 = { dvIO16_ShASK_1 , 16}; devchan SaunaIn_D1 = { dvIO16_ShASK_1 , 15}; devchan SaunaIn_D2 = { dvIO16_ShASK_1 , 14}; devchan SaunaIn_D3 = { dvIO16_ShASK_1 , 13}; devchan SaunaOut_D0 = { vdvLicon , 156}; devchan SaunaOut_D1 = { vdvLicon , 155}; devchan SaunaOut_D2 = { vdvLicon , 154}; devchan SaunaOut_D3 = { vdvLicon , 153}; devchan SaunaVin = { vdvLicon , 100}; integer SaunaBtns [] = { 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509 } define_variable integer sauna_temp = 0; sinteger test_val=0; integer SaunaFlag[20]; integer Rej = 0; non_volatile integer SaunaIn_0_StVar = 0; non_volatile integer SaunaIn_1_StVar = 0; non_volatile integer SaunaIn_2_StVar = 0; non_volatile integer SaunaIn_3_StVar = 0; define_call 'Sauna_States' { if(SaunaIn_0_StVar == 1) { on [SaunaOut_D0]; } else { off [SaunaOut_D0]; } if(SaunaIn_1_StVar == 1) { on [SaunaOut_D1]; } else { off [SaunaOut_D1]; } if(SaunaIn_2_StVar == 1) { on [SaunaOut_D2]; } else { off [SaunaOut_D2]; } if(SaunaIn_3_StVar == 1) { on [SaunaOut_D3]; } else { off [SaunaOut_D3]; } } define_start Combine_Channels (SaunaVin, dv_panel, 2508); define_event button_event [SaunaIn_D0] { push: { on [SaunaOut_D0]; SaunaIn_0_StVar = 1; call 'Sauna_States'; } release: { off [SaunaOut_D0]; SaunaIn_0_StVar = 0; call 'Sauna_States'; } } button_event [SaunaIn_D1] { push: { on [SaunaOut_D1]; SaunaIn_1_StVar = 1; call 'Sauna_States'; } release: { off [SaunaOut_D1]; SaunaIn_1_StVar = 0; call 'Sauna_States'; } } button_event [SaunaIn_D2] { push: { on [SaunaOut_D2]; SaunaIn_2_StVar = 1; call 'Sauna_States'; } release: { off [SaunaOut_D2]; SaunaIn_2_StVar = 0; call 'Sauna_States'; } } button_event [SaunaIn_D3] { push: { on [SaunaOut_D3]; SaunaIn_3_StVar = 1; call 'Sauna_States'; } release: { off [SaunaOut_D3]; SaunaIn_3_StVar = 0; call 'Sauna_States'; } } LEVEL_EVENT [dlTemperature2] { if(LEVEL.VALUE != 9990) { sauna_temp = Level.Value; send_string dvBitWise, "'2509="', TemperatureToStr(Level.Value),'C','"',13"; SendTextToPanel(dv_panel, 2509, "TemperatureToStr(Level.Value),'C'"); //send_command dv_panel,"'^TXT-41,0,', TemperatureToStr(Level.Value),'C'"; } } level_event [dlTemperature6] { if(LEVEL.VALUE != 9990) { test_val = Level.Value; } } button_event [dv_panel, 2500] button_event [vdvBitWise, 2500] { push: { on [SaunaOut_D2]; off [SaunaOut_D0]; off [SaunaOut_D1]; wait 9000 'SaunaPusk 15' { switch(Rej) { case 1: { on [SaunaOut_D0]; } case 2: { on [SaunaOut_D1]; } case 3: { on [SaunaOut_D0]; on [SaunaOut_D1]; } } off [SaunaOut_D2]; } } } button_event [dv_panel, 2505] button_event [vdvBitWise, 2505] { push: { on [SaunaOut_D2]; off [SaunaOut_D0]; off [SaunaOut_D1]; wait 18000 'SaunaPusk 30' { switch(Rej) { case 1: { on [SaunaOut_D0]; } case 2: { on [SaunaOut_D1]; } case 3: { on [SaunaOut_D0]; on [SaunaOut_D1]; } } off [SaunaOut_D2]; } } } button_event [dv_panel, 2506] button_event [vdvBitWise, 2506] { push: { on [SaunaOut_D2]; off [SaunaOut_D0]; off [SaunaOut_D1]; wait 36000 'SaunaPusk 60' { switch(Rej) { case 1: { on [SaunaOut_D0]; } case 2: { on [SaunaOut_D1]; } case 3: { on [SaunaOut_D0]; on [SaunaOut_D1]; } } off [SaunaOut_D2]; } } } button_event [dv_panel, 2507] button_event [vdvBitWise, 2507] { push: { off [SaunaOut_D2]; cancel_wait 'SaunaPusk 15'; cancel_wait 'SaunaPusk 30'; cancel_wait 'SaunaPusk 60'; switch(Rej) { case 1: { on [SaunaOut_D0]; } case 2: { on [SaunaOut_D1]; } case 3: { on [SaunaOut_D0]; on [SaunaOut_D1]; } } } } button_event [dv_panel, 2501] button_event [vdvBitWise, 2501] { push: { Rej = 1; on [SaunaOut_D0]; off [SaunaOut_D1]; off [SaunaOut_D2]; on [dv_panel, 2501]; off [dv_panel, 2502]; off [dv_panel, 2503]; BitWiseChanelSet( 2501, 1 ); BitWiseChanelSet( 2502, 0 ); BitWiseChanelSet( 2503, 0 ); } } button_event [dv_panel, 2502] button_event [vdvBitWise, 2502] { push: { Rej = 2; off [dv_panel, 2501]; on [dv_panel, 2502]; off [dv_panel, 2503]; off [SaunaOut_D0]; on [SaunaOut_D1]; off [SaunaOut_D2]; BitWiseChanelSet( 2501, 0 ); BitWiseChanelSet( 2502, 1 ); BitWiseChanelSet( 2503, 0 ); } } button_event [dv_panel, 2503] button_event [vdvBitWise, 2503] { push: { Rej = 3 off [dv_panel, 2501]; off [dv_panel, 2502]; on [dv_panel, 2503]; on [SaunaOut_D0]; on [SaunaOut_D1]; off [SaunaOut_D2]; BitWiseChanelSet( 2501, 0 ); BitWiseChanelSet( 2502, 0 ); BitWiseChanelSet( 2503, 1 ); } } button_event [vdvBitWise, 2504] { push: { switch(Rej) { case 1: { BitWiseChanelSet( 2501, 1 ); BitWiseChanelSet( 2502, 0 ); BitWiseChanelSet( 2503, 0 ); break; } case 2: { BitWiseChanelSet( 2501, 0 ); BitWiseChanelSet( 2502, 1 ); BitWiseChanelSet( 2503, 0 ); break; } case 3: { BitWiseChanelSet( 2501, 0 ); BitWiseChanelSet( 2502, 0 ); BitWiseChanelSet( 2503, 1 ); break; } } if([SaunaVin]) { BitWiseChanelSet( 2508, 1 ); } else { BitWiseChanelSet( 2508, 0 ); } send_string dvBitWise, "'2509="', TemperatureToStr(sauna_temp),'C','"',13"; } } button_event [dv_panel, 2508] button_event [vdvBitWise, 2508] { push: { Rej = 0; BitWiseChanelSet( 2501, 0 ); BitWiseChanelSet( 2502, 0 ); BitWiseChanelSet( 2503, 0 ); off [dv_panel, 2501]; off [dv_panel, 2502]; off [dv_panel, 2503]; off [SaunaOut_D0]; off [SaunaOut_D1]; off [SaunaOut_D2]; off [SaunaOut_D3]; cancel_wait 'SaunaPusk 15'; cancel_wait 'SaunaPusk 30'; cancel_wait 'SaunaPusk 60'; if([SaunaVin]) { off [SaunaVin]; } else { on [SaunaVin]; } } } channel_event [SaunaVin] { on: { BitWiseChanelSet( 2508, 1 ); } off: { BitWiseChanelSet( 2508, 0 ); } } Примерно понятно что там происходит. Мне бы пример с чего осваивать SIMPL+ или SIMPL# (и что лучше из них осваивать так чтоб с перспективой) и можно понемногу переносить код. На чем тестировать есть.

Игорь K.: Только самостоятельно при наличии мотивации. Могу прислать материалы курсов CTI, есть английские и итальянские. Примеров везде достаточно.


Kaveckiy: Игорь K. за английские буду очень благодарен. Шлите на ek@lon.com.ua

Игорь K.: OK



полная версия страницы