Раздел: Как стать программистом / Секреты программирования /

Директива define

Lazarus IDE: Основы программирования в Windows Lazarus IDE: Основы программирования в Windows

Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее...

Начну издалека…

О панели оператора ОВЕН СП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 можно использовать в программе константу А.

У меня есть книга о директивах компилятора, где я подробно рассказал о том, что это и для чего. Правда, там речь идёт о директивах в Паскале. Директивы в С/С++ - это немного другое, хотя их назначение и применение по сути похожи на директивы Паскаля.


Первые шаги в программирование Первые шаги в программирование

Очень небольшая книга, которую можно прочитать буквально за 15 минут. Но эти 15 минут дадут вам представление о том, что такое программирование. И вы даже напишите свою первую программу. Для тех, кто интересуется программированием, но ещё не знает, что это такое, и не пробовал создавать программы (или пробовал, но не получилось). Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика