2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 72
1

com port

11.06.2013, 19:16. Показов 1013. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите новичку, уже 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2013, 19:16
Ответы с готовыми решениями:

Com port и С++
Хочу отослать данные по ком порту на контроллер.Вот только беда,не отсылается всё сообщение,а...

Com port
Помогите пожалуйста найти библиотеки для работы с COM

Работа с com port
подскажите пожалуйста!! написал программку, отправляет запрос на устройство пакет данных (без...

Работа с Serial port
Всем доброго времени суток! Я начинающий программист-самоучка (С/С++, Pascal). Уже...

4
2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 72
12.06.2013, 19:26  [ТС] 2
Форумчата помогите чем можете
0
 Аватар для kazak
3570 / 2717 / 348
Регистрация: 11.03.2009
Сообщений: 6,254
13.06.2013, 11:58 3
У Вас в случае нормы будут переданы 14 байт, в противном случае - 6, а в программе Вы пытаетесь считать 10.
1
2 / 2 / 3
Регистрация: 01.04.2013
Сообщений: 72
14.06.2013, 18:41  [ТС] 4
Цитата Сообщение от kazak Посмотреть сообщение
У Вас в случае нормы будут переданы 14 байт, в противном случае - 6, а в программе Вы пытаетесь считать 10.
т.е. мне нужно создать принимающий массив размерностью не 10, а 14 ????

C++
1
2
3
4
5
6
 unsigned char buf_in[14]; //массив куда записывается
 
 
//чтение ответа из порта
   ReadFile(hCom,buf_in,sizeof &buf_in,&bc,NULL); //т.е. вот так?????
   cout << "ReadFile\n";
Добавлено через 3 минуты
Цитата Сообщение от kazak Посмотреть сообщение
У Вас в случае нормы будут переданы 14 байт, в противном случае - 6, а в программе Вы пытаетесь считать 10.

А как создать ЕСЛИ НЕ НОРМА !!!еще одни массив!! если не ошибаюсь оставшиеся байты (14 - 6) придет мусор (от не го тоже нужно избавляться)???? извиняюсь если вопрос глупый
0
 Аватар для kazak
3570 / 2717 / 348
Регистрация: 11.03.2009
Сообщений: 6,254
14.06.2013, 18:45 5
ИМХО тут лучше побайтно принимать. Приняли первые 4 байта, посмотрели в последних двух - сколько должно еще прийти, считали оставшиеся + два байта контрольной суммы.
0
14.06.2013, 18:45
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2013, 18:45
Помогаю со студенческими работами здесь

Com port (writefile кривая работа)
Подскажите в чём дело? Пишу терминалку для управления мк. Необходимо отправить массив из трёх...

Передача файла через COM port
Вопрос Чайника. Начал программировать на С++ совсем недавно и вот столкнулся с такой проблемойЖ ...

9-ти битная передача через COM port
братцы вопрос такой, как мне собственно реализовать девятибитную передачу через ком порт?) bool...

В каком виде приходят данные на COM PORT?
Написал простейшую программку для передачи данных на БП через COM PORT. На сколько я знаю, данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее: Sub ПоляВТекст() Преобразует все поля в текст (даты, текст,. . .
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
Как работает async/await в C#. Асинхронное программировани­е в .NET
bytestream 23.01.2025
Введение в асинхронное программирование Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru