Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54

Чтение данных из файла и их передача через порт компьютера

21.05.2017, 10:15. Показов 8318. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Есть задача: в текстовый файл в реальном времени пишется поток данных (углы наклона прибора в градусах). Необходимо считывать данные из этого файла в реальном времени и передавать их через COM- порт, с дальнейшей передачей данных на ЦАП и получения эквивалентного напряжения (из файла считалось, например, 5 градусов, дальше эти 5 градусов ушли через порт, там преобразовались в напряжение).

Собственно вопросы:
1)Как это реализовать и что для этого надо?
2)Можно ли делать чтение с определенной строчки и до конца?

Добавлено через 16 минут
Либо вместо COM использовать USB
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2017, 10:15
Ответы с готовыми решениями:

Чтение/передача данных через USB порт
Задача такова: есть внешний микроконтроллер (Arduino) который связан с ПК ч/з USB (некоторый COM-порт) и вот нужно принимать инфу или её...

Чтение данных через COM порт
Имеется устройство, панель кнопок, связанная с компом через RS-232 т.е. COM порт. Хочу сделать прогу, которая отображала бы нажатие...

Передача данных через Com порт
Добрый день форумчане! Мне с помощью программы "free-serial-port-monitor" удалось считал данные, которыми через com порт обменивались...

67
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 15:07
Студворк — интернет-сервис помощи студентам
Ты не понимаешь, как устроено оконное приложение. Обработчик должен возвращать управление как можно скорее, иначе всё зависает. Переделывай с таймером. В этом обработчике должно быть открытие файла и старт таймера. А обработчик таймера извлекает одну строку из файла за один вызов. Соответственно цикл исчезает.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
25.05.2017, 16:47  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Ты не понимаешь, как устроено оконное приложение. Обработчик должен возвращать управление как можно скорее, иначе всё зависает. Переделывай с таймером. В этом обработчике должно быть открытие файла и старт таймера. А обработчик таймера извлекает одну строку из файла за один вызов. Соответственно цикл исчезает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*while(!feof(file))
    {  */
        long p = ftell(file);
 
        if (fgets(s, 224, file) != NULL)
        {
            sscanf(s, "%f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f |", &Mach, &VVI, &Gload_n, &Gload_a, &Gload_s, &pitch, &roll, &headingt, &headingm, &alpha, &beta, &hpath, &vpath, &slip);
            Edit1->Text = (FloatToStr(Gload_n));
            Sleep(1);
        }
        else
            fseek(file, p, SEEK_SET);
 
    /*}*/
Сделал так, теперь, как я понял, за одно нажатие на кнопку происходит считывание и запись, для дальнейшего надо снова нажимать. Мне же надо, чтобы я 1 раз нажал на кнопку, либо заменить на другой объект, например checkbox, при активном положении которого постоянно бы происходило непрерывное считывание. Я просто изучал C++ по самоучителю Шилда без особой практики, для себя, поэтому плохо ориентируюсь тут.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 16:56
Ещё раз: таймер создай на 10 миллисекунд - TTimer, и вот этот кусок вставь в обработчик таймера.

Добавлено через 4 минуты
И никаких Sleep().
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
25.05.2017, 18:18  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Ещё раз: таймер создай на 10 миллисекунд - TTimer, и вот этот кусок вставь в обработчик таймера.
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    FILE *file;
    float pitch, roll, headingt, headingm, Mach, VVI, Gload_n, Gload_a, Gload_s, alpha, beta, hpath, vpath, slip;
    char s[224];
    file=fopen("Data.txt","r");
 
        long p = ftell(file);
 
        if (fgets(s, 224, file) != NULL)
        {
            sscanf(s, "%f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f |", &Mach, &VVI, &Gload_n, &Gload_a, &Gload_s, &pitch, &roll, &headingt, &headingm, &alpha, &beta, &hpath, &vpath, &slip);
Edit1->Clear();
Edit1->Text = FloatToStr(Gload_n); 
        }
        else
            fseek(file, p, SEEK_SET);
 
        fclose(file);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Timer1->Enabled = false;
}
Сделал так, все работает, только вот Edit1 слишком быстро получает данные, не успевает отображать их.

Добавлено через 29 минут
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Timer1->Enabled = true;
  if (Timer1->Enabled)
  {
    ActivityIndicator1->Animate = true;
  }
  else ActivityIndicator1->Animate = false;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    FILE *file;
    char s[224];
    file=fopen("Data.txt","r");
 
        long p = ftell(file);
 
        if (fgets(s, 224, file) != NULL)
        {
            sscanf(s, "%f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f |", &Mach, &VVI, &Gload_n, &Gload_a, &Gload_s, &pitch, &roll, &headingt, &headingm, &alpha, &beta, &hpath, &vpath, &slip);
            Edit1->Text = FloatToStr(Gload_n);
            Edit2->Text = FloatToStr(Mach);
            Edit3->Text = FloatToStr(roll);
            Edit4->Text = FloatToStr(slip);
            Edit5->Text = FloatToStr(headingt);
            Edit6->Text = FloatToStr(pitch);
        }
        else
            fseek(file, p, SEEK_SET);
 
        fclose(file);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Timer1->Enabled = false;
    if (!(Timer1->Enabled))
  {
    ActivityIndicator1->Animate = false;
  }
}
Сделал так, теперь Edit не пишет текст, просто 0 выводит, однако алгоритм работает(пытался стирать значение, он заново его выписывал - значит вывод работает).
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 18:19
Открытие/закрытие файла должно быть не здесь. При старте/завершении программы или при нажатии кнопок. По таймеру просто чтение.
А так у тебя всё время первая строка будет.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
25.05.2017, 19:12  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
А так у тебя всё время первая строка будет.
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
TForm1 *Form1;
//---------------------------------------------------------------------------
FILE *file1;
char s[224];
float pitch, roll, headingt, headingm, Mach, VVI, Gload_n, Gload_a, Gload_s, alpha, beta, hpath, vpath, slip;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  Timer1->Enabled = false;
  Edit1->Clear();
  Edit2->Clear();
  Edit3->Clear();
  Edit4->Clear();
  Edit5->Clear();
  Edit6->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Timer1->Enabled = true;
  if (Timer1->Enabled)
  {
    ActivityIndicator1->Animate = true;
  }
  else
    ActivityIndicator1->Animate = false;
   file1=fopen("Data.txt","r");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Timer1->Enabled = false;
    if (!(Timer1->Enabled))
  {
    ActivityIndicator1->Animate = false;
  }
    fclose(file1);
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   long p = ftell(file1);
 
        if (fgets(s, 224, file1) != NULL)
        {
            sscanf(s, "%f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f |", &Mach, &VVI, &Gload_n, &Gload_a, &Gload_s, &pitch, &roll, &headingt, &headingm, &alpha, &beta, &hpath, &vpath, &slip);
            Edit1->Clear();
            Edit1->Text = Gload_n;
            Edit2->Clear();
            Edit2->Text = FloatToStr(Mach);
            Edit3->Clear();
            Edit3->Text = FloatToStr(roll);
            Edit4->Clear();
            Edit4->Text = FloatToStr(slip);
            Edit5->Clear();
            Edit5->Text = FloatToStr(headingt);
            Edit6->Clear();
            Edit6->Text = FloatToStr(pitch);
        }
        else
            fseek(file1, p, SEEK_SET);
}
//---------------------------------------------------------------------------
Сделал вот так. Проблема: файл читается даже тогда, когда симуляция на паузе(строки в документ не добавляются). Из-за этого начинают плыть данные. Как исправить?

Добавлено через 16 минут
То есть должно быть x.xxxxx, а получается 1,00769996643066(пример из программы), еще и не совпадает с консольными вычислениями, в добавок на паузе продолжается считывание данных.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2017, 21:02
То, что он читается, когда нет добавления, - нормально. Но должна секция else срабатывать, а данные в Edit'ах не изменяться. Не ясно, что у тебя там "плывёт".
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
26.05.2017, 09:21  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Но должна секция else срабатывать, а данные в Edit'ах не изменяться.
Ну вот, а они меняются, так еще к х.ххххх добавляются левые числа. Код в консольном приложении и в оконном - один и тот же, он только разнесен по кнопкам, но выводит данные не правильно.
Можно ли как-то из формы по кнопке запускать консольное приложение которое лежит рядом в папке/этом же проекте и по другой кнопке закрывать его?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.05.2017, 17:05
Цитата Сообщение от Jank Посмотреть сообщение
когда симуляция на паузе(строки в документ не добавляются)
Файл при этом закрывается и потом после паузы с начала перезаписывается или добавляется?

Что за х.ххххх? У тебя где-то ошибка.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
26.05.2017, 18:42  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Файл при этом закрывается и потом после паузы с начала перезаписывается или добавляется?
Шла симуляция - шла запись.
Пауза в симуляции - пауза в записи.
Продолжение симуляция - продолжения записи(строки добавляются, стары остаются).
Цитата Сообщение от nmcf Посмотреть сообщение
Что за х.ххххх? У тебя где-то ошибка.
Это выходное значение, например -1.55383. Если запустить консольное приложение, то там такое значение и получается, то есть оно совпадает со значением симуляции(это отслеживается), а в оконном получается -1.55383 и еще куча цифр, это в лучшем случае, в худшем - просто набор цифр. Есть мнение, что в Edit данные не просто приходят, а они суммируются с предыдущими или как.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.05.2017, 19:05
Сколько там цифр - это вопрос форматирования и погрешности представления. Если нужно именно 5 после запятой, то используй явное форматирование, а не FloatToStr.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
26.05.2017, 19:41  [ТС]
На просторах необъятной Родины нашел этот пример. Помогите переделать его так, чтобы я не текст слал(char), а значение переменных(float). Как я понимаю, один порт - один поток данных, в моем случае - одна переменная. Чтобы в это же время послать другую переменную, нужен еще один порт, так?
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
#include <windows.h>
#include <iostream>
using namespace std;
//-----------------------------------------------------------------------------
HANDLE hSerial; //Объявляем обработчик com порта
//-----------------------------------------------------------------------------
void ReadCOM()
{
      DWORD iSize;
      char sReceivedChar;
      while (true)
      {
            ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);  // получаем 1 байт
            if (iSize > 0)   // если что-то принято, выводим
                cout << sReceivedChar;
      }
}
//-----------------------------------------------------------------------------
 int _tmain(int argc, _TCHAR* argv[]) 
{
    LPCTSTR sPortName = "COM1"; //Объявление строки с именем порта
 
    hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); //Открываем первый ком порт для записи/чтения
//-----------------------------------------------------------------------------
    if(hSerial==INVALID_HANDLE_VALUE)  //Проверяем работоспособность
{
        if(GetLastError()==ERROR_FILE_NOT_FOUND)
    {
        cout << "serial port does not exist.\n";
    }
    cout << "some other error occurred.\n";
}
//-----------------------------------------------------------------------------
    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams))
    {
        cout << "getting state error\n";
    }
    dcbSerialParams.BaudRate=CBR_9600;
    dcbSerialParams.ByteSize=8;
    dcbSerialParams.StopBits=ONESTOPBIT;
    dcbSerialParams.Parity=NOPARITY;
    if(!SetCommState(hSerial, &dcbSerialParams))
    {
        cout << "error setting serial port state\n";
    }
//-----------------------------------------------------------------------------
    char data[] = "Тут должна быть ваша реклама!";  // строка для передачи
    DWORD dwSize = sizeof(data);   // размер этой строки
    DWORD dwBytesWritten;    // тут будет количество собственно переданных байт
//-----------------------------------------------------------------------------
    BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten,NULL); //Посылаем строку
    cout << dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl; //Контрль размера строки и отосланных байт
//-----------------------------------------------------------------------------
    while(1)
    {
        ReadCOM(); //Бесконечный цикл чтения данных
    }
//-----------------------------------------------------------------------------
    CloseHandle(hSerial); //Закрываем порт
//-----------------------------------------------------------------------------
    system("pause");
    return 0;
}
Если я правильно понимаю, то фраза "Тут должна быть ваша реклама!" уже находится на порте, стоит только подключить внешнее у-во к порту и это строка пойдет на это устройство, так?

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Сколько там цифр - это вопрос форматирования и погрешности представления. Если нужно именно 5 после запятой, то используй явное форматирование, а не FloatToStr
Дело в том, что там всего (-)х.ххххх знаков, других там быть не может) Т.е. он лишнее что-то приплетает) почему консольное приложение считывает как есть, то есть (-)х.ххххх, а оконное что попало, хотя код одинаковый)
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.05.2017, 21:05
Цитата Сообщение от Jank Посмотреть сообщение
там всего (-)х.ххххх знаков
В текстовой записи - да, а после преобразования во float может быть сколько угодно. Читай про погрешность представления.

Добавлено через 19 минут
Цитата Сообщение от Jank Посмотреть сообщение
Если я правильно понимаю, то фраза "Тут должна быть ваша реклама!" уже находится на порте, стоит только подключить внешнее у-во к порту и это строка пойдет на это устройство, так?
Это массив, из которого данные берутся.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
27.05.2017, 08:09  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Это массив, из которого данные берутся.
Отложил пока работу с оконным приложением, вернулся в консольное. Вот код:
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
//-----------------------------------------------------------------------------
#include <windows.h>
#include <stdlib.h>
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
//-----------------------------------------------------------------------------
HANDLE hSerial; //Объявляем обработчик com порта
//-----------------------------------------------------------------------------
void ReadCOM() //Функция чтения данных
{
      DWORD iSize;
      char sReceivedChar;
      while (true)
      {
            ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);  // получаем 1 байт
            if (iSize > 0)   // если что-то принято, выводим
                cout << sReceivedChar;
      }
}
//-----------------------------------------------------------------------------
int main()
{
//-----------------------------------------------------------------------------
    LPCTSTR sPortName = "COM1"; //Объявление строки с именем порта
    hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); //Открываем первый ком порт для записи/чтения
//-----------------------------------------------------------------------------
    if(hSerial==INVALID_HANDLE_VALUE)  //Проверяем работоспособность
    {
            if(GetLastError()==ERROR_FILE_NOT_FOUND)
            {
                cout << "serial port does not exist.\n";
            }
            cout << "some other error occurred.\n";
    }
//-----------------------------------------------------------------------------
    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams))
    {
        cout << "getting state error\n";
    }
    dcbSerialParams.BaudRate=CBR_9600;
    dcbSerialParams.ByteSize=8;
    dcbSerialParams.StopBits=ONESTOPBIT;
    dcbSerialParams.Parity=NOPARITY;
    if(!SetCommState(hSerial, &dcbSerialParams))
    {
        cout << "error setting serial port state\n";
    }
//-----------------------------------------------------------------------------
    FILE *file;
    float pitch, roll, headingt, headingm, VVI, Gload_n, Gload_a, Gload_s, alpha, beta, hpath, vpath, slip, Mach;
    char s[224];
    file=fopen("Data.txt","r");
//-----------------------------------------------------------------------------
   DWORD dwBytesWritten;    // тут будет количество собственно переданных байт
//-----------------------------------------------------------------------------
    while(1)
    {
        long p = ftell(file);
        if (fgets(s, 224, file) != NULL)
        {
            sscanf(s, "%f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f | %f |", &Mach, &VVI, &Gload_n, &Gload_a, &Gload_s, &pitch, &roll, &headingt, &headingm, &alpha, &beta, &hpath, &vpath, &slip);
            char data[8] = Mach;  // ТА САМАЯ СТРОКА
            DWORD dwSize = sizeof(data);   // размер этой строки
            BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten,NULL); //Посылаем строку
            cout << dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl; //Контрль размера строки и отосланных байт
            /*printf("%f\n", Mach);*/
            ReadCOM(); //Бесконечный цикл чтения данных
        }
        else
            fseek(file, p, SEEK_SET);
    }
//-----------------------------------------------------------------------------
        fclose(file); //Закрываем чтение файла
        CloseHandle(hSerial); //Закрываем порт
        system("pause");
//-----------------------------------------------------------------------------
    return 0;
}
Как мне в строке char data[8] = Mach; заставить понимать char data[] значение float? И еще момент: мне же нужно отправлять числа(эти самые float), а не строковые переменные. Есть вариант - "Передавать символ, код которого соответствует нужному числу". Как это реализовать или предложите альтернативу, я уже голову сломал.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.05.2017, 08:27
C++
1
WriteFile (hSerial, reinterpret_cast<char *>(&Mach), sizeof(Mach), &dwBytesWritten, NULL);
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
27.05.2017, 16:33  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
WriteFile (hSerial, reinterpret_cast<char *>(&Mach), sizeof(Mach), &dwBytesWritten, NULL);
Теперь данные поступают в порт, это хорошо. А как мне на выходе порта получить ЧИСЛА, чтобы ЦАП смог их обработать?
И еще, данные отправляются постоянно, даже когда конец документа достигнут - это так и должно быть, типа специфика работы с портом?

Цитата Сообщение от Jank Посмотреть сообщение
И еще, данные отправляются постоянно, даже когда конец документа достигнут - это так и должно быть, типа специфика работы с портом?
Все в порядке, мой косяк. Когда идет симуляция и она паузится, то COM программа тоже на паузе. Ерунда, которую я описал, появляется только при отсутствии симуляции, то есть просто при прогонке по файлу.

По поводу COM-порта... Его на плате не нашел, но в описании нашел IEEE 1394a port. Как я понял, это одно и тоже, практически. Но вот момент, судя по картинкам, там 3х-пиновый выход, а мой же выходит на 2 usb... Либо я путаю что-то...
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
27.05.2017, 16:43  [ТС]
Хотя COM отдельно, IEEE отдельно... Ничего непонимаю
Миниатюры
Чтение данных из файла и их передача через порт компьютера  
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
27.05.2017, 16:57  [ТС]
Размещение COM'а - Intel(R) P67 Express Chipset Family LPC Interface Controller - 1C46
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.05.2017, 18:06
Разные они. Ты книжку нашёл от платы? Там всё написано. Обычно набор контактов с чёрным ограничителем и надпись рядом COM.
Цитата Сообщение от Jank Посмотреть сообщение
А как мне на выходе порта получить ЧИСЛА, чтобы ЦАП смог их обработать?
Туда и так числа идут. Протокол какой? Описание читай.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
27.05.2017, 18:12  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Ты книжку нашёл от платы? Там всё написано. Обычно набор контактов с чёрным ограничителем и надпись рядом COM.
Книжку нашел, COM нету, есть IEEE. P8P67 PRO плата.

Добавлено через 41 секунду
Цитата Сообщение от nmcf Посмотреть сообщение
Туда и так числа идут. Протокол какой? Описание читай.
То есть если у меня Mach примет значение -1.123456, то на ЦАП через порт уйдет число -1.123456, а не текст "-1.123456", так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2017, 18:12
Помогаю со студенческими работами здесь

Передача данных через ИК порт
Нужно организовать систему передачи данных через инфракрасный на ассемблере. ИК должен подключаться к ком порту. Подскажите пожалуйста,...

Получение и передача данных через COM порт
Добрый день Мне кажется, я изобретаю велосипед и должно быть полно примеров такого кода. Но ничего найти не удалось. Суть:...

Передача и приём данных через COM порт
Задача такая, нужно через ком порт передавать и принимать пачки байтов, всё это по протоколу modbus rtu. Установил библиотеки ком порта...

Передача данных через последовательный порт
Ребят, всем добрый вечер! Предстоит следующая задача: нужно реализовать, например - в отдельном классе, функции для передачи данных через...

Передача и приём данных через COM-порт
Добрый день! Передо мной поставили задачу написать программу для работы с адаптером OBD2 Elm327 через виртуальный COM-порт. Пробую пока...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru