Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

com port - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Промышленное программирование на С++ http://www.cyberforum.ru/cpp-beginners/thread898659.html
Привет! Ещё вопросик. Есть такое понятие, как "промышленное программирование на С++". Особенно вакансии некоторых солидных фирм пестрят такими фразиологизмами. Не подскажите, что понимать под...
C++ Исправить и дополнить распределитель памяти Добрый день. Изучаю книгу Страуструпа (ту, что для новичков). Там есть задание создать упрощённый вариант класса allocator с исп. функций malloc и free. Вот мой код: //Allocator.h... http://www.cyberforum.ru/cpp-beginners/thread898616.html
C++ извлечь данные из файла и вывести результаты тоже в файл
Здравствуйте. Есть вот такое задание -Даны пять действительных чисел. Выберите из них те, которые принадлежат интервалу (5; 16), и возведите их в квадрат. Для данного задания написал код программы...
Выручайте!Алгоритмы обработки символьной информации C++
Задачу необходимо предствить в виде формы(кнопка и 2 поля). В древнеяпонском календаре был принят 60-летний цикл из пяти 12-летних циклов,обозначенных цветами:зеленый,красный,желтый,белый, и черный.В...
C++ Какой компилятор поддерживает С++ 11? http://www.cyberforum.ru/cpp-beginners/thread898592.html
Привет! Какой-нибудь компилятор реализует уже стандарт С++ 11?
C++ Скомпилировалось с ошибкой Вот код: #include <iostream> using namespace std; int main() { cout < "Hello, World!"; } подробнее

Показать сообщение отдельно
djeyz
2 / 2 / 1
Регистрация: 01.04.2013
Сообщений: 70

com port - C++

11.06.2013, 19:16. Просмотров 497. Ответов 4
Метки (Все метки)

Помогите новичку, уже 3 недели мучаюсь, и все статьи перечитал!!Не понимаю в чем ошибка!
Написал программку в синхронном режиме передача данных(не важно каких), должен прислать ответ и записать в массив!Метод передачи little indean!

Должен прислать ответ в программку, что контрольная сумма не верна.
НА приборе экрана показывает ошибка контрольной суммы, значит данные уходят, но не приходит ответ в программку!
Необходимо что бы ответ записался через ReadFile()!!!
Еще вопрос "Число последующих байт" нужно указывать Сколько всего байтов посылаешь(т.е. 5 слов - значит 10 байт), или указывать количество данных (buff[4] - buff[7] - значит 4 байта)???

Настройки такие:

Посылается 5 СЛОВ:
0202h – 02h - номер режима, 02h-байт синхронизации
0004 - число последующих байт без контрольной суммы
xxxx - номер предела по току (0…8 соответственно для 50A…0.05A)
xxxx - номер предела по напряжению (0…2 соответственно для 220В…60В)
xxxx - Контрольная сумма CRC16 за все байты

Время ожидания ответа с учетом срабатывания реле переключающих пределы измерения до 1 сек.

Принимется:
Если норма:
0002h - 00-НОРМА, 02-синхронизация
0008h - число последующих байт
байты:
xxxx - установленный номер предела по току
(0…8 соответственно для 50A…0.05A)
xxxx - установленный номер предела по напряжению
(0…2 соответственно для 220В…60В)
xxxx - уровень доступа к прибору (0…2)
xxxx - схема подключения (001b, 010b, 100b соответственно
для 3ф.4пр., 3ф.3пр., 1ф.2пр.)
xxxx - Контрольная сумма CRC16 за все байты
Если не норма:
ff02h - ff-НЕ НОРМА, 02-синхронизация
0000 - число последующих байт = 0
xxxx - Контрольная сумма CRC16 за 2 байта



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <windows.h>
#include <iostream>
 
using namespace std;
HANDLE hCom;
COMMTIMEOUTS CommTimeOuts;
    DWORD bc;
    
int main(){
 
    unsigned char buf_in[10]; //массив куда записывается
 
    unsigned char buf[10];
//настройки которые посылаем 
    buf[0] = 0x02; //байт синхронизации
    buf[1] = 0x02; //номер режима
    
    buf[2] = 0x0A; //отсылаем 10 байт  00 0А
    buf[3] = 0x00;
    
    buf[4] = 0x0A; //какие то данные
    buf[5] = 0x00;
    buf[6] = 0x0C;
    buf[7] = 0x00;
    
    buf[8] = 0x00; // Контрольная суммма равна пока что 0
    buf[9] = 0x00;
      
// открываем порт и настраиваем
    char* pcComPort= "COM1";
    DCB dcb;
    int fSuccess;
    
    hCom=CreateFile(pcComPort, GENERIC_READ | GENERIC_WRITE, 
        0, NULL, OPEN_EXISTING, 0, NULL);
    if (hCom== INVALID_HANDLE_VALUE ){
        printf("error open COM1!\n");
        system("pause");
        return 1;
    }
    
    GetCommState(hCom, &dcb);
    dcb.BaudRate=CBR_115200; // CBR_
    dcb.ByteSize=8; 
    dcb.Parity=0;//NOPARITY;
    dcb.StopBits=0; //ONESTOPBIT;
    
    fSuccess=SetCommState(hCom, &dcb);
    if (!fSuccess){
        printf("popytka vyzova SetCommState error!\n");
        system("pause");
        return 1;
    }
    printf("COM port %s uspeshno sconfigurirovan\n", pcComPort);
 
    PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); 
    
//    CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
//      CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
//      CommTimeOuts.ReadTotalTimeoutConstant = 1000 ;
//      CommTimeOuts.WriteTotalTimeoutMultiplier = 0 ;
//      CommTimeOuts.WriteTotalTimeoutConstant = 1000 ;
      
      SetCommTimeouts( hCom, &CommTimeOuts ); 
    
//отправка данных    
    WriteFile(hCom,buf,10,&bc,NULL);
 cout << "WriteFile\n";
 
//чтение ответа из порта
   ReadFile(hCom,buf_in,sizeof &buf,&bc,NULL);
   cout << "ReadFile\n";
// показать что прочитал
   for(int i=0;i<10;i++){
    cout << buf_in[i];
}
    CloseHandle(hCom);
    
    system("pause");
    return 0;
}
Добавлено через 2 часа 20 минут
ААА!кто - нибудь помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru