- •2. Операционные системы реального времени. Цикл контроллера. Языки программирования систем реального времени (мэк 61131-3). Scada-системы.
- •3. Язык fbd на примере α-контроллера ф. Mitsubishi. Примеры: микроволновая печь или стиральная машина-автомат.
- •8. Блок Time sw (switch)
- •9. Блок Counter
- •10. Блок Compare (сравнения)
- •11. Блок Display
- •12. Блок HourMeter (Таймер)
- •4. Язык lad на примере контроллера s7-200. Пример: Реверсивное включение ад.
- •5. Язык stl на примере контроллера s7-200. Пример: Разветвленная программа на языке stl.
- •6. Язык scl на примере контроллера I-7188 ф. Icp das. Пример. Дублирование состояния входов на выходах.
- •7. Система команд для чтения/записи данных на модули, включенные в сеть rs-485. Библиотечные функции контроллера I-7188 для доступа к удаленным модулям.
- •8. Составные части и архитектура scada-системы Genesis32. Орс-технология для доступа к устройствам ввода-вывода.
- •9. Пользовательский интерфейс GraphWorX32. Создание “картинки” технологического процесса на Genesis32. Взаимодействие GraphWorX32 с тегами модулей ввода-вывода.
- •10. Назначение vba-скриптов Genesis32. Классы доступа к элементам экранной формы. Основные этапы создания vba-скрипта.
7. Система команд для чтения/записи данных на модули, включенные в сеть rs-485. Библиотечные функции контроллера I-7188 для доступа к удаленным модулям.
Система команд контроллера I-7188 EAD
А) Команды чтения и записи на порта
Контроллер I-7188 EAD имеет 8 дискретных входов и 7 дискретных выходов. Для чтения состояния дискретных входов и изменения состояния дискретных выходов можно использовать следующих команд:
Inp(порт) - считывание состояния дискретных входов.
Outp(порт, значение) – записывает значение в указанный порт.
int Kbhit (void) – проверяет, имеется ли символ в буфере клавиатуры. Если данных нет, то возвращает 0. Если данные имеются, то возвращает символ.
int Getch(void) - считывает один символ из порта СОМ1 и возвращает его (число от 0 до 255). Если в буфере порта не имеется символа, то функция будет ожидать до тех пор, пока не появится символ.
void Putch (int data) – посылает один символ на порт СОМ1 (только младший байт будет послан)
Б) Инсталлирование драйвера СОМ-порта и снятие драйвера
Перед использованием СОМ-порта, пользователь должен вызывать функцию InstallCom (или InstallCom1/2/3/4) для инсталляции драйвера СОМ-порта. Перед выходом из программы, пользователь должен вызывать функцию RestoreCom (или RestoreCom1/2/3/4) для снятия драйвера COM-порта.
В) Функции для работы с СОМ-портами
Функция проверки на наличие данных во входном буфере СОМ-порта:
int IsCom1(void);
Если буфер СОМ-порта пустой, то возвращает 0, если в буфере имеются данные, то возвращает 1. Если буфер СОМ-порта переполнен, то возвращает -7. Для снятия статуса переполнения следует считывать данных из СОМ порта с помощью функции ReadCom( ).
Функция чтения одного байта из входного буфера СОМ-порта
int ReadCom1(void);
Если чтение успешно, то возвращает ASCII-код символа (0 – 255), если ошибка чтения порта, то возвращает -1 (ошибка порта) или -6 (буфер пустой).
Функция посылки одного байта в СОМ-порт
int ToCom1(int data);
Функции передается ASCII-код передаваемого символа. В случае передачи байта возвращает 0, в противном случае -5.
Функция посылки n-байт данных в СОМ-порт
int ToCom1Bufn(char *buf, int no);
Функции передается адрес строки (buf) содержащего строку и количество передаваемых байтов. Если строка передана успешно, то возвращает 0 в противном случае -5.
Функция посылки строки в СОМ-порт
int ToCom1Str(char *str);
Функции передается адрес строки заканчивающиеся ASCII-нулем. Эта функция возвращает такие же значения, что и предыдущая функция.
Функция очистки всех данных из входного буфера СОМ-порта
int ClearCom1(void);
Возвращаемое значение 0.
Г) Функции для 5-цифрового ЖКД
Контроллер имеет 5 цифровой 7-и сегментный индикатор. Индикаторы пронумерованы как 1, 2, 3, 4 и 5 слева на право. Перед использованием их, пользователь должен вызвать функцию
void Init5DigitLed (void), и затем вызывать функцию:
int Show5DigitLed(int pos,int data)
Параметр pos может быть 1, 2, 3, 4 и 5 - определяет положение цифры. Параметр data может принимать значения от 0 до 17 (16-ичные цифры, 16 – пусто, 17- символ “-”).
Для вывода цифры с точкой следует вызывать функцию:
int Show5DigitLedWithDot(int pos,int data)
Пример. Вывод на индикатор числа 12.345
Show5DigitLed(1, 1);
Show5DigitLedWithDot(2, 2); //Будет показан “2.”
Show5DigitLed(3, 3);
Show5DigitLed(4, 4);
Show5DigitLed(5, 5);
Д) Функции для светодиода
Контроллер I-7188EAD имеет один светодиод, который, например, может показать режим работы контроллера. Для включения этого светодиода предназначена функция void LedOn(void), а для отключения светодиода – void LedOff(void).
Функция void LedToggle(void) переключает светодиод на противоположное состояние.
Е) Функция для задержки времени
void DelayMs(unsigned int time);
Эта функция задерживает время на указанное в параметре time число мс. Вызов этой функции не нуждается в инсталляции драйвера таймера.
Для посылки команд на модули 7000-серии следует использовать функцию:
int SendCmdTo7000 (int Port,unsigned char *Cmd,int ChkSum)
здесь Port – номер СОМ порта;
Cmd – строка, содержащая команду
Эта функция возвращает 0, если команда передана (ответ получен) или возвращает код ошибки.
После посылки команды, программа должна вызывать функцию
Int ReceiveResponseFrom7000(int Port, unsigned char *Buffer, long TimeOut, int ChkSum);
для получения ответа из модуля серии 7000.
- buffer – адрес буфера для сохранения ответа пришедшего из модуля 7000-серии.
- TimeOut – время прихода ответа (в мс). Функция ReceiveResponseFrom7000 контролирует время получения ответа.
Общие команды для модулей
Параметры обмена по сети RS485 по умолчанию
- Адрес: 01
- Скорость обмена: 9600 бод
- Контрольная сумма: отключена.
Рассмотрим общих команд на примере модуля I-7060D
1. $AAM – чтение имени модуля
Ответ: !AA(Data) – где Data имя модуля.
2. Команда ~** - Информирует всех модулей, что хозяин сети готов
Ответ: Ничего не возвращает
3. Команда $AA2 — чтение конфигурации
Ответ: !AA TT CC FF[chk](cr)
ТТ — тип модуля ввода/вывода: 40 для дискретных модулей.
СС – Скорость обмена
Код |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0А |
Скорость |
1200 |
2400 |
4800 |
9600 |
19200 |
38400 |
57600 |
115200 |
FF – Формат данных – определяет наличие контрольной суммы, и формат выводимых данных. Для дискретных модулей:
*1: Фронт сигнала для счетчика входного канала: 0=Задний фронт, 1=Передний фронт
*2: Контрольная сумма: 0=отключен, 1=включен
*3 :7050 = 000), 7060 = 001, 7052 = 010, 7053 = 011
4. Команда %AA NN TT CC FF — установка конфигурации
NN — новый адрес;
Ответ: !AA[chk](cr) — правильная команда.
5. Команда #** - Чтение каждого входа каждого модуля в сети RS-485 и сохранение их для дальнейшего опроса. Для опроса прочитанных данных должна выполняться команда $AA4.
/////////// Смотри еще команды в вопросе 6.