Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
срв.doc
Скачиваний:
32
Добавлен:
26.04.2019
Размер:
1.71 Mб
Скачать

6. Язык scl на примере контроллера I-7188 ф. Icp das. Пример. Дублирование состояния входов на выходах.

Порт СОМ2 у контроллера I-71788EAD работает по интерфейсу RS-485. Как известно, этот интерфейс используется для создания распределенной системы сбора данных на основе модулей серии I-7000.

Для посылки команд на модули 7000-серии следует использовать функцию:

int SendCmdTo7000 (int Port,unsigned char *Cmd,int ChkSum)

здесь Port – номер СОМ порта;

Эта функция возвращает 0, если команда передана (ответ получен) или возвращает код ошибки.

После посылки команды, программа должна вызывать функцию

int ReceiveResponseFrom7000 (int Port,unsigned char *Buffer,long TimeOut, int ChkSum);

для получения ответа из модуля серии 7000.

Общие команды для модулей

Параметры обмена по сети RS485 по умолчанию

- Адрес: 01

- Скорость обмена: 9600 бод

- Контрольная сумма: отключена.

Рассмотрим общие команды на примере модуля I-7060D

1. $AAM – чтение имени модуля

Ответ: !AA(Data) – где Data имя модуля.

2. Команда ~** - Информирует всех модулей, что хозяин сети готов

Ответ: Ничего не возвращает

Модуль дискретного ввода/вывод I-7060D

Модуль I-7060D имеет 4 входа и 4 релейных выхода. Релейные выходы RL1 и RL2 имеют нормально разомкнутые контакты, а релейные выходы RL3 и RL4 имеют переключающиеся контакты.

Основные команды для работы с входами и выходами

1. @AA - Чтение состояния дискретных входов/выходов.

Ответ: >(Data)

здесь (Data) – прочитанное состояние дискретных входов/выходов.

Пример. Команда: @01. Ответ: >0F09

0F – состояние выходов.

09 – состояние входов.

2. @AA(Data) - Установка дискретных выходов.

Data – значение выходных данных. Один символ для выходных каналов, меньше чем 4. Для модуля I-7060 Data принимает значения от 0 до F.

Ответ: >

Пример. Команда: @01F. Ответ: >

Установка всех выходов на лог. 1.

3. #AABBDD - Установка дискретных выходов.

Эта команда дублирует предыдущую команду. BB – определяет режим вывода:

1. BB = 00 – вывод на все каналы. При этом DD определяет состояние выходов. Для модуля I-7060 DD может находиться от 00h до 0Fh.

2. BB = 1c – установка значения одного канала. Число с – определяет номер канала. Для модуля I-7060 число с = 03. При этом DD определяет состояние выхода: DD=01 – установка канала; DD=00 – обнулить канал.

Ответ: Правильная команда >

Пример. Команда: #01 00 0F. Ответ: >

Предполагаемый модуль I-7060 с адресом 01. Установка всех выходов 0Fh=1111b. Возвращает успешное выполнение команды.

4. $AA6 - Чтение состояния дискретного ввода/вывода

Ответ: !(Data)

(Data) значение дискретного ввода/вывода. Для модуля I-7060D ответ будет например, таким: !0F0900. Назначение цифр:

0F - состояние 4-х выходов,

09 – состояние 4-х входов,

00 – ничего не означает.

Биты 16-ичной цифры определяют состояние соответствующего входа или выхода.

5. $AA4 - Чтение синхронно выбранных данных

Ответ: Правильная команда: !S(Data)

Неправильная команда: ?AA

S – статус синхронных данных, 1 - первое чтение, 0 – повторное чтение.

Пример. Команда: $014. Ответ: !10F00

Чтение по адресу 01. S=1 – первое чтение. Данные – 0F – состояние выходов; 00- состояние входов для модуля I-7044.

6. Команда #** - синхронное чтение модулей.

ПРИМЕР: Дублирование состояния входов на выходе

#include

Int data, quit=0;

Unsignes_char Response [40], Command [40], in;

Void

{

InstallCom2(9600,8,0);

Strcat(Command, “@01”);

//Цикл контроллера

While (!quit)

{

If (kbhit())

{

Data=Getch();

If (data==’q’)quit=1;

}

SendCmdTo7000(2,”@01”,0);

ReceiveResponseFrom7000(2,Response,10000L,0);

//ответ: >0F0A

In=Response[4];

Command[3]=in;

Command[4]=0;

SendCmdTo7000(2,Response,10000L,0);

}

//конец цикла

RestoreCom2();

}