Ваша первая программа на JavaScript - несколько вариантов
Некоторые особенности и фишки, которые можно применять при редактировании файла в Dev-C++
Перевод русских букв на латиницу с возможностью удаления пробелов и преобразования в маленькие буквы
Как переименовать файл в Паскале
[АП 2023/02] - свежий номер журнала

Как стать успешным фрилансером
Раздел: Как стать программистом / Секреты программирования /
Директива define
![]() |
Все способы изучить Python
Каждый раз, изучая какую-то новую науку, мы задаёмся вопросом - где взять обучающие материалы. Конечно, сегодня нам помогает в этом Интернет. Но иногда на поиски уходит очень много времени, а нужного результата мы не получаем... Собрал для вас кучу полезных ссылок для изучения Python. не благодарите ))) Подробнее... |
Начну издалека…
О панели оператора ОВЕН СП3хх
Я занимаюсь автоматизацией, и в своей работе нередко использую панели оператора российского производителя ОВЕН. Эти панели по цене в 1,5-2 раза дешевле таких же импортных, и при этом по функционалу и качеству импортным не уступают.
Для того, чтобы приспособить панель для работы на определённом производстве, данную панель надо настроить соответствующим образом. Для этого существует специальная программа-конфигуратор, где создаются экраны, диалоговые окна, рисунки, кнопки и другие графические элементы, с помощью которых оператор взаимодействует с системой управления (см. видео выше).
Обычно этого вполне достаточно. Однако я часто работаю над сложными проектами, где обойтись только конфигурированием не получается. Приходится применять и программирование. К счастью, для этих панелей можно создавать макросы на языке Си, и тем самым решать почти любые задачи.
Также в программе-конфигураторе есть эмулятор работы панели. С его помощью на экране компьютера можно посмотреть, как будут выглядеть экраны панели, проверить действие кнопок и других элементов.
Но! Есть одна маленькая неприятность - в этом эмуляторе нельзя проверить работу макросов.
Конечно, можно загрузить конфигурацию в панель и проверить работу макросов непосредственно в панели. На этапе проектирования я так и делаю.
Но как быть, если проект уже работает и панель уже используется на объекте, который может находиться очень далеко от вашего рабочего места, и понадобится внести изменения в какой-либо макрос?
Изменения то внести можно, но проверить правильность работы макроса будет нельзя, если у вас нет под рукой панели. И может случиться так, что вы приедете за 300 вёрст на объект, зальёте конфигурацию в панель, а макрос работать не будет. Как быть?
Как говорится, “голь на выдумки хитра”. Если мы не можем себе позволить держать всегда панель в запасе для экспериментов, то мы сможем проверить работу макроса иначе.
Как? Используя творческий подход и некоторые возможности языка Си…
Программа на языке Си
Поскольку для создания макросов в панели используется язык Си, то мы можем написать исходный код макроса в любой среде разработки, где можно создавать программы на Си, откомпилировать его и проверить, правильно ли работает этот код. Я для этих целей использую Dev-C++, потому что это простая и шустрая среда, которая поддерживает языки программирования С/С++.
ВАЖНО!
Советую создавать программу именно на языке Си, а не на С++. Потому что при использовании С++ можно случайно применить в исходном коде конструкции, которые не поддерживаются языком Си, и это не позволит использовать исходный код в панели оператора, где применяется чистый Си.
Однако и это ещё не всё. В конфигураторе панели оператора имеются стандартные функции, которых нет в языке Си (например, функция SetPSB, которая устанавливает указанный регистр панели). Кроме того, чистый Си не поддерживает такие типы данных, как WORD, которые поддерживаются конфигуратором панели.
Поэтому придётся творчески отнестись к созданию и проверке программы на компьютере, которую потом можно будет использовать в виде макроса в панели.
Тип данных WORD в Си
Как известно, в языке Си нет типа данных WORD. А вот в программе-конфигураторе, где мы пишем макросы для панели, такой тип есть.
Можно, конечно, использовать другие типы данных. Но тогда не получится просто скопировать код из Dev-C++ в панель - придётся потом исправлять типы данных.
Лучше сразу сделать так, чтобы не пришлось тратить время на исправление кода в панели. Например, создать свой тип данных с именем WORD.
Сделать это можно с помощью директивы define следующим образом:
#define WORD unsigned short
Здесь мы для типа unsigned short, который имеется в Си, определяем новое имя WORD. И далее в программе мы можем сделать, например, так:
WORD PSW402 = 0;
То есть объявить переменную типа WORD. Хотя на самом деле, это, конечно, будет переменная типа unsigned short. Но нам это не важно, потому что оба этих типа имеют одинаковый диапазон значений, а слово WORD для нас удобнее.
И вот таким вот образом мы можем написать программу на компьютере, проверить её работу, а потом просто скопировать исходный код в макрос панели.
Ну и напоследок немного о директиве define.
Директива define используется в языке С для того, чтобы назначить новое имя для какого либо типа или другой конструкции языка. С помощью этой директивы можно создавать новые типы данных или, например, объявлять константы:
#define A 100;
После этого вместо числа 100 можно использовать в программе константу А.
У меня есть книга о директивах компилятора, где я подробно рассказал о том, что это и для чего. Правда, там речь идёт о директивах в Паскале. Директивы в С/С++ - это немного другое, хотя их назначение и применение по сути похожи на директивы Паскаля.
Подписаться на канал в RuTube
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
![]() |
Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее... |