Форум программистов, компьютерный форум, киберфорум
Электродвигатели
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
9 / 9 / 5
Регистрация: 21.09.2015
Сообщений: 102
1

Передача данных по rs232

27.06.2016, 12:12. Просмотров 2490. Ответов 2
Метки нет (Все метки)

Добрый день!
Купили драйвер шагового двигателя DM556, в котором имеется порт rs232. Возникла необходимость написать небольшую софтинку, с помощью которой можно будет управлять шаговым двигателем используя данный порт.
Протокола обмена в комплекте не было. Написали производителю - посылают в гугл. Последний, к сожалению, тоже молчит.
Нашли программу на сайте производителя, с помощью которой можно покрутить движком используя порт - работает. Уже что-то.
В общем всё подключили - смотрим как происходит процесс общения.

Вот пример лога:
Кликните здесь для просмотра всего текста

[27/06/2016 11:34:43] - Open port COM3 (C:\Program Files (x86)\ProTuner_All\DM556_en.exe)

[27/06/2016 11:34:55] Written data (COM3)
01 03 00 1f 00 01 b5 cc ......µМ
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 04 00 e6 ca ......жК
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 20 00 01 85 c0 ... ..…А
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 01 25 ca ......%К
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 99 00 01 54 25 ...™..T%
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 03 e8 e4 b4 .....идґ
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 40 00 01 85 de ...@..…Ю
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 41 00 01 d4 1e ...A..Ф.
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 42 00 01 24 1e ...B..$.
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 43 00 01 75 de ...C..uЮ
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 44 00 01 c4 1f ...D..Д.
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 45 00 01 95 df ...E..•Я
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 46 00 01 65 df ...F..eЯ
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 47 00 01 34 1f ...G..4.
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 48 00 01 04 1c ...H....
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 80 e5 aa .....ЂеЄ
[27/06/2016 11:34:55] Written data (COM3)
01 06 00 48 00 80 08 7c ...H.Ђ.|
[27/06/2016 11:34:55] Read data (COM3)
01 06 00 48 00 80 08 7c ...H.Ђ.|
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 49 00 01 55 dc ...I..UЬ
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 80 e5 aa .....ЂеЄ
[27/06/2016 11:34:55] Written data (COM3)
01 06 00 49 00 80 59 bc ...I.ЂYј
[27/06/2016 11:34:55] Read data (COM3)
01 06 00 49 00 80 59 bc ...I.ЂYј
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 4a 00 01 a5 dc ...J..ҐЬ
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 08 d1 23 96 .....С#–
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 4b 00 01 f4 1c ...K..ф.
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 04 12 66 c7 ......fЗ
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 ff 00 01 b4 3a ...я..ґ:
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 00 e4 0a ......д.
[27/06/2016 11:34:55] Written data (COM3)
01 06 00 20 00 01 49 c0 ... ..IА
[27/06/2016 11:34:55] Read data (COM3)
01 06 00 20 00 01 49 c0 ... ..IА
[27/06/2016 11:34:55] Written data (COM3)
01 03 00 20 00 01 85 c0 ... ..…А
[27/06/2016 11:34:55] Read data (COM3)
01 03 00 02 00 01 25 ca ......%К
[27/06/2016 11:35:04] Written data (COM3)
01 06 00 16 08 10 6e 02 ......n.
[27/06/2016 11:35:04] Read data (COM3)
01 06 00 16 08 10 6e 02 ......n.
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 1c 00 01 89 cc ......‰М
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 1c 00 01 89 cc ......‰М
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 1a 00 01 69 cd ......iН
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 1a 00 01 69 cd ......iН
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 19 00 05 98 0e ......?.
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 19 00 05 98 0e ......?.
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 18 03 e8 09 73 .....и.s
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 18 03 e8 09 73 .....и.s
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 1b 00 32 78 18 .....2x.
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 1b 00 32 78 18 .....2x.
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 16 08 10 6e 02 ......n.
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 16 08 10 6e 02 ......n.
[27/06/2016 11:35:06] Written data (COM3)
01 06 00 09 00 01 98 08 ......?.
[27/06/2016 11:35:06] Read data (COM3)
01 06 00 09 00 01 98 08 ......?.
[27/06/2016 11:35:07] Written data (COM3)
01 06 00 09 00 00 59 c8 ......YИ
[27/06/2016 11:35:07] Read data (COM3)
01 06 00 09 00 00 59 c8 ......YИ

[27/06/2016 11:35:09] - Close port COM3


Всё вроде понятно. Программа отсылает 8 бит информации - драйвер отвечает ей.
Повторяю всё тоже самое через терминал - работает.

Но вот что означает каждый бит - загадка, которую нужно разгадать.

Методом тыка, изменяя различные величины в программе, я определил, что во втором и третьем битах находятся такие параметры как величина тока, шага, частоты и т.д.
Что в других - пока не могу понять. Ладно, этого достаточно - подумал я, но не тут-то было.

Например я посылаю через терминал следующую строку, которую подсмотрел процессе работы программы производителя, отвечающую за изменение частоты: 01 06 00 16 08 10 6e 02
Где (08 10)16 = 206410
Как я говорил ранее - всё отлично работает, но изменив нулевой и первый биты на другие значения драйвер это не усваивает, давится и обратно присылает строку: FD FD.

Натолкните в нужную сторону. Как понять за что отвечают данные биты? Хотя бы примерно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2016, 12:12
Ответы с готовыми решениями:

Передача по rs232 (текстовые команды)
Задача состоит в том чтобы наладить обмен осциллографа с пк. Ему нужно отправлять текстовые команды...

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

Передача информации с ПК по RS232 на UART ATmega2313
Помогите разобраться с алгоритмом. Есть символьная строка информации, "Привет123". Какой тип...

обработка данных с rs232
Здравствуйте, появилась пару недель назад задумка собрать на AVR-ке простейшую схему и по СОМ порту...

2
19 / 19 / 6
Регистрация: 21.06.2015
Сообщений: 34
27.06.2016, 16:48 2
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

По описанию http://www.leadshine.com/Uploa... DM556m.pdf на странице 4 выходит что:

Есть 4 бита: PULp PULm DIRp DIRm

1. Нужно настроить режим PUL/DIR, как это сделать есть в этом руководстве
Это делается один раз, потом не трогается.

Как потом управлять:
2. На DIR битах выставляешь направление:
DIRp=0 DIRm=1 - в одну сторону
DIRp=1 DIRm=0 - в другую сторону

Другие значения битов DIRp DIRm запрещены, приведут к ошибке (что у тебя и произошло как я понял)

Прежде чем переходить к пункту 3 - ждем 5 миллисекунд

3. На PUL шлешь импульсы, то есть:
PULp=0 PULm=1
ждем 3 миллисекунды
PULp=1 PULm=0
ждем 3 миллисекунды

И это будет означать "Сделай один шаг"

Таким образом программа:

// Функция send_to_port - это отправить байт, как в твоем API она зовется...
// Я программу не проверял, не запускал, могут быть ошибки, написал ее как драфт для пояснения своих слов.
// Я могу ошибаться в том какие именно это биты (верхние или нижние, они также могут быть переставлены местами - это все нужно уточнить по перехваченному примеру)
// Константы ниже составлены исходя из того, что первые два бита - это DIR, а вторые два это PUL

// Естественно все это можно сделать многопоточным, функции sleep могут быть не точны (от этого скорость может прыгать),
// то есть все это еще допилить нужно. Это лишь пример, ориентированный на простоту программы для наглядности
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
const char forward[3] = {0b0100, 0b0101, 0b0110};
const char backward[3] = {0b1000, 0b1001, 0b1010};
 
void move(long distance, unsigned long step_delay)
    {
    if(distance == 0) return;
    const char* sequence = nullptr;
    
    // Выбираем набор констант исходя из направления движения
    if(distance>0)
        {
        sequence = forward;
        }
    else
        {
        sequence = backward;
        distance = -distance;
        }
 
    // Инициализируем направление движения
    send_to_port(sequence[0]);
    sleep(5);
    
    // Делаем нужное количество шагов
    for(long i=0; i<distance; i++)
        {
        send_to_port(sequence[1]);
        sleep(3);
        send_to_port(sequence[2]);
        sleep(3+step_delay);            // Доп. задержка перед следующим шагом
        }
    };
 
void main()
    {
    // Приведет к максимально быстрому движению "вперед" на 100 шагов.
    move(100, 0);
    
    // Подождем 5 секунд
    sleep(5000);
    
    // Приведет к медленному движению "назад" на 50 шагов.
    move(-50, 300);
    };
4
-39 / 3 / 0
Регистрация: 28.02.2019
Сообщений: 18
19.08.2019, 15:23 3
Расскажите по подробнее пожалуйста, не ясно через какой терминал и что именно ужно ему посылать. Хочу сделать связку с ардуино. Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2019, 15:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

RS232 приём данных
на ком порт приходят 10ричные числа, от 1 до 9 со знаком ? в начале т.е. (?1) (?2), итд ? означает...

Проблема при передаче данных через RS232 - Wi-Fi
Устройство с интерфейсом RS232 подключено через Wi-Fi удлинитель WiBOX...

Подвисает порт RS232 при отправке данных из кода
При отправке в COM через Hercules устройство отвечает нормально, но при отправки через мое...

Перехват и подмена данных при чтении\записи в rs232
Доброго дня, уважаемые. Перерыл, кажется, весь интернет, и так и не нашел ответа на простой вопрос...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.