Pull to refresh
2
Алексей Муравицкий@a_muravitskiy

User

1
Subscribers
Send message

Как всё это нарисовать на драконе?

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

Там очень обширная программа каскадного регулятора агрегатов по 50 параметрам, с нечеткой логикой, и таких приемов очень много.

При оптимизации в драконе я добился выполнения по самой длинной ветке основной программы 45 нс, и интерфейс обменивается данными со всеми 10 агрегатами за 1 раз в 1 мс по скоростной шине.

Возможно я не ответил на Ваш вопрос, т.к до конца его не допонял, т.к использую Дракон уже 10 лет, и мозг не плохо перестроился под другой угол зрения на программирование🙏

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

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

Приятно общаться с Умным Человеком🙏

Руководитель позвонил, текущая операция прервалась? (Икона вопрос метода Важный звонок?) -это управляющий метод, который использует глобальный флаг "л_Позвонил телефон", из структуры "Возможные звонки", куда входят все возможные звонильщики. В методе обрабатываем приоритет звонящего, результат звонка, стоит ли прерывать текущую операцию, или это "пустозвон". Т.к метод будет для категории лиц общий можно сказать что это метод обработки события.

Результат работы метода завершаем текущую операцию, или продолжаем. Если завершаем то выходим из текущей вставки или метода.

Я так вижу процесс, но Вы можете со мной не согласиться🙏

Дракон может показать вам поведение потоков отдельной функции, но не может наглядно изобразить их взаимосвязь.

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

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

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

Возможно Вы с этим работаете?

Но ведь дракон позиционируется не только для программирования, но и, например, для описания бизнес-процессов.А если ваше прерывание является частью процесса? Скажем, основной рабочий процесс состоит из 50 подзадач (то есть икон "Action") с циклами и ветвлением. И по звонку руководителя работник должен этот процесс прервать, выполнить новое задание, а потом продолжить процесс с того места, на котором он остановился. Как изобразить это прерывание на драконе.

Здесь как, и в классическом программировании, я вижу отсутствие четко заданного цикла алгоритма.

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

Коллеги, извините я, польской аннотацией с конца сообщения читаю😏

Вероятно я отвечаю не впопад, и не по теме, заранее извините🙏

Прервать поиск это логическая переменная, Да или Нет, когда Вы сбрасываете в интернете поиск, по факту в функции Вы сбрасываете флаг триггера искать, или совсем выкидываете процесс функции поиска, если Вы закрыли вкладку поиска в браузере. За прерывание функции уже отвечает планировщик задач ОС. Например:

Для Виндовс

Не примите за замечание🙏, сам часто работаю с Драконом. Для упрощения обработки сигналов, если Вы поклонник ООП можно использовать вставки, методы, ну а если Вы поклонник процедурного программирования, можно и на функциях, причем Функции или Метод, могут быть как икой действия, обычно это вычислительные алгоритмы, или алгоритмы со структурными и массивными возвращаемыми значениями, так и управляющими, используются для изменения маршрута, в иконе Вопрос

Уважаемый Коллега, подскажите пожалуйста, приходилось много кода писать, может я что то упускаю, на я не припомню чтобы в коде где то через строчку, писалось прерывание по событию с возвратом в процесс. На сколько я знаю за разбиение на точки останова (они же точки прерывания, кстати мы все ими пользуемся при отладке кода) отвечает компилятор, программист о них не задумывается. Если Вы посмотрите на переработанный код компилятором в ассемблер например:

@MUL3:
MOV Word Ptr Pid_BpA2[30],0 { Hilfsregister 1.1 }
MOV Word Ptr Pid_BpA2[28],0 { Hilfsregister 1.2 }
MOV Word Ptr Pid_BpA2[26],0 { Hilfsregister 1.3 }
MOV Word Ptr Pid_BpA2[20],AX { Hilfsregister 2.3 }
MOV Word Ptr Pid_BpA2[22],DX { Hilfsregister 2.2 }
MOV Word Ptr Pid_BpA2[24],CX { Hilfsregister 2.1 }
OR BX,BX
JNZ @MUL30 { BX <> 0 }
OR DX,DX
JNZ @MUL31 { DX <> 0 }
JMP @MUL32

@MUL30:
MOV AX,DX
MUL BX { DX,AX = AX BX }
JO @MUL34 { љberlauf }
OR AX,AX
JS @MUL33 { AX negativ }
MOV Word Ptr Pid_BpA2[26],AX { Hilfsregister 1.3 }
MOV AX,Word Ptr Pid_BpA2[20] { Hilfsregister 2.3 }
MUL BX { DX,AX = AX
BX }
ADD Word Ptr Pid_BpA2[26],DX { Hilfsregister 1.3 }
JO @MUL34 { љberlauf }
MOV Word Ptr Pid_BpA2[28],AX { Hilfsregister 1.2 }
@MUL31:
MOV AX,Word Ptr Pid_BpA2[22] { Hilfsregister 2.2 }
MOV CX,Word Ptr Pid_BpA2[24] { Hilfsregister 2.1 }
MUL CX { DX,AX = AX CX }
ADD Word Ptr Pid_BpA2[28],AX { Hilfsregister 1.2 }
ADC Word Ptr Pid_BpA2[26],DX { Hilfsregister 1.3 }
JO @MUL34 { љberlauf }
@MUL32:
MOV AX,Word Ptr Pid_BpA2[20] { Hilfsregister 2.3 }
MUL CX { DX,AX = AX
CX }
ADD DX,Word Ptr Pid_BpA2[28] { Hilfsregister 1.2 }
ADC Word Ptr Pid_BpA2[26],0 { Hilfsregister 1.3 }
JO @MUL34 { љberlauf }
MOV CX,Word Ptr Pid_BpA2[26] { Hilfsregister 1.3 }
OR BX,BX
JMP @MUL35

@MUL33:
MOV AX,7fffh
INC AX
@MUL34:
MOV AX,0ffffh
MOV DX,0ffffh
MOV CX,7fffh { CX,DX,AX = + max. }
@MUL35:
RETN

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

Вот здесь, мне не понятна Ваша мысль, по чему на блок схеме должны рисоваться прерывания, т.к схема является эквивалентом кода "на строке" в графическом виде, где каждая икона это фактически в 90% случаев, один кейс ассемблера, разверните пожалуйста Вашу мысль?

Так же не совсем понятна мысль с асинхронными процессами:

Все мы с Вами прекрасно знаем истину -Процессор в единицу времени может выполнять только одну команду, то есть вся асинхронность, она больше квази (мнимая асинхронность) . Какую именно команду в единицу времени выполняет процессор, это уже работа программиста, как выставить прерывания и приоритеты программ и функций к исполнению.

В каких то IDE этот процесс слегка автоматизирован, в каких то ЯП, есть специальные библиотеки (Которые написаны на этом же ЯП), которые отвечают за обработку событий и системные семафоры. На Древне-Русском ЯП (Это было давно, давно...😏) это называется ДИСПАК (диспетчер пакетов, ну кстати есть еще несколько названий СЛУГА и Планировщик).

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

Интересно узнать Ваше мнение и Ваше видение процессов обработки событий 🙏

Information

Rating
Does not participate
Registered
Activity

Specialization

Алгоритмист
Lead
From 1,200,000 ₽
SQL
OOP
C++
C
Qt
Algorithms and data structures
Applied math
Software development