Параметры обмена по сети RS485 по умолчанию
Передача команд и прием ответов из модулей серии 7000
Порт СОМ2 у контроллера I-71788EAD работает по интерфейсу RS-485. Как известно, этот интерфейс используется для создания распределенной системы сбора данных на основе модулей серии I-7000.
Для посылки команд на модули 7000-серии следует использовать функцию:
int SendCmdTo7000 (int Port,
unsigned char *Cmd,
int ChkSum)
здесь Port – номер СОМ порта;
Cmd – строка, содержащая команду (массив символов заканчивающиеся ASCII нулем). Команда не должна заканчиваться символом 0x0d. Эта функция будет сама посылать этот символ.
ChkSum – 1, если посылать команду с контрольной суммой и 0, если посылать команду без контрольной суммы. Если контрольная сумма разрешен, то эта функция будет добавлять в конец команды 2 байта контрольной суммы.
Эта функция возвращает 0, если команда передана (ответ получен) или возвращает код ошибки.
Функция SendCmdTo7000 будет контролировать направление передачи по RS-485, т.е. вначале переключает сеть на передачу, а после передачи переключается на прием.
После посылки команды, программа должна вызывать функцию
int ReceiveResponseFrom7000 (int Port,
unsigned char *Buffer,
long TimeOut,
int ChkSum);
для получения ответа из модуля серии 7000. Если посланная команда не посылает ответа, то не следует вызывать эту функцию. Эта функция имеет почти такие же параметры, что и предыдущая функция:
- Port – номер порта, должен быть 1 или 2 для портов СОМ1 или СОМ2.
- buffer – адрес буфера для сохранения ответа пришедшего из модуля 7000-серии. Ответ заканчивается символом 0х0d. Эта функция удаляет этот символ (а точнее, заменяет его ASCII-нулем). Если контрольная сумма включена, то эта функция будет контролировать его и удалить контрольную сумму из сообщения.
- TimeOut – время прихода ответа (в мс). Функция ReceiveResponseFrom7000 контролирует время получения ответа. Если за это время не получен символ 0x0d, функция возвращает ошибка TimeOut (-5).
- ChkSum равен нулю, если контрольная сумма отключена, и равна 1, если контрольная сумма включена.
До вызова команды получения ответа пользователь должен быть уверен, что все данные отправлены СОМ портом. Для этого предназначена функция:
Int WaitTransmitOver2(void);
При передаче данных эта функция возвращает 0, в противном случае TimeOut (-5). В конце заметим, что имеются аналоги этой функции для других СОМ-портов.
Общие команды для модулей
Параметры обмена по сети RS485 по умолчанию
- Адрес: 01
- Скорость обмена: 9600 бод
- Контрольная сумма: отключена.
Рассмотрим общих команд на примере модуля I-7060D
1. $AAM – чтение имени модуля
Ответ: !AA(Data) –где Data имя модуля.
2. Команда ~** - Информирует всех модулей, что хозяин сети готов
Ответ: Ничего не возвращает
3. Команда $AA2 — чтение конфигурации
Ответ:!AA TT CC FF[chk](cr)
ТТ — тип модуля ввода/вывода:40для дискретных модулей.
СС –Скорость обмена
Код | 0А | |||||||
Скорость |
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.
1. Модуль дискретного ввода/вывод I-7060D
Модуль I-7060D имеет 4 оптоизолированного входа. Схема включения входных сигналов представлена ниже:
На входы могут подаваться напряжения до 30 В. Уровень лог. 0 до 1 В, уровень лог. 1 – от 4 В до 30 В.
Модуль I7060D имеет 4 релейных выхода. Релейные выходы RL1 и RL2 имеют нормально разомкнутые контакты, а релейные выходы RL3 и RL4 имеют переключающиеся контакты. Контакты могут пропускать токи до 0.6 А при напряжении ~125 В и токи 2 А при напряжении =30 В.
Структурная схема модуля I-7060D представлена ниже: