- •Введение
- •Создание функциональных блоков Создание новой библиотеки функциональных блоков
- •Последовательность разработки функциональных блоков
- •Использование групп, набор входов которых определяется пользователем.
- •Определение группы free_pingroup_def в фб.
- •Инструкция по внедрению шаблона cfbPropPageImpl в страничку свойств функционального блока.
- •Атрибуты входов, находящихся в группе free_pingroup_def.
- •Получение событий от таймера
- •Получение текущего времени
- •Проверка правильности в страничках свойств.
- •Использование таймера в функциональных блоках.
- •Признаки качества в Функциональных блоках Коды признака качества значения
- •Установка признаков качества выходов фб
- •Получение признака качества
- •Передача признаков качества входа выходу
- •Сообщения в фб.
- •Вывод информация об ошибках в фб в протокол работы.
- •Восстановление состояния фб при горячем рестарте.
- •Страницы свойств фб
- •Справка к фб
- •Справка к страницам свойств фб
- •Разработка визуальных фб на основе существующей библиотеки фб
- •Создание общего h-файла (подкл в файл описания фб и файл описания контрола)
- •Изменения в создании фб
- •Создание ActiveX контрола
- •Чтобы создать свойства нужно:
Справка к страницам свойств фб
Вызов справки к страницам свойств ФБ осуществляется через стандартный метод IPropertyPage::Help.
Для упрощения реализации HTML справки можно использовать шаблон IMSHtmlHelpPropPageImpl, определенный в файле «MSHtmlHelpPropPage.h». Для внедрения справки с использованием этого шаблона необходимо выполнить следующую последовательность действий –
В свойствах проекта на странице C/C++/Preprocessor в опцию "Additional include directories" добавить ..\\common (если это не было сделано ранее).
В stdafx.h файл подключить #include "MSHtmlHelpPropPage.h"
В списке наследования класса страницы свойст заменить класс IPropertyPageImpl на IMSHtmlHelpPropPageImpl.
В конструкторе класса страницы свойств присвоить переменной m_dwHelpFileID идентификатор строки (из STRINGTABLE), содержащей имя chm-файла.
В конструкторе класса страницы свойств присвоить переменной m_dwHelpContext идентификатор топика в chm-файле.
Если данной странице свойств соответствует несколько топиков (например, страница свойств может открываться для разных объектов с разным содержанием), то нужно определить функцию UINT GetHelpTopicID() Она должна возвращать текущий топик.
Разработка визуальных фб на основе существующей библиотеки фб
Здесь и далее предполагается, что уже существует библиотека ФБ и сами ФБ, которые будем делать визуальными.
Визуальный ФБ состоит из ФБ и ActiveX контрола. ФБ и контрол обмениваются данными через набор переменных. Пока этот набор должен быть фиксированным. Каждая конкретная переменная служит только для односторонней передачи данных. Все переменные индексируются числами, но предлагается набор макросов, позволяющий автоматически вводить для них идентификаторы. Для того, что-бы эти идентификаторы были доступны и в реализации ФБ, и в реализации контрола необходимо создать header-файл и включить его в файлы контрола и ФБ. Этот файл можно сделать единым для нескольких визуальных ФБ (даже если в разных наборах одинаковые переменные, конфликтов не будет!).
Создание общего h-файла (подкл в файл описания фб и файл описания контрола)
Набор имен переменных определяется с помощью таких макросов :
#ifndef __ ИМЯФАЙЛА _H__
#define __ ИМЯФАЙЛА _H__
BEGIN_VPIN_DEF (FBClass)
Name1,
Name2,
…..
END_VPIN_DEF
#endif //__ИМЯФАЙЛА_H__
FBClass – название класса ФБ (не контрола!).
Name1,Name2,… - имена переменных визуального ФБ. (В конце списка должна быть ‘,’)
Изменения в создании фб
Подключить файл #include "IVisualFBImpl.h"
В список наследования добавить public IVisualFBImpl<FBClass>
В список интерфейсов добавить COM_INTERFACE_ENTRY(IVisualFB)
Добавить в декларацию класса макрос
CONTROL_CLSID (CLSID_Control)
с CLSID контрола, соответствующего данному ФБ, который посмотреть в описании класса контрола (когда он будет вставлен) где-нибудь в списке наследования, например
public CComCoClass<CLampCtrl, &CLSID_LampCtrl>,.
В FinalConstruct добавить вызов InitVisualMap();
Создать раздел – определение типов переменных с помощью макросов
BEGIN_VISUAL_MAP(FBClass)
VISUAL_POUT_ENTRY (Name1, VT_R8, 1.0) – для передачи данных от ФБ к контролу
VISUAL_PIN_ENTRY (Name2, VT_I4, 20) – для передачи данных от контрола к ФБ
END_VISUAL_MAP
Name1, Name2 – имена переменных. Они должны быть те же, что и в разделе BEGIN_VPIN_DEF.
VT_* - тип переменной
1.0, 20 – значение по умолчанию, передается контролу при переходе в Runtime.
Если нужно реагировать на изменение данных в контроле, переопределить функцию virtual HRESULT OnVisualData (short sIndex) sIndex – не используется.
Она вызывается когда изменяются переменные, описанные с помощью макроса VISUAL_PIN_ENTRY.
В начале функций, где необходим доступ к переменным (для чтения или записи), вставить USE_VISUALFB(FBClass)
Чтения производится функцией HRESULT GetVisualData (Name, &var), запись - HRESULT SetVisualData (Name, var)
