Как да СКАДнаписа

Искам да започна с факта, че в края на миналата година узря известна критична маса, която ме принуди да седна и да започна процеса на пускане на нова версия на моята система Scud. Опитът и разработките, натрупани през това време, станаха основа за изцяло нова концепция на продукта, но при условие, че се запази неговата архитектурна цялост и идеология. И така, сега се подготвя за пускане нова версия на моята scada, номер 2.0!

Сериозно е преработен, въпреки че дори бих предпочел проста концепция - пренаписан е. Да, имаше идеи, имаше прототипи, имаше готова архитектура и продукт, който работеше и се доказа в бойни тестове и реални приложения. На базата на всичко това, както и на новите ми щури идеи, сега се пише изцяло нова система, но съобразена с всичко изброено по-горе.

Най-важното нещо, което сериозно ме забави да навляза в пътя на разработката на нова версия е грешката, която много разработчици на такива системи допускат, когато става дума за етапа на разработка и разработване на нови версии - непрекъснатостта на тези версии. Това е един много сериозен препъни камък, който на всеки гладък път създава сериозна пречка, в която се спъва почти всеки, който върви по него. Много е трудно да се направи нещо ново, което да не отрича или поддържа старото, често защото е наистина ново и старото вече не може да бъде притиснато в тази нова концепция. Но по-голямата част от потребителите не са стари и нови, а е непрекъсната линия, която се простира от старо към ново и не може просто да вземе и да се счупи, защото разработчикът на продукта е решил, че новото ще бъде такова и всичко старо трябва да бъде преработено или изоставено. Този въпрос сериозно ме безпокои. Но аз й промих мозъка малко иРеших да опитам един интересен начин, който според мен може да минимизира проблемите при преминаване към нова система. И дори повече от това – новата система ще може да се интегрира в съществуващи стари версии на проекти и постепенно, стъпка по стъпка, ще даде възможност на разработчика да направи плавен преход към нова версия на съществуващи и съществуващи системи. Но подробностите за тази идея малко по-нататък в текста.

Единична среда за разработка с MDI поддръжка.

Нов графичен двигател

Най-основната част от система, която е пренаписана от нулата. И дори не просто пренаписан - всъщност създадох напълно нов графичен двигател на системата, базиран на технологии, които бяха нови за мен. В същото време се опитах да заложа в него идеи, които ще станат основа за реалното разделяне на инженерната и дизайнерската работа на две отделни области, но насочени към един резултат в разработването на потребителски интерфейси.

Аз, като практикуващ инженер, отдавна вярвам, че творческият компонент не подлежи на обучение и обучение, талантът не се ражда в хода на упорито и старателно развитие. Така може да се роди и усъвършенства умението, нищо повече. Дори и с вилица да ме кълнете, никой никога няма да ме убеди, че талантът може да се внуши и усъвършенства. Не вярвам в компетентен инженер, който ще нарисува красив и най-важното удобен за потребителя интерфейс! На практика това не ми се е случвало. Дайте представа за удобството му - да! Теглене - НЕ! Абсолютно! Това е талант! И той е рядкост в комбинация с инженерство. Затова винаги съм се стремял да гарантирам, че работата по разработването на графични интерфейси винаги е била разделена на две области: дизайн, реализация. Както се казва: на Цезар - на Цезар, а на ключаря - ... И това е единственият начин да го направите удобно, красиво и функционално. И двете от тезикомпонентите трябва да бъдат направени от двама души с различни професии: дизайнер (дизайн) и инженер (внедряване). В новата графична система реших да опростя възможно най-много поддръжката за преходи от оформлението на дизайна към неговото изпълнение и обратно, за да го направя от край до край. Това означава, че това, което инженерът прави като скици, може да бъде предадено такова, каквото е (във вектор, не чертежи) на дизайнера и след това върнато от дизайнера такова, каквото е (във вектор, не чертежи) обратно в scada и да продължи да редактира графиките с помощта на scada, без да нарушава това, което е направил дизайнерът. Днес, където и да става въпрос за такива методи за разработване на интерфейс, обменът с дизайнера и обратно се извършва само на ниво графични изображения, които се използват максимум като субстрат или като фон, нищо повече. Искам инженерите да спрат да бъдат художници и да изпълняват задачите си, а художниците да могат най-адекватно да приемат и връщат оформленията на инженерите. Това е една от целите на бъдещата система.

И втората основна задача на графиката в новата система е да намали натоварването на процесора. В текущата 1-ва версия на моята scada всички графики са зависими от процесора, така че това започна да се проявява в големи решения. Това също повлия на интерактивните възможности на GUI, ограничавайки част от взаимодействието с потребителя.

Съвместимост с предишна версия.

Както казах по-горе, един от честите проблеми на повечето разработчици на scud е поддръжката за наследяване на разработките при преминаване към нови версии. Всички твърдят, че има наследство и всичко старо може да бъде прехвърлено в новото, но, както показва практиката, списъкът с „нюанси“ и „ограничения“ често отрича подобни твърдения и дори това, което изглежда, че е там, не може да се използва за нищо повече от „играене“. Не казвам, че това е пълен проблем, но- често се случва и много често.

Реших за себе си, че само едно нещо ще ми позволи да направя това повече или по-малко компетентно - да забраня на системата да зарежда и запазва проекти в родния си нов формат по време на разработката и да зарежда проекти само във формата на предишната версия. Дори за да дебъгвате някоя функция, първо трябва да създадете проект с нея във версия 1.0 и едва след това да я отворите във версия 2.0 и да извършите проверка. И ако функцията е напълно нова, тогава за да я тествате, създайте прост проект от нулата.

Най-малкото това ограничение ни принуждава да изработим точно поддръжката на стари разработки с преобразуването им в нови формати и засега изглежда, че работи.

До края на този месец планирам да разпространя предварителна версия за тестване сред потребителите на системата и да получа обратна връзка. Но това ще бъде направено само сред тези, които сега наистина работят с текущата 1-ва версия на системата.

В допълнение към съвместимостта беше решено, че на ниво мрежов протокол, новата версия ще отговаря напълно на спецификацията на 1-ва версия. Това ще даде възможност, като имате готово работно време в 1-ва версия, да го отворите в новата версия 2.0 и да конвертирате, например, AWP възли или да добавите нови с нова графика и да ги стартирате вече в рамките на наистина работеща система. Благодарение на поддръжката на същата спецификация, тази процедура трябва да осигури плавен преход към нова версия на системата, без да нарушава всичко, което е, и глобално лопата и преработване на всичко подред. Да видим дали идеята ми ще се отплати. Практиката ще покаже, както и обратната връзка от разработчиците и потребителите.

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".