Фильтр по тематике

Технологический язык программирования IBM PC совместимых контроллеров

Описана система технологического программирования MicPlus.

31.12.1995 1350 0
Технологический язык программирования IBM PC совместимых контроллеров
При вы­бо­ре тех­ни­чес­ких средств ав­то­ма­ти­за­ции од­ним из ос­нов­ных кри­те­ри­ев яв­ля­ет­ся на­ли­чие про­грам­мных средств, поз­во­ля­ю­щих эф­фек­тив­но ре­а­ли­зо­вать при­клад­ные за­да­чи поль­зо­ва­те­ля. При­чем под эф­фек­тив­ностью по­ни­ма­ет­ся пре­жде все­го ско­рость раз­ра­бот­ки этих за­дач и на­ли­чие го­то­вых ре­ше­ний для стан­дар­т­ных фун­к­ций кон­тро­ля и уп­рав­ле­ния. Ес­те-с­твен­но, на­илуч­ший ре­зуль­тат по­лу­чит­ся, ког­да спе­ци­а­лист в об­лас­ти ав­то­ма­ти­за­ции тех­но­ло­гии смо­жет свое по­ни­ма­ние за­да­чи во­пло­тить в жизнь без пос­ред­ни­ков-про­грам­мис­тов. Имен­но этой це­ли и слу­жат тех­но­ло­ги­чес­кие язы­ки про­грам­ми­ро­ва­ния. От­сут­ст­вие или ма­лое рас­прос­тра­не­ние та­ких язы­ков су­щес­твен­но сдер­жи­ва­ет при­ме­не­ние сво­бод­но про­грам­ми­ру­е­мых IBM РС со­вмес­ти­мых кон­трол­ле­ров. Ко­неч­ный поль­зо­ва­тель за­час­тую пред­по­чи­та­ет вы­брать спе­ци­а­ли­зи­ро­ван­ное ус­трой­ст­во, об­ла­да­ю­щее ог­ра­ни­чен­ны­ми воз­мож­нос­тя­ми при­ме­не­ния, толь­ко из-за то­го, что для его при­ме­не­ния не нуж­но об­ра­щать­ся к про­грам­мис­там. В ре­зуль­та­те та­кие ус­трой­ст­ва, как, на­при­мер, MicroPC, бо­лее по­пу­ляр­ны сре­ди об­ла­да­ю­щих ква­ли­фи­ци­ро­ван­ны­ми кад­ра­ми сис­тем­ных ин­тег­ра­то­ров или про­из­во­ди­те­лей ком­плек­сно­го обо­ру­до­ва­ния, чем сре­ди пред­ста­ви­те­лей ав­то­ма­ти­зи­ру­е­мых пред­при­ятий. Ко­неч­но, не­ль­зя ска­зать, что до сих пор про­бле­ма не бы­ла ре­ше­на со­всем. Так, су­щес­тву­ет ряд за­пад­ных па­ке­тов (ISаGRAF и др.), прак­ти­чес­ки ре­а­ли­зу­ю­щих меж­ду­на­род­ный стан­дарт на язы­ки для про­грам­ми­ру­е­мых кон­трол­ле­ров (IEC 1131-3). Од­на­ко нам не­из­вес­т­но об их адап­та­ции к ка­ким-ли­бо из ши­ро­ко рас­прос­т-ра­нен­ных в Рос­сии IBM РС со­вмес­ти­мых кон­трол­ле­ров, в том чис­ле и к MicroPC. Кро­ме то­го, при­ме­не­ние та­ких па­ке­тов здесь сдер­жи­ва­ет­ся их вы­со­кой сто­и­мостью.

В этой статье нам хо­те­лось бы опи­сать свой со­бствен­ный под­ход к ре­ше­нию во­про­са. Под­ход, ро­жден­ный мно­го­лет­ним опы­том ра­бо­ты с тех­но­ло­ги­чес­ки­ми кон­трол­ле­ра­ми, вклю­чая и учас­тие ког­да-то не­ко­то­рых на­ших со­труд­ни­ков, по­мо­га­ю­щих ны­не в раз­ви­тии де­ла ав­то­ма­ти­за­ции брат­с­кой Аме­ри­ке, в со­зда­нии сис­тем­но­го про­грам­м­но­го обес­пе­че­ния кон­трол­ле­ров Ло­ми­конт — хи­та 80-х, — ус­та­рев­шей мо­раль­но, но до сих пор тру­дя­щей­ся на про­сто­рах на­шей Ро­ди­ны над­еж­ной ра­бо­чей ло­шад­ки.

Пре­жде чем рас­ска­зать о со­бствен­ных до­сти­же­ни­ях, не­об­хо­ди­мо, ви­ди­мо, сде­лать не­боль­шой эк­скурс в ис­то­рию во­про­са.

Дли­тель­ное вре­мя, фак­ти­чес­ки с са­мо­го сво­е­го по­яв­ле­ния про­грам­ми­ру­е­мые кон­трол­ле­ры в ос­нов­ном пред­став­ля­ли со­бой ус­трой­ст­ва од­но­го из трех ти­пов: ло­ги­чес­кий кон­трол­лер для уп­рав­ле­ния дис­крет­ны­ми про­цес­са­ми, ре­гу­ли­ру­ю­щий кон­трол­лер для уп­рав­ле­ния не­пре­рыв­ны­ми про­цес­са­ми и сво­бод­но про­грам­ми­ру­е­мый кон­трол­лер для уни­вер­саль­но­го при­ме­не­ния. Не­сво­ди­мость пер­вых двух ти­пов кон­трол­ле­ров к треть­ему бы­ла вы­зва­на ог­ра­ни­чен­ны­ми воз­мож­нос­тя­ми про­грам­мно­го обес­пе­че­ния сво­бод­но про­грам­ми­ру­е­мых кон­трол­ле­ров. Как для ло­ги­чес­ких, так и для ре­гу­ли­ру­ю­щих кон­трол­ле­ров язы­ки про­грам­ми­ро­ва­ния к се­ре­ди­не 80-х го­дов окон­ча­тель­но сло­жи­лись и бы­ли пол­ностью адек­ват­ны тем за­да­чам, для ко­то­рых они при­ме­ня­лись. Од­на­ко для слож­ных слу­ча­ев мно­го­фун­к­ци­о­наль­но­го ис­поль­зо­ва­ния удов­лет­во­ри­тель­но­го ре­ше­ния не бы­ло на­й­де­но. По­пыт­ка вве­де­ния меж­ду­на­род­но­го стан­дар­та для про­грам­ми­ро­ва­ния кон­трол­ле­ров от­ра­зи­ла сло­жив­шу­ю­ся кар­ти­ну — имен­но мно­го­фун­к­ци­о­наль­ный язык опи­сан на­име­нее чет­ко. Что­бы по­нять при­чи­ну этой си­ту­а­ции, сто­ит вкрат­це рас­смот­реть осо­бен­нос­ти ос­нов­ных язы­ков про­грам­ми­ро­ва­ния кон­трол­ле­ров.

Пер­вые тех­но­ло­ги­чес­кие кон­трол­ле­ры бы­ли по пре­иму­щес­т­ву ло­ги­чес­ки­ми, и со­от­вет­ству­ю­щую спе­ци­фи­ку имел один из пер­вых тех­но­ло­ги­чес­ких язы­ков. Ре­ше­ние бы­ло са­мое про­стое и в то же вре­мя без­оши­боч­ное — ими­ти­ро­вать про­ек­ти­ро­ва­ние той тех­ни­ки, на сме­ну ко­то­рой при­шли кон­трол­ле­ры. Так по­я­вил­ся язык ре­лей­но-кон­так­т­ных схем. Бла­го­да­ря све­де­нию но­вой сущ­нос­ти к ста­рой при­вы­чной фор­ме был обес­пе­чен пси­хо­ло­ги­чес­ки без­бо­лез­нен­ный пе­ре­ход на но­вую тех­ни­ку. Язык ре­лей­но-кон­так­т­ных схем (РКС) об­ла­дал и еще од­ним пре­иму­щес­т­вом: ока­за­лось, что про­це­ду­ры вво­да и от­лад­ки про­грамм на язы­ке РКС лег­ко мо­гут быть ре­а­ли­зо­ва­ны на при­ми­тив­ных пуль­тах, ис­поль­зо­вав­ших­ся тог­да для про­грам­ми­ро­ва­ния кон­трол­ле­ров. По тем вре­ме­нам пор­та­тив­ность пуль­та мог­ла быть обес­пе­че­на толь­ко су­щес­твен­ным ог­ра­ни­че­ни­ем его воз­мож­нос­тей, а для про­грам­ми­ро­ва­ния на РКС хва­та­ло од­нос­троч­но­го дис­п­лея и по­лу­то­ра де­сят­ков кно­пок. Ог­ра­ни­чен­ные воз­мож­нос­ти тех­ни­ки, имев­шей не­боль­шой объ­ем па­мя­ти и про­стей­ший пульт, не­об­хо­ди­мость опе­ра­тив­ной кор­рек­ции про­грамм пред­ъ­яв­ля­ли и еще од­но тре­бо­ва­ние — язык до­лжен был быть ре­а­ли­зо­ван как ин­тер­пре­ти­ру­е­мый. Язык РКС лег­ко впи­сы­вал­ся во все имев­ши­е­ся тог­да ог­ра­ни­че­ния.

Ус­пех про­грам­ми­ру­е­мых ло­ги­чес­ких кон­трол­ле­ров вско­ре раз­де­ли­ли од­но­ка­наль­ные и мно­го­ка­наль­ные про­грам­ми­ру­е­мые циф­ро­вые ре­гу­ля­то­ры. И здесь был ис­поль­зо­ван тот же хо­ро­шо се­бя за­ре­ко­мен­до­вав­ший под­ход: для про­грам­ми­ро­ва­ния был со­здан язык фун­кци­о­наль­ных бло­ков, пов­то­ряв­ший ме­то­ди­ку со­зда­ния сис­тем ре­гу­ли­ро­ва­ния на ис­поль­зо­вав­шей­ся ра­нее тех­ни­чес­кой ба­зе, ког­да от­дель­ные элек­трон­ные или пнев­ма­ти­чес­кие бло­ки, ре­а­ли­зу­ю­щие ту или иную фун­к­цию, со­еди­ня­ли меж­ду со­бой для по­лу­че­ния бо­лее слож­ных фун­кци­о­наль­ных воз­мож­нос­тей. У нас в стра­не язык фун­кци­о­наль­ных бло­ков был при­ме­нен во всех по­ко­ле­ни­ях ши­ро­ко рас­прос­тра­нен­ных кон­трол­ле­ров Ре­ми­конт.

По­лу­чен­ный опыт вы­явил ос­нов­ные не­до­стат­ки со­здан­ных ре­а­ли­за­ций. Од­ни не­до­че­ты бы­ли за­мет­ны да­же в той об­лас­ти при­ме­не­ния, для ко­то­рой эти язы­ки пред­на­зна­ча­лись, дру­гие про­яв­ля­ли се­бя при по­пыт­ке ре­шить за­да­чи, где пот­реб­ность в ло­ги­чес­ком уп­рав­ле­нии со­че­та­лась с фун­кци­я­ми ре­гу­ли­ро­ва­ния и вы­чис­ле­ний, что ха­рак­тер­но, на­при­мер, для уп­рав­ле­ния пе­ри­о­ди­чес­ки­ми про­цес­са­ми в хи­мии или энер­ге­ти­ке. Язык РКС ока­зал­ся не­удо­бен для опи­са­ния уп­рав­ле­ния та­ки­ми ша­го­вы­ми про­цес­са­ми, где ли­ней­ный по­ря­док ша­гов на­ру­шал­ся раз­вет­вле­ни­я­ми, па­рал­ле­лиз­мом и ре­цик­ла­ми. Мно­го­ка­наль­ные схе­мы ре­гу­ли­ро­ва­ния, пред­став­лен­ные на язы­ке фун­кци­о­наль­ных бло­ков, бы­ли слиш­ком гро­моз­д­ки и ма­лоп­ред­ста­ви­мы на при­ми­тив­ных пуль­тах. Вза­и­моп­ро­ник­но­ве­ние язы­ков, ха­рак­тер­ное для уже вто­ро­го их по­ко­ле­ния, — встав­ка фун­кци­о­наль­ных бло­ков в РКС, ис­поль­зо­ва­ние ло­ги­чес­ких фун­к­ций в язы­ке фун­кци­о­наль­ных бло­ков — ре­ша­ло за­да­чу при не­боль­шом от­кло­не­нии от фун­кци­о­наль­но­го пред­на­зна­че­ния язы­ка, но бы­ло бес­силь­но в слу­чае их дей­стви­тель­но мно­го­фун­кци­о­наль­но­го при­ме­не­ния. Слож­ные схе­мы ре­гу­ли­ро­ва­ния и вы­чис­ле­ния пло­хо впи­сы­ва­лись в ло­ги­ку пос­тро­е­ния РКС, ло­ги­чес­кие и вы­чис­ли­тель­ные за­да­чи гро­моз­д­ко и не­на­гляд­но ре­ша­лись на язы­ке фун­к­ци­о­наль­ных бло­ков. Здесь и на­ча­лись по­ис­ки, ко­то­рые да­ли не­сколь­ко ва­ри­ан­тов ре­ше­ния про­бле­мы.

Пер­вый ус­пех при­не­сли по­пыт­ки ор­га­ни­за­ции об­щей струк­ту­ры про­грам­мы. Та­кой под­ход поз­во­лил про­из­вес­ти де­ком­по­зи­цию за­да­чи за счет вве­де­ния мо­дуль­нос­ти про­грамм и их иерар­хи­чес­ко­го пред­став­ле­ния. Удач­ный при­мер это­го под­хо­да – со­зда­ние фран­цуз­с­кой фир­мой Telemecanique язы­ка Граф­сет, ко­то­рый явил­ся об­раз­цом для раз­ра­бот­ки по­до­бных язы­ков дру­ги­ми фир­ма­ми и стал стан­дар­том de facto еще до то­го, как офи­ци­аль­ное вклю­че­ние язы­ка ша­го­вых пос­ле­до­ва­тель­нос­тей в меж­ду­на­род­ный стан­дарт сде­ла­ло его стан­дар­том de jure. Ос­нов­ные свой­ст­ва Граф­се­та, явив­ше­го­ся прак­ти­чес­ким при­ме­не­ни­ем раз­ра­бо­тан­ных в те­о­рии ав­то­ма­тов лет за 15 до его со­зда­ния се­тей Пет­ри, – это пред­став­ле­ние про­грам­мы в ви­де ша­гов и пе­ре­хо­дов, а так­же на­ли­чие не­сколь­ких од­нов­ре­мен­но ра­бо­та­ю­щих про­грамм и ор­га­ни­зу­ю­щей про­грам­мы, ко­то­рая от­ве­ча­ет за их вклю­че­ние и от­клю­че­ние. Ин­те­рес­но, что ло­ги­ка са­мих ша­гов и пе­ре­хо­дов во мно­гих ре­а­ли­за­ци­ях мо­жет быть опи­са­на на язы­ке РКС. Вве­де­ние в язык ша­го­вых пос­ле­до­ва­тель­нос­тей па­рал­ле­лиз­ма ша­гов, на­ли­чие вет­вле­ний, а в не­ко­то­рых вер­си­ях и цик­лов, обес­пе­чи­ло в со­че­та­нии с при­ме­не­ни­ем РКС и струк­ту­ри­за­цией за­да­чи до­ста­точ­ную гиб­кость для по­треб­нос­тей уп­рав­ле­ния под­ав­ля­ю­щим боль­шин­ст­вом дис­крет­ных и пе­ри­о­ди­чес­ких про­цес­сов.

Не­об­хо­ди­мость со­че­та­ния не­пре­рыв­но­го и дис­крет­но­го уп­рав­ле­ния на боль­шин­ст­ве объ­ек­тов хи­мии, не­фте­хи­мии, ме­тал­лур­гии, энер­ге­ти­ки и дру­гих от­рас­лей ве­ла к по­ис­ку уни­вер­саль­но­го тех­но­ло­ги­чес­ко­го язы­ка. На­ча­лом пу­ти к не­му ста­ла по­пыт­ка адап­та­ции уни­вер­саль­ных язы­ков про­грам­ми­ро­ва­ния. В пер­вых сво­бод­но про­грам­ми­ру­е­мых кон­трол­ле­рах при­ме­нял­ся ас­сем­б­лер, за­тем по­я­ви­лись язы­ки вы­со­ко­го уров­ня (Си, Бей­сик), но в лю­бом слу­чае для то­го, что­бы пи­сать на этих язы­ках, нуж­ны бы­ли проф­ес­си­о­наль­ные про­грам­мис­ты, а сам про­цесс раз­ра­бот­ки про­грамм был до­ста­точ­но тру­до­ем­ким и тре­бо­вал крос­со­вых средств, ре­а­ли­зо­ван­ных на компь­юте­ре. Ис­поль­зо­ва­ние пуль­тов для про­грам­ми­ро­ва­ния ис­клю­ча­лось из-за слож­нос­ти са­мих язы­ков, а так­же зна­чи­тель­ных ре­сур­сов, не­об­хо­ди­мых для ком­пи­ля­ции и ре­ком­пи­ля­ции в слу­чае вне­се­ния из­ме­не­ний. Пред­ло­жен­ное в ря­де ре­а­ли­за­ций стан­дар­та внеш­нее пред­став­ле­ние про­грам­мы на лю­бом из «гос­ти­ро­ван­ных» язы­ков с воз­мож­ностью пе­ре­клю­че­ния меж­ду ни­ми про­бле­му не сня­ло, по­сколь­ку в прак­ти­чес­ком при­ме­не­нии ока­за­лось не­на­гляд­ным.

С дру­гой сто­ро­ны, стре­ми­тель­ное раз­ви­тие пер­со­наль­ных компь­юте­ров при­ве­ло к то­му, что луч­шим пуль­том про­грам­ми­ро­ва­ния для лю­бо­го кон­трол­ле­ра стал обыч­ный офис­ный сна­ча­ла laptop, а те­перь и notebook. В ре­зуль­та­те ог­ра­-ни­че­ния на слож­ность язы­ка бы­ли сня­-ты и ока­за­лось воз­мож­ным пе­ре­йти от про­грамм-ин­тер­пре­та­то­ров, сни­жав­ших тре­бо­ва­ния к па­мя­ти, за­ни­ма­е­мой при­клад­ной про­грам­мой, и об­лег­чав­ших про­цесс про­грам­ми­ро­ва­ния с по­мощью спе­ци­а­ли­зи­ро­ван­ных пуль­тов, к ком­пи­ля­то­рам, ра­бо­та­ю­щим на ин­стру­мен­таль­ной ма­ши­не и со­зда­ю­щим за­гру­зоч­ный код для ис­пол­не­ния в кон­трол­ле­ре.

При­нцип адап­та­ции уни­вер­саль­ных язы­ков про­грам­ми­ро­ва­ния был прост: 
в язык вво­ди­лись но­вые ти­пы пе­ре­мен­ных — «вхо­ды» и «вы­хо­ды» кон­трол­ле­ра, а так­же со­зда­ва­лась не­ко­то­рая биб­ли­о­те­ка под­прог­рамм, ре­а­ли­зу­ю­щих на­ибо­лее час­то встре­ча­ю­щи­е­ся ал­го­рит­мы. Про­грам­ми­ро­ва­ние уп­рос­ти­лось, но все еще ос­та­ва­лось слож­ным для ря­до­во­го тех­но­ло­га или «ав­то­мат­чи­ка-ки­пов­ца». И тог­да был сде­лан сле­ду­ю­щий шаг — со­зда­ние на ба­зе рас­прос­тра­нен­ных язы­ков про­грам­ми­ро­ва­ния про­це­дур­но­го ти­па спе­ци­а­ли­зи­ро­ван­ных тех­но­ло­ги­чес­ких язы­ков, ори­ен­ти­ро­ван­ных имен­но на ко­неч­но­го поль­зо­ва­те­ля на объ­ек­те. (В меж­ду­на­род­ном стан­дар­те та­кой тех­но­ло­ги­чес­кий язык по­лу­чил на­зва­ние «струк­ту­ри­ро­ван­ный текст».) Ос­нов­ным от­ли­чи­ем тек­сто­вых тех­но­ло­ги­чес­ких язы­ков от уни­вер­саль­ных ста­ло, во-пер­вых, рез­кое уп­ро­ще­ние син­так­си­са и се­ман­ти­ки (со­кра­ще­ние чис­ла ти­пов опе­ра­то­ров, слож­нос­ти вы­ра­же­ний и т. п.), а во-вто­рых, вве­де­ние в язык спе­ци­аль­ных тех­но­ло­ги­чес­ких по­ня­тий, ре­а­ли­зу­ю­щих ти­по­вые фун­к­ции кон­тро­ля и уп­рав­ле­ния. Здесь от­крыл­ся ог­ром­ный про­стор для твор­чес­т­ва, и чис­ло язы­ков та­ко­го ти­па на пер­вом эта­пе, ви­ди­мо, со­впа­ло с чис­лом фирм-раз­ра­бот­чи­ков. Та­кая раз­но­го­ло­си­ца ес­тес­твен­на для пе­ри­о­да ста­нов­ле­ния лю­бой об­лас­ти тех­ни­ки, что на­шло от­ра­же­ние и в до­ста­точ­но ску­пом опи­са­нии язы­ка в со­здан­ном по го­ря­чим сле­дам стан­дар­те.

На­ши со­бствен­ные по­ис­ки шли в том же на­прав­ле­нии. Убе­див­шись, с од­ной сто­ро­ны, в фун­кци­о­наль­ной ог­ра­ни­чен­нос­ти гра­фи­чес­ких язы­ков (РКС, фун­кци­о­наль­ных бло­ков и ша­го­вых пос­ле­до­ва­тель­нос­тей) и как ни­кто дру­гой зная не­до­стат­ки при­ми­тив­но­го тек­сто­во­го язы­ка Мик­рол кон­трол­ле­ров Ло­ми­конт, мы пред­при­ня­ли по­пыт­ку со­зда­ния та­ко­го язы­ка, ко­то­рый бы удов­лет­во­рял на­ше­му по­ни­ма­нию пот­реб­нос­тей поль­зо­ва­те­лей. На­зва­ние Мик­рол+ воз­ни­кло рань­ше ре­а­ли­за­ции са­мо­го язы­ка с целью под­чер­к­нуть не­ко­то­рую пре­ем­ствен­ность по от­но­ше­нию к язы­ку Мик­рол кон­трол­ле­ров Ло­ми­конт. В то же вре­мя оди­но­кий плюс пос­ле на­зва­ния «Мик­рол» не от­ра­жа­ет всей раз­ни­цы в фун­кци­о­наль­ной мощ­нос­ти этих язы­ков.

Ес­тес­твен­но, уве­ли­че­ние воз­мож­нос­тей не­из­беж­но в чем-то ус­лож­ня­ет язык, хо­тя и поз­во­ля­ет со­зда­вать бо­лее ком­пак­т­ные и над­е­ж­ные про­грам­мы, лег­ко ти­ра­жи­ро­вать на­йден­ные ре­ше­ния ти­по­вых за­дач. Од­на­ко все до­пол­ни­тель­ные и бо­лее слож­ные эле­мен­ты язы­ка не обя­за­тель­ны для ис­поль­зо­ва­ния и их опи­са­ние вы­не­се­но за рам­ки ос­нов­но­го ру­ко­вод­ст­ва по язы­ку. Еще один шаг в на­прав­ле­нии об­лег­че­ния жиз­ни раз­ра­бот­чи­ков был сде­лан за счет со­зда­ния тес­ной свя­зи меж­ду ин­тег­ри­ро­ван­ной сре­дой раз­ра­бот­ки, про­ек­том, в рам­ках ко­то­ро­го до­лж­на вес­тись ра­бо­та, и са­мим язы­ком. 

Пер­во­на­чаль­но сис­те­ма тех­но­ло­ги­чес­ко­го про­грам­ми­ро­ва­ния MicPlus со­зда­ва­лась для кон­трол­ле­ров се­рии «Тех­но­конт» — ТCМ51 и МФК [1]. Од­на­ко, учи­ты­вая то об­сто­я­тель­ст­во, что кон­трол­лер МФК, в сущ­нос­ти, яв­ля­ет­ся рас­ши­ре­ни­ем сис­те­мы вво­да-вы­во­да MicroPC, мы вы­яс­ни­ли, что адап­та­ция MicPlus к лю­бо­му IBM РС со­вмес­ти­мо­му кон­трол­ле­ру не со­став­ля­ет осо­бо­го тру­да и не обя­за­тель­но до­лж­на быть про­из­ве­де­на ав­то­ра­ми сис­те­мы. Для об­лег­че­ния этой про­це­ду­ры в со­став ин­тег­ри­ро­ван­ной сре­ды вклю­че­ны со­от­вет­ству­ю­щие ди­а­ло­го­вые сред­ст­ва. Каж­дый но­вый кон­трол­лер под­клю­ча­ет­ся к сис­те­ме пу­тем опи­са­ния ис­поль­зу­е­мых плат вво­да-вы­во­да, их ин­фор­ма­ци­он­ной ем­кос­ти, ти­па и имен об­слу­жи­ва­ю­щих эти пла­ты драй­ве­ров. 

Сис­те­ма Mic­Plus со­сто­ит из двух час­тей: ин­стру­мен­таль­ной, пред­на­зна­-чен­ной для раз­ра­бот­ки поль­зо­ва­тель­с­ких про­грамм, и це­ле­вой, ра­бо­та­ю­щей не­пос­ред­ствен­но в кон­трол­ле­ре (рис. 1). Це­ле­вая сис­те­ма со­дер­жит мо­ни­тор ре­аль­но­го вре­ме­ни и сред­ст­ва вво­да-вы­во­да ин­фор­ма­ции че­рез пла­ты и ка­на­лы свя­зи. Мо­ни­тор обес­пе­чи­ва­ет вы­тес­ня­ю­щую при­ори­тет­ную мно­го­за­дач­ность и уп­рав­ля­ет ра­бо­той под­сис­те­мы вво­да-вы­во­да, к ко­то­рой, в свою оче­редь, под­клю­ча­ют­ся драй­ве­ры для кон­крет­ных плат. Мо­ни­тор так­же обес­пе­чи­ва­ет за­груз­ку и за­пуск при­клад­ных про­грамм, офор­млен­ных в ви­де от­дель­ных EXE-мо­ду­лей. 

Ос­нов­ное по­ня­тие, с ко­то­рым ра­бо­та­ет поль­зо­ва­тель в ин­тег­ри­ро­ван­ной сис­те­ме MicPlus, – про­ект. Про­ект со­дер­жит спи­сок кон­трол­ле­ров, в каж­дом из ко­то­рых мо­жет быть не­сколь­ко за­дач – про­грамм поль­зо­ва­те­ля (ПрП). За­да­чам ука­зы­ва­ет­ся при­ори­тет и пе­ри­од за­пус­ка. От­сут­ст­вие пе­ри­о­да оз­на­ча­ет вы­пол­не­ние за­да­чи в не­пре­рыв­ном цик­ле.  Поль­зо­ва­тель опи­сы­ва­ет кон­крет­ный кон­трол­лер, ука­зы­вая по­сле­до­ва­тель­ность рас­по­ло­же­ния плат из спис­ка име­ю­щих­ся для дан­но­го ти­па кон­трол­ле­ра. Впос­лед­ст­вии при опи­са­нии пе­ре­мен­ных каж­до­му име­ни пе­ре­мен­ной ста­вит­ся в со­от­вет­ст­вие ее тип (ана­ло­го­вый или дис­крет­ный, вход или вы­ход) и ад­рес (но­мер пла­ты и но­мер сиг­на­ла дан­но­го ти­па на пла­те). На­ря­ду с та­ким «ге­ог­ра­фи­чес­ким» ад­ре­сом пе­ре­мен­ной мож­но ис­поль­зо­вать и ее по­ряд­ко­вый но­мер в кон­тек­с­те – пос­ле­до­ва­тель­ном мас­си­ве зна­че­ний сиг­на­лов дан­но­го ти­па, ко­то­рый фор­ми­ру­ет­ся драй­ве­ра­ми в па­мя­ти кон­трол­ле­ра.

Струк­ту­ра поль­зо­ва­тель­с­кой про­грам­мы вклю­ча­ет за­го­ло­вок и про­грам­мные бло­ки. В за­го­лов­ке, со­сто­я­щем из не­сколь­ких раз­де­лов, опи­сы­ва­ют­ся пе­ре­мен­ные, кон­стан­ты, шаб­ло­ны тек­сто­вых со­об­ще­ний, спи­сок вы­зы­ва­е­мых внеш­них биб­ли­о­тек, а так­же текст ис­поль­зу­е­мых в про­грам­ме про­це­дур и фун­к­ций. Про­грам­мные бло­ки, в свою оче­редь, име­ют за­го­ло­вок, в ко­то­ром при­ве­ден пе­ре­чень ло­каль­ных пе­ре­мен­ных, и про­грам­мные сек­ции, со­дер­жа­щие не­пос­ред­ствен­но текст про­грам­мы, опи­сы­ва­ю­щей ло­ги­ку кон­тро­ля и уп­рав­ле­ния тех­но­ло­ги­чес­ким объ­ек­том. В ин­тег­ри­ро­ван­ной сре­де струк­ту­ра про­грам­мы пред­став­ле­на в ви­де де­ре­ва (рис. 2), где каж­дая часть – за­го­ло­вок или про­грам­мный блок – мо­жет быть вид­на в сжа­том или рас­кры­том ви­де. Бло­ки и сек­ции име­ют име­на. Бло­кам свой­ствен­ны со­сто­я­ние (вклю­чен­ное или от­клю­чен­ное) при пер­вом за­пус­ке про­грам­мы и крат­ность вы­пол­не­ния по от­но­ше­нию к ее пе­ри­о­ду за­пус­ка. Вхо­дя­щие в со­став бло­ка про­грам­мные сек­ции так­же име­ют пер­во­на­чаль­ное со­сто­я­ние. Бло­ки и сек­ции во вре­мя сво­е­го вы­пол­не­ния мо­гут быть вклю­че­ны и от­клю­че­ны не­пос­ред­ствен­но про­грам­мой поль­зо­ва­те­ля или сред­ства­ми вер­хне­го уров­ня. Ко­ли­чес­т­во бло­ков и сек­ций, а так­же их раз­мер ог­ра­ни­че­ны толь­ко об­щим объ­емом опе­ра­тив­ной па­мя­ти кон­трол­ле­ра. Текст сек­ции вво­дит­ся в ок­не спе­ци­а­ли­зи­ро­ван­но­го ре­дак­то­ра, под­дер­жи­ва­ю­ще­го ввод лю­бых кон­струк­ций язы­ка по на­жа­тию со­от­вет­ству­ю­щих им «го­ря­чих» кла­виш, а так­же обес­пе­чи­ва­ю­ще­го син­так­си­чес­кую рас­крас­ку тек­с­та, ко­то­рая об­лег­ча­ет его вос­при­ятие и ви­зу­аль­ный кон­троль. Ко­ли­чес­т­во от­кры­тых од­нов­ре­мен­но для ре­дак­ти­ро­ва­ния окон про­грам­м­ных сек­ций или раз­де­лов за­го­лов­ка прак­ти­чес­ки не ог­ра­ни­че­но. В про­из­воль­ном мес­те про­грам­мы мо­жет быть рас­по­ло­жен ком­мен­та­рий.

Язык Мик­рол+ под­дер­жи­ва­ет ряд ти­пов дан­ных: ВА, АВ — ана­ло­го­вые вхо­ды и вы­хо­ды (це­лое — 2 бай­та), ВД, ДВ — дис­крет­ные вхо­ды и вы­хо­ды, РА и РД — ра­бо­чие (про­ме­жу­точ­ные) пе­ре­мен­ные, Ве — ве­щес­твен­ные (3 бай­та ман­тис­са и 1 байт по­ря­док), Дл — длин­ные (двой­ное це­лое — 4 бай­та), КБ и КС — клю­чи бло­ков и сек­ций (дис­крет­ные пе­ре­мен­ные, уп­рав­ля­ю­щие за­пус­ком и ос­та­но­вом со­от­вет­ству­ю­щих раз­де­лов про­грам­мы). В даль­ней­шем пред­по­лага­ет­ся так­же ос­то­рож­ное (не в ущерб про­сто­те язы­ка) ис­поль­зо­ва­ние не­ко­то­рых слож­ных ти­пов дан­ных (мас­си­вов и струк­тур). Над все­ми ана­ло­го­вы­ми пе­ре­мен­ны­ми мож­но вы­пол­нять че­ты­ре дей­ст­вия ариф­ме­ти­ки. Ре­зуль­тат мо­жет быть при­сво­ен пе­ре­мен­ной лю­бо­го ти­па, кро­ме вход­ной. Дис­крет­ные пе­ре­мен­ные, кро­ме вход­ных, мож­но вклю­чать и от­клю­чать, а так­же про­ве­рять их со­сто­я­ние. Дис­крет­ным кон­стан­там ВКЛ и ОТКЛ, с по­мощью ко­то­рых про­из­во­дят­ся эти дей­ст­вия, поль­зо­ва­тель мо­жет при­сва­и­вать раз­лич­ные име­на-си­но­ни­мы, ис­поль­зу­е­мые в про­грам­ме од­нов­ре­мен­но, на­при­мер, «От­крыть/За­крыть», «Впе­ред/На­зад», «Есть/Нет».

Кро­ме ана­ло­го­вых и дис­крет­ных пе­ре­мен­ных, в язы­ке Мик­рол+ су­щес­тву­ют так­же спе­ци­аль­ные пе­ре­мен­ные для сче­та вре­ме­ни – тай­ме­ры. Име­ет­ся пять ти­пов тай­ме­ров. Три из них – это тай­ме­ры сче­та вре­ме­ни с дис­крет­ностью сче­та 10 мил­ли­се­кунд (ТМД), од­на се­кун­да (ТМС) и од­на ми­ну­та (ТММ) со­от­вет­ствен­но. Кро­ме них, в язы­ке име­ет­ся два спе­ци­аль­ных тай­ме­ра: ВРЕ­МЯ (от­с­чет ас­тро­но­ми­чес­ко­го вре­ме­ни) и ДА­ТА (от­с­чет ка­лен­дар­ной да­ты).

На­ря­ду со зна­че­ни­ем тай­мер сче­та вре­ме­ни ха­рак­те­ри­зу­ет­ся со­сто­я­ни­ем: СТАРТ (тай­мер счи­та­ет вре­мя) или СТОП (зна­че­ние тай­ме­ра со вре­ме­нем не из­ме­ня­ет­ся). Ес­ли ис­ход­ное зна­че­ние тай­ме­ра сче­та вре­ме­ни пол­ожи­тель­но, то оно рас­тет до мак­си­маль­но­го це­ло­го зна­че­ния и тай­мер от­клю­ча­ет­ся (счет вре­ме­ни). Ес­ли ис­ход­ное зна­че­ние тай­ме­ра от­ри­ца­тель­но, то оно рас­тет до ну­ля и тай­мер так­же от­клю­ча­ет­ся (вы­дер­ж­ка вре­ме­ни).

Об­нов­ле­ние зна­че­ния вход­ных пе­ре­мен­ных в со­от­вет­ст­вии с те­ку­щим зна­че­ни­ем фи­зи­чес­ких вхо­дов кон­трол­ле­ра про­из­во­дит­ся пе­ред оче­ред­ным цик­лом ПрП; пе­ре­да­ча зна­че­ний вы­ход­ных пе­ре­мен­ных на вы­хо­ды кон­трол­ле­ра про­из­во­дит­ся пос­ле его за­вер­ше­ния. При­ра­ще­ние фи­зи­чес­ко­го вре­ме­ни, на­коп­ив­ше­е­ся за оче­ред­ной цикл вы­пол­не­ния ПрП, при­бав­ля­ет­ся к зна­че­нию тай­ме­ра пе­ред на­ча­лом но­во­го цик­ла.

Каж­дая пе­ре­мен­ная на­ря­ду со зна­че­ни­ем ха­рак­те­ри­зу­ет­ся со­сто­я­ни­ем бло­ки­ров­ки. Зна­че­ние раз­бло­ки­ро­ван­ной пе­ре­мен­ной фор­ми­ру­ет­ся в са­мом кон­трол­ле­ре, при этом зна­че­ния вход­ных пе­ре­мен­ных ВД и ВА за­ви­сят от вход­ных сиг­на­лов на мо­ду­лях вво­да дис­крет­ных и ана­ло­го­вых сиг­на­лов, в то вре­мя как зна­че­ния ос­таль­ных пе­ре­мен­ных мо­гут быть из­ме­не­ны в про­цес­се вы­пол­не­ния про­грам­мы. Ес­ли же пе­ре­мен­ная бло­ки­ро­ва­на, из­ме­не­ние сиг­на­лов на вхо­де кон­трол­ле­ра не при­во­дит к из­ме­не­нию со­от­вет­ству­ю­щих вход­ных пе­ре­мен­ных, а при вы­пол­не­нии  про­грам­мы не про­ис­хо­дит про­грам­мно­го из­ме­не­ния за­бло­ки­ро­ван­ных ра­бо­чих или вы­ход­ных пе­ре­мен­ных, вклю­че­ния или от­клю­че­ния бло­ки­ро­ван­ных бло­ков и сек­ций. Бло­ки­ров­ка тай­ме­ра оз­на­ча­ет, что уп­рав­ля­ю­щая про­грам­ма не мо­жет ни за­пус­тить, ни ос­та­но­вить тай­мер, ни при­сво­ить ему про­из­воль­ное зна­че­ние вре­ме­ни. Ес­ли тай­мер за­пу­щен, счет вре­ме­ни в нем про­дол­жа­ет­ся не­за­ви­си­мо от со­сто­я­ния бло­ки­ров­ки. Бло­ки­ро­ва­ние бло­ка или сек­ции не ос­та­нав­ли­ва­ет их ра­бо­ты, но не поз­во­ля­ет про­грам­ме уп­рав­ле­ния вклю­чать или от­клю­чать их.

Бло­ки­руя пе­ре­мен­ные, опе­ра­тор мо­жет с по­мощью средств вер­хне­го уров­ня или с пуль­та кон­трол­ле­ра, ес­ли та­ко­вой име­ет­ся, про­из­во­дить руч­ное уп­рав­ле­ние ис­пол­ни­тель­ны­ми ме­ха­низ­ма­ми, за­да­вать зна­че­ния вхо­дов (на­при­мер, при не­ис­прав­нос­ти дат­чи­ков вход­ной ин­фор­ма­ции), из­ме­нять за­да­ние ре­гу­ля­то­ра и т. д. Опе­ра­ция бло­ки­ро­ва­ния не­за­ме­ни­ма так­же при от­лад­ке про­грам­мы. 

В язы­ке Мик­рол+ су­щес­тву­ет два ос­нов­ных ти­па опе­ра­то­ров: без­ус­лов­ный и ус­лов­ный. Вы­пол­не­ние ус­лов­но­го опе­ра­то­ра за­ви­сит от ре­зуль­та­та про­вер­ки ло­ги­чес­ко­го ус­ло­вия, пред­став­лен­но­го в ви­де про­сто­­го или слож­но­го ло­­ги­чес­ко­го вы­ра­же­ния, в то вре­мя как без­ус­лов­ный опе­ра­тор вы­пол­ня­ет­ся всег­да, ког­да в про­цес­се вы­пол­не­ния про­грам­мы до не­го до­шла оче­редь.

Ус­лов­ный опе­ра­тор име­ет вид ЕС­ЛИ... ТОГ­ДА... ИНА­ЧЕ... Без­ус­лов­ные опе­ра­то­ры — это ариф­ме­ти­чес­кие вы­ра­же­ния, опе­ра­то­ры вклю­че­ния или от­клю­че­ния дис­крет­ных пе­ре­мен­ных, опе­ра­тор пе­ре­хо­да на мет­ку (толь­ко впе­ред по тек­с­ту), вы­зов про­це­ду­ры, вы­вод тех­но­ло­ги­чес­ко­го со­об­ще­ния (эти со­об­ще­ния, пред­на­зна­чен­ные для ин­фор­ми­ро­ва­ния опе­ра­то­ра-тех­но­ло­га или для от­лад­ки ПрП, мо­гут быть вы­ве­де­ны на прин­тер, дис­п­лей и т. п.). Ис­пол­ни­тель­ная часть ус­лов­но­го опе­ра­то­ра ана­ло­гич­на про­сто­му или со­став­но­му без­ус­лов­но­му опе­ра­то­ру. Ариф­ме­ти­чес­кие и ло­ги­чес­кие вы­ра­же­ния мо­гут со­дер­жать фун­к­ции. 

В язы­ке осоз­нан­но от­сут­ству­ют опе­ра­то­ры цик­ла, пос­коль­ку они мо­гут быть эле­мен­тар­но ре­а­ли­зо­ва­ны че­рез цикл са­мой про­грам­мы, а их на­ли­чие в про­грам­ме не толь­ко при­во­дит к ее по­тен­ци­аль­ной не­над­еж­нос­ти, но и де­ла­ет не­воз­мож­ным лю­бой про­гноз от­но­си­тель­но га­ран­ти­ро­ван­но­го вре­ме­ни вы­пол­не­ния.

Фун­к­ции и про­це­ду­ры мо­гут быть со­зда­ны поль­зо­ва­те­лем для кон­крет­ной ПрП — в этом слу­чае они по­ме­ща­ют­ся в ее за­го­лов­ке, а мо­гут быть рас­счи­та­ны и на при­ме­не­ние в раз­лич­ных про­грам­мах — тог­да со­зда­ют­ся биб­ли­о­те­ки. Поль­зо­ва­тель мо­жет фор­ми­ро­вать биб­ли­о­те­ки из про­грамм, на­пи­сан­ных как на Мик­рол+, так и на Си. Уже су­щес­тву­ю­щие биб­ли­о­те­ки обес­пе­чи­ва­ют ре­ше­ние за­дач ре­гу­ли­ро­ва­ния, ди­на­ми­чес­ких пре­об­ра­зо­ва­ний и дру­гих.

Со­здан­ная про­грам­ма поль­зо­ва­те­ля тран­сли­ру­ет­ся вхо­дя­щим в со­став сис­те­мы ком­пи­ля­то­ром, ко­то­рый со­зда­ет не за­гру­зоч­ный код, а про­ме­жу­точ­ное пред­став­ле­ние — про­грам­му на язы­ке Си. Имен­но бла­го­да­ря это­му под­хо­ду и обес­пе­чи­ва­ет­ся лег­кий пе­ре­нос сис­те­мы про­грам­ми­ро­ва­ния на раз­лич­ные це­ле­вые плат­фор­мы, а так­же ее от­кры­тость и рас­ши­ря­е­мость. 

На­йден­ные в хо­де тран­сля­ции ошиб­ки ото­бра­жа­ют­ся в спе­ци­аль­ном ок­не, из ко­то­ро­го воз­мо­жен пе­ре­ход на со­от­вет­ству­ю­щую стро­ку про­грам­мы.

Со­здан­ная про­грам­ма мо­жет быть за­гру­же­на в кон­трол­лер и за­пу­ще­на на вы­пол­не­ние в ра­бо­чем или от­ла­доч­ном ре­жи­ме (рис. 3). В сис­те­ме ре­а­ли­зо­ва­ны все стан­дар­т­ные фун­к­ции сим­воль­но­го от­лад­чи­ка (ос­та­но­вы, трас­си­ров­ка, про­смотр, из­ме­не­ние и вы­чис­ле­ние пе­ре­мен­ных).

Име­ю­щий­ся опыт при­ме­не­ния сис­те­мы про­грам­ми­ро­ва­ния MicPlus для кон­трол­ле­ров се­рии «Тех­но­конт» по­ка­зал воз­мож­ность со­зда­ния на­гляд­ных, ком­пак­т­ных и са­мо­до­ку­мен­ти­ру­е­мых про­грамм, ко­то­рые мо­гут быть пе­ре­не­се­ны с од­но­го ти­па кон­трол­ле­ра на дру­гой без ка­ких-ли­бо из­ме­не­ний в ис­ход­ном тек­с­те ПрП. Весь­ма важ­ной ока­за­лась воз­мож­ность ти­ра­жи­ро­ва­ния всех од­наж­ды на­йден­ных ре­ше­ний в пос­ле­ду­ю­щих про­ек­тах. На­ме­тив­ша­я­ся тен­ден­ция ко все бо­лее ши­ро­ко­му ис­поль­зо­ва­нию IBM РС со­вмес­ти­мых кон­трол­ле­ров обе­ща­ет этой мощ­ной сис­те­ме раз­ра­бот­ки про­грамм кон­тро­ля и уп­рав­ле­ния боль­шое бу­ду­щее. ●

Литература

  1. 1. Се­ре­жин Л.П. Мно­го­фун­кци­о­наль­ный ком­п-лекс про­грам­мно-ап­па­рат­ных средств для пос­тро­е­ния рас­пре­де­лен­ных сис­тем уп­рав­ле­ния — МФК «Тех­но­конт»// При­бо­ры и сис­те­мы уп­рав­ле­ния.– 1995.– № 10.

И.Е. Аблин — генеральный директор научно-производственной фирмы ИнСАТ

© СТА-ПРЕСС, 2025


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

31.12.1995 1350 0
Комментарии
Рекомендуем

ООО «ИнСАТ» ИНН 7734682230 erid = 2SDnjd8zAXZ
ООО «ИнСАТ» ИНН 7734682230 erid = 2SDnjeDFeN3
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться