Mitsubishi Electric FR-D740-080-E6 [363/512] Рис 6 113 пример программы

Mitsubishi Electric FR-D740-080-E6 [363/512] Рис 6 113 пример программы
Параметры Обмен информацией и установка параметров
FR-D700 SC EC 6 - 213
Пример программы
Преобразователь частоты не принимает данные от внешнего компьютера, если они содержат
ошибки. Для подобного случая необходимо предусмотреть программу для выполнения пов-
торных попыток.
Каждая передача данных, например , рабочих указаний или контрольных функций, произво-
дится только после запроса на обмен данными, поступающего от внешнего компьютера. Пре-
образователь частоты не отправляет данные при отсутствии запроса. Поэтому необходимо
предусмотреть в программе запрос чтения данных.
В следующем примере представлено переключение в режим последовательной передачи
данных. Этот пример программирования написан в среде Microsoft Visual
®
C++
®
(вер. 6.0).
Рис. 6-113: Пример программы
#include <stdio.h>
#include <windows.h>
void main (void){
HANDLE hCom; // Коммуникационный идентификатор
DCB hDcb; // Структура для настроек коммуникации
COMMTIMEOUTS hTim; // Структура для настроек контроля времени
char szTx[0 x 10]; // Буфер передачи
char szRx[0 x 10]; // Буфер приема
char szCommand[0 x 10]; // Команда
int nTx,nRx; // для размеров буфера
int nSum; // для расчета контрольной суммы
BOOL bRet;
int nRet;
int i;
//**** Открывает порт COM1 ****
hCom = CreateFile ("COM1", (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom != NULL) {
//**** Настройка связи через порт COM1****
GetCommState(hCom,&hDcb); // Считывает текущую информацию связи
hDcb.DCBlength = sizeof(DCB); // Размер структуры
hDcb.BaudRate = 19200; // Скорость передачи = 19200 бит/с
hDcb.ByteSize = 8; // Длина данных = 8 бит
hDcb.Parity = 2; // Проверка на четный результат
hDcb.StopBits = 2; // Стоп-бит = 2 бит
bRet = SetCommState(hCom,&hDcb); // Установка измененных данных связи
if (bRet == TRUE) {
//**** Настройка контроля времени порта COM1****
Get CommTimeouts(hCom,&hTim); // Считывает текущее значение лимита времени
hTim.WriteTotalTimeoutConstant = 1000; // Лимит времени доступа для записи 1 с
hTim.ReadTotalTimeoutConstant = 1000; // Лимит времени доступа для чтения 1 с
SetCommTimeouts(hCom,&hTim); // Установка измененной настройки лимита времени
//**** Подача команды, переключающей режим преобразователя с номером станции 1 на сетевой режим ****
sprintf(szCommand,"01FB10000"); // Передаваемые данные (запись сетевого режима)
nTx = strlen(szCommand); // Размер передаваемых данных
//**** Выработка контрольной суммы ****
nSum = 0; // Инициализация контрольной суммы
for (i = 0;i < nTx;i++) {
nSum += szCommand[i]; // Расчет контрольной суммы
nSum &= (0xff); // Маскировка данных
}
//**** Выработка передаваемых данных ****
memset(szTx,0,sizeof(szTx)); // Инициализация буфера передачи
memset(szRx,0,sizeof(szRx)); // Инициализация буфера приема
sprintf(szTx,"\5%s%02X",szCommand,nSum); // Код ENQ + передаваемые данные + контрольная сумма
nTx = 1 + nTx + 2; // Длина данных кода ENQ + длина передаваемых данных + длина контр. суммы
nRet = WriteFile(hCom,szTx,nTx,&nTx,NULL);
//**** Процесс передачи ****
if(nRet != 0) {
nRet = ReadFile(hCom,szRx,sizeof(szRx),&nRx,NULL);
//**** Процесс приема ****
if(nRet != 0) {
//**** Отображение принимаемых данных ****
for(i = 0;i < nRx;i++) {
printf("%02X ",(BYTE)szRx[i]); // Вывод принимаемых данных на консоли
// Преобразование ASCII-кода в шестнадцатиричный вид. "0" отображается как число 30.
}
printf("\n\r");
}
}
}
CloseHandle(hCom); // Закрытие коммуникационного порта
}
}

Содержание

Похожие устройства

Скачать