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

СОМ порт - как передать код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В строке S1 найти слово DOM http://www.cyberforum.ru/cpp-beginners/thread535756.html
В строке S1 найти слово DOM, если оно есть то вывести все номера позиции
C++ Найти минимальные пути между всеми парами вершин, используя алгоритм Флойда. Найти минимальные пути между всеми парами вершин, используя алгоритм Флойда. А л г о р и т м Ф л о й д а Данные: матрица весов С(D) орграфа D. Результат: расстояния между всеми парами вершин D = d(vi,vj). 1. Для всех i = 1,…,n , j = 1,…,n положим D = cij . 2. Для всех i = 1,…,n положим D = 0. 3. Положим m = 1. 4. Положим i = 1. http://www.cyberforum.ru/cpp-beginners/thread535747.html
Задача про часовую и минутную стрелки на циферблате C++
Помогите пожалуйста решить следующую задачу: Даны целые m, n (0<m<=12, 0<=n<60), указывающие момент времени: "m часов, n минут". Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки на циферблате расположатся перпендикулярно друг другу. Циклы и массивы использовать нельзя, ветвления можно.
C++ Найти значение выражения
Найти значение выражения (2*5!+3*8!)/(6!+4!) , определив функцию расчета факториала натурального числа.
C++ Построить программу подсчета количества чисел в массиве, повторяющихся более одного раза http://www.cyberforum.ru/cpp-beginners/thread535721.html
Задан положительный массив А Построить программу подсчета количества чисел в этом массиве повторяющихся более одного раза . Например массив 4,5,6,4,9,1,5. одинаковых чисел 2(4,5). Добавлено через 2 часа 10 минут ни кто не сможет помочь?
C++ Как создать тип данных указатель в собственном языке программирования? /*************************************************************/ /* Компилятоp С0 Д.Г. Хохлов 10.04.03 */ /* */ /* Гpамматика С0: */ /* пpогpамма ::= {описание-пеpеменных | описание-функции}... */ /* описание-пеpеменных ::= INT имя ...| *имя..... ;*/ /* описание-функции... подробнее

Показать сообщение отдельно
Jefree
3 / 3 / 0
Регистрация: 25.03.2012
Сообщений: 16
08.04.2012, 12:52  [ТС]     СОМ порт - как передать код
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <iostream>
#include <string>
#include <conio.h>
#include <time.h>
#include <windows.h>
using namespace std;
 
 
 
struct package
{
      char header;
      string body;
      char summ;
};
 
 
int open_port(TCHAR * Name);                           // создание потока hCom, начальной конфигурации и установки таймаутов
void check_port(TCHAR * Name);                         // функция определения типа порта
int write_pack_data(package Pack);                    // функция записи пакета байтов
                                 
int calc_check_summ(const TCHAR * Body);  // функция подсчета контрольной суммы
void wait(float Seconds);                             // функция задержки
void close_port();                                    // закрытие используемых потоков
 
 
HANDLE hCom = INVALID_HANDLE_VALUE;   // поток для работы с портом
COMMTIMEOUTS cto;                     // структура для установки таймаутов
DCB dcb;                              // структура для конфигурации
 
DWORD dwBytesWritten_h,               // записано байт заголовка
      dwBytesWritten_b,               // записано байт основного сообщения
      dwBytesWritten_s,               // записано байт суммы
      dwBuffer;                       // количество байтов записанных в поток hCom
 
 
// ========================================= Точка входа в программу =========================================
int main()
{
      cout << "<= SERIAL PORT - WORKING WITH PACKAGES =>\n\n";
      
      TCHAR sPortName[] = "COM1";
      // сперва открываем порт
      if (!open_port(sPortName))
            return 0;
 
      // проверяем какой он
      check_port(sPortName);
 
      string input = "";
      // получаем сообщение для передачи
      cout << "Enter string to send: ";
      getline(cin, input);
      while (input != "quit")
      {
            // создаем и конфигурируем пакет для передачи
            package data;
            data.header = 'h';
            data.body = input;
            data.summ = calc_check_summ(data.body.c_str());
            cout << "\ndata.header\t=\t\'" << data.header << 
                    "\'\ndata.body\t=\t\"" << data.body << 
                    "\"\ndata.CS\t\t=\t" << (int)data.summ << endl;
 
            // передаем данные
            int i_wd, i_rd;
            i_wd = write_pack_data(data);
            
 
            // снова получаем сообщение для передачи
            cout << "Enter string to send: ";
            cin >> input;
      }     
 
      // в конце работы закрываем порт
      close_port();
 
      
      return 0;
}
 
 
// ========================================= Дополнительные функции =========================================
 
// функция записи пакета байтов
int write_pack_data(package Pack)
{
      size_t size_head = sizeof(Pack.header);
      size_t size_str = strlen(Pack.body.c_str());
      size_t size_CS = sizeof(Pack.summ);
 
      string head; head[0] = Pack.header;
      string summ; summ[0] = Pack.summ;
 
      int res = 0;
      if ( (size_str > 0) && (hCom != INVALID_HANDLE_VALUE) )
      {            
            res = WriteFile(hCom, head.c_str(), size_head, &dwBytesWritten_h, 0);
            res = WriteFile(hCom, Pack.body.c_str(), size_str, &dwBytesWritten_b, 0);
            res = WriteFile(hCom, summ.c_str(), size_CS, &dwBytesWritten_s, 0);
 
            cout << "\nWritten " << dwBytesWritten_h << " bytes of header\n\t" <<
                                    dwBytesWritten_b << " bytes of body\n\t" <<
                                    dwBytesWritten_s << " bytes of check summ\n";
      }
      return res;
}                                                             
 
 
 
// функция подсчета контрольной суммы
int calc_check_summ(const char * Body)
{
      int final = 0;
      for (int i = 1, j = 0, c = 0; j < strlen(Body); c++)
      {
            if ( (Body[j] & i) == i)
                  final++;
            i <<= 1;
            if (c == 8)
            {
                  c = -1; j++; i = 1;
            }
      }
      return final;
}
 
// функция создания потока hCom, начального конфигурирования и установки таймаутов
int open_port(TCHAR * Name)
{
      hCom = CreateFile(Name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
 
      if (hCom == INVALID_HANDLE_VALUE)
      {
            cout << " *** Error opening port!\n";
            getch();
            return 0;
      }
      else
      {
            cout << " *** Port succesfully opened!\n";
            
            // конфигурируем порт
            GetCommState(hCom, &dcb);
 
            dcb.BaudRate = CBR_9600;
            dcb.ByteSize = 8;
            dcb.Parity = NOPARITY;
            dcb.StopBits = ONESTOPBIT;
 
            if (SetCommState(hCom, &dcb))
                  cout << " *** Configuring OK.\n";
            else
                  cout << " *** Configuring error.\n";
 
            // устанавливаем таймауты 
            cto.ReadIntervalTimeout = MAXDWORD;
            cto.ReadTotalTimeoutMultiplier = MAXDWORD;
            cto.ReadTotalTimeoutConstant = 5000;
 
            if (SetCommTimeouts(hCom, &cto))
                  cout << " *** Timeouts succesfully set!\n\n";
            else
                  cout << " *** Error with setting timeouts!\n\n";
            
            return 1;
      }
}
 
 
// функция задержки
void wait(float Seconds)
{
    clock_t delay = Seconds * CLOCKS_PER_SEC;
    clock_t start = clock();
    while (clock() - start < delay)
        ;
}
// функция закрытия используемых потоков
void close_port()
{
      if (hCom == INVALID_HANDLE_VALUE)
            return;
 
      CloseHandle(hCom);
      cout << "\n *** Port succesfully closed!\n";
      hCom = INVALID_HANDLE_VALUE;
}
Вот вроде правдоподобный код, убрал прием данных, т.к. мне надо только отсылать данные через порт на примере диодов. Но компилировать не хочет помогите разобраться, может что убрать или добавить
error C2664: 'calc_check_summ' : cannot convert parameter 1 from 'const char *' to 'const TCHAR *'
IntelliSense: a value of type "const char [5]" cannot be used to initialize an entity of type "TCHAR []" warning C4018: '<' : signed/unsigned mismatch
warning C4244: 'initializing' : conversion from 'float' to 'clock_t', possible loss of data
 
Текущее время: 04:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru