Контроллер оптических линеек / энкодеров (Step/Dir)
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Потихоньку двигаю проект.
Показывать особенно то нечего... Вот, скриншот прикрепляю.
На данный момент и программа настройки работает, и сама плата тоже.
Подключать к линейке и приводу пока не пробовал. Нужно еще дописать отображение графиков.
Вполне вероятно, я что-то забыл, и, вероятно, добавил что-то ненужное в интерфейс и функционал, но пока я не способен это увидеть.
В целом картинка вырисовывается.
Настройки хранятся в контроллере и при подключении usb кабеля сразу же передаются в программу, после чего поля становятся доступными для редактирования.
Ввод новых значений на экране сразу же передается в контроллер, используется в его работе и сохраняется в его памяти. Расчеты ведутся в числах с плавающей точкой (где это необходимо в 64 битных).
Период сервоцикла 100 мкс (обработка данных и корректировка выходного сигнала занимает около 50 мкс, остальные 50 мкс - бездействие).
Возможна работа в бесконечном режиме (привод конвейерной ленты).
Показывать особенно то нечего... Вот, скриншот прикрепляю.
На данный момент и программа настройки работает, и сама плата тоже.
Подключать к линейке и приводу пока не пробовал. Нужно еще дописать отображение графиков.
Вполне вероятно, я что-то забыл, и, вероятно, добавил что-то ненужное в интерфейс и функционал, но пока я не способен это увидеть.
В целом картинка вырисовывается.
Настройки хранятся в контроллере и при подключении usb кабеля сразу же передаются в программу, после чего поля становятся доступными для редактирования.
Ввод новых значений на экране сразу же передается в контроллер, используется в его работе и сохраняется в его памяти. Расчеты ведутся в числах с плавающей точкой (где это необходимо в 64 битных).
Период сервоцикла 100 мкс (обработка данных и корректировка выходного сигнала занимает около 50 мкс, остальные 50 мкс - бездействие).
Возможна работа в бесконечном режиме (привод конвейерной ленты).
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Наверное, оно уже работает, но к железу еще пока не пробовал подключать.
Вылавливаю баги (в основном в поведении интерфейса программы). Казалось бы, "все там просто", но вот потратил уже на это несколько недель. Улучшаю, исправляю, тестирую, оптимизирую, вылавливаю нетипичные ситуации.
В данный момент ломаю голову над тем, как проверить, что все переменные привел к общим единицам.
Вылавливаю баги (в основном в поведении интерфейса программы). Казалось бы, "все там просто", но вот потратил уже на это несколько недель. Улучшаю, исправляю, тестирую, оптимизирую, вылавливаю нетипичные ситуации.
В данный момент ломаю голову над тем, как проверить, что все переменные привел к общим единицам.
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Сегодня осмелился подключить блок контроля к своему раскладчику.
Боялся, что всплывет много проблем,.. но нет, заработало!
Пока еще «продукт» сыроват, но за счет визуального интерфейса с графиками удалось лучше настроить раскладчик.
https://youtu.be/Nu5Au73ohDc
Боялся, что всплывет много проблем,.. но нет, заработало!
Пока еще «продукт» сыроват, но за счет визуального интерфейса с графиками удалось лучше настроить раскладчик.
https://youtu.be/Nu5Au73ohDc
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Давно хочу спросить: а зачем ты и на степмастер и тут кварцы ставишь?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Для красотыUAVpilot писал(а):Давно хочу спросить: а зачем ты и на степмастер и тут кварцы ставишь?..
А если серьезно - на степмастер не ставлю.
Но была проблема - китайские процессоры не откалиброванные попались. И не поддавались корректировке частоты встроенного генератора.
Частота на разных экземплярах плясала от 30 МГц до 180. Кварц исправлял эту проблему.
А здесь - USB. Для нее поставил. Может быть и не нужно, но для тестовой платы решил не рисковать, и развести место под кварц на всякий случай.
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Да, и если не поставлю - придется снизить частоту ядра с 72 до 48 МГц, а вычислительная мощность в данной задаче мне нужна.UAVpilot писал(а):Давно хочу спросить: а зачем ты и на степмастер и тут кварцы ставишь?..
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Платы контроллера установил на раскладчик. Работают исправно, и что-то существенно улучшить сложно.
Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе, но другие устройства можно отключить на время настройки этой платы.
Скорее всего исправить проблему не смогу, т.к. косяк с USB подключением, вероятно, где-то в кодах от STMicroelectronics.
Бесплатно раздавать не хотелось бы, т.к. в этом случае велика вероятность, что контроллеры останутся лежать на полочках.
Полагаю, сумма в 1000 руб. за штуку будет разумной.
При желании контроллеры можно будет вернуть (с возвратом денег).
Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе, но другие устройства можно отключить на время настройки этой платы.
Скорее всего исправить проблему не смогу, т.к. косяк с USB подключением, вероятно, где-то в кодах от STMicroelectronics.
Собственно, вопрос:
Есть ли у кого-нибудь интерес к данному устройству, и, возьмется ли кто-либо проверить контроллер в работе?
Собранных плат в запасе нет, но если кто-либо возьмется тестировать - куплю комплектующих, соберу нужное количество, отправлю.Есть ли у кого-нибудь интерес к данному устройству, и, возьмется ли кто-либо проверить контроллер в работе?
Бесплатно раздавать не хотелось бы, т.к. в этом случае велика вероятность, что контроллеры останутся лежать на полочках.
Полагаю, сумма в 1000 руб. за штуку будет разумной.
При желании контроллеры можно будет вернуть (с возвратом денег).
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
А что за проблемы?michael-yurov писал(а):Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Да сам не пойму.AndyBig писал(а):А что за проблемы?
Было такое, что в системе установилось два разных USB устройства с одинаковыми номерами COM порта.
Иногда, вроде бы, подключается, usb устройство работает, но установить связь с виртуальным COM портом не удается, хотя он есть.
В каких-то случаях, вылезала ошибка определения дескриптора usb устройства.
У меня и без данных плат возникали проблемы с китайскими USB-UART преобразователями (на раскладчике два таких стоят один для ленточных питателей, второй - в главном контроллере).
Все те же проблемы, что перечислил выше.
Если левые usb-com устройства отключить - контроллеры линеек/энкодеров подключаются и определяются без проблем.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Это не баг stm, это особенности енумератора usb в винде.michael-yurov писал(а):Платы контроллера установил на раскладчик. Работают исправно, и что-то существенно улучшить сложно.
Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе, но другие устройства можно отключить на время настройки этой платы.
Скорее всего исправить проблему не смогу, т.к. косяк с USB подключением, вероятно, где-то в кодах от STMicroelectronics.
Задай какой-либо уникальный признак в usb-дескрипторе своей платы (например название) и при одключении к ней проверяй его.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Ну это уже точно не в STM проблемы.michael-yurov писал(а):Было такое, что в системе установилось два разных USB устройства с одинаковыми номерами COM порта.
Да и это не похоже на баг прошивки.michael-yurov писал(а):usb устройство работает, но установить связь с виртуальным COM портом не удается
Скорее всего дело в системе, как и написал UAVpilot.
Я с таким пока не сталкивался, хотя иногда у меня бывают подключены два моих девайса (тоже виртуальные COM-порты) одновременно.
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Это то, что в файле usb_desc.c/h:UAVpilot писал(а):Задай какой-либо уникальный признак в usb-дескрипторе своей платы (например название) и при одключении к ней проверяй его.
Код: Выделить всё
/**
******************************************************************************
* @file usb_desc.c
* @author MCD Application Team
* @version V3.4.0
* @date 29-June-2012
* @brief Descriptors for Virtual Com Port Demo
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "usb_lib.h"
#include "usb_desc.h"
/* USB Standard Device Descriptor */
const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
{
0x12, /* bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00,
0x02, /* bcdUSB = 2.00 */
0x02, /* bDeviceClass: CDC */
0x00, /* bDeviceSubClass */
0x00, /* bDeviceProtocol */
0x40, /* bMaxPacketSize0 */
0x83,
0x04, /* idVendor = 0x0483 */
0x40,
0x57, /* idProduct = 0x7540 */
0x00,
0x02, /* bcdDevice = 2.00 */
1, /* Index of string descriptor describing manufacturer */
2, /* Index of string descriptor describing product */
3, /* Index of string descriptor describing the device's serial number */
0x01 /* bNumConfigurations */
};
const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
{
/*Configuration Descriptor*/
0x09, /* bLength: Configuration Descriptor size */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
VIRTUAL_COM_PORT_SIZ_CONFIG_DESC, /* wTotalLength:no of returned bytes */
0x00,
0x02, /* bNumInterfaces: 2 interface */
0x01, /* bConfigurationValue: Configuration value */
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
0xC0, /* bmAttributes: self powered */
0x32, /* MaxPower 0 mA */
/*Interface Descriptor*/
0x09, /* bLength: Interface Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */
/* Interface descriptor type */
0x00, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x01, /* bNumEndpoints: One endpoints used */
0x02, /* bInterfaceClass: Communication Interface Class */
0x02, /* bInterfaceSubClass: Abstract Control Model */
0x01, /* bInterfaceProtocol: Common AT commands */
0x00, /* iInterface: */
/*Header Functional Descriptor*/
0x05, /* bLength: Endpoint Descriptor size */
0x24, /* bDescriptorType: CS_INTERFACE */
0x00, /* bDescriptorSubtype: Header Func Desc */
0x10, /* bcdCDC: spec release number */
0x01,
/*Call Management Functional Descriptor*/
0x05, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x01, /* bDescriptorSubtype: Call Management Func Desc */
0x00, /* bmCapabilities: D0+D1 */
0x01, /* bDataInterface: 1 */
/*ACM Functional Descriptor*/
0x04, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
0x02, /* bmCapabilities */
/*Union Functional Descriptor*/
0x05, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x06, /* bDescriptorSubtype: Union func desc */
0x00, /* bMasterInterface: Communication class interface */
0x01, /* bSlaveInterface0: Data Class Interface */
/*Endpoint 2 Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x82, /* bEndpointAddress: (IN2) */
0x03, /* bmAttributes: Interrupt */
VIRTUAL_COM_PORT_INT_SIZE, /* wMaxPacketSize: */
0x00,
0xFF, /* bInterval: */
/*Data class interface descriptor*/
0x09, /* bLength: Endpoint Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */
0x01, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x02, /* bNumEndpoints: Two endpoints used */
0x0A, /* bInterfaceClass: CDC */
0x00, /* bInterfaceSubClass: */
0x00, /* bInterfaceProtocol: */
0x00, /* iInterface: */
/*Endpoint 3 Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x03, /* bEndpointAddress: (OUT3) */
0x02, /* bmAttributes: Bulk */
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
0x00,
0x00, /* bInterval: ignore for Bulk transfer */
/*Endpoint 1 Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x81, /* bEndpointAddress: (IN1) */
0x02, /* bmAttributes: Bulk */
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
0x00,
0x00 /* bInterval */
};
/* USB String Descriptors */
const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
{
VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
USB_STRING_DESCRIPTOR_TYPE,
0x09,
0x04 /* LangID = 0x0409: U.S. English */
};
const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
{
VIRTUAL_COM_PORT_SIZ_STRING_VENDOR, /* Size of Vendor string */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType*/
/* Manufacturer: "STMicroelectronics" */
'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
'c', 0, 's', 0
};
const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
{
VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
/* Product name: "STM32 Virtual COM Port" */
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0,
'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0,
'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0
};
uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
{
VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
};
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Вот это - совсем не умею. Подключаюсь, перебирая все COM порты.UAVpilot писал(а):и при одключении к ней проверяй его.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Да, словесные названия производителя, продукта, серийный номер.michael-yurov писал(а):Это то, что в файле usb_desc.c/h:
У системы можно запросить список подключенных usb устройств с выборкой по нужным атрибутам...michael-yurov писал(а):Вот это - совсем не умею. Подключаюсь, перебирая все COM порты.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
При инициализации виртуального com порта создается серийный номер устройства.
Собственно, здесь вызывается функция Get_SerialNum();
Сама функция:
Стоит ли здесь что-то менять?
Собственно, здесь вызывается функция Get_SerialNum();
Код: Выделить всё
void Virtual_Com_Port_init(void)
{
/* Update the serial number string descriptor with the data from the unique
ID*/
Get_SerialNum();
pInformation->Current_Configuration = 0;
/* Connect the device */
PowerOn();
/* Perform basic device initialization operations */
USB_SIL_Init();
/* configure the USART to the default settings */
//USART_Config_Default();
bDeviceState = UNCONNECTED;
}Код: Выделить всё
/*******************************************************************************
* Function Name : Get_SerialNum.
* Description : Create the serial number string descriptor.
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void Get_SerialNum(void)
{
uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
Device_Serial0 = *(__IO uint32_t*) (0x1FFFF7E8);
Device_Serial1 = *(__IO uint32_t*) (0x1FFFF7EC);
Device_Serial2 = *(__IO uint32_t*) (0x1FFFF7F0);
Device_Serial0 += Device_Serial2;
if (Device_Serial0 != 0)
{
IntToUnicode(Device_Serial0, &Virtual_Com_Port_StringSerial[2], 8);
IntToUnicode(Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4);
}
}- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Я подключаюсь, ища в реестре запись об активной службе, которая задействуется при подключении устройства. Оттуда же беру и номер порта.michael-yurov писал(а):Подключаюсь, перебирая все COM порты.
Код: Выделить всё
// Начинаем искать девайс
try
{
HKEY rkService = 0;
TCHAR keyname[512];
// Получаем раздел с описанием подключения
_stprintf(keyname, _T("SYSTEM\\CurrentControlSet\\services\\drvnusb\\Enum"));
LONG rres = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, KEY_READ, &rkService);
if (rres != ERROR_SUCCESS)
throw 3;
if ((rres = RegQueryValueEx(rkService, _T("Count"), NULL, &type, (LPBYTE)&dvalue, &size)) != ERROR_SUCCESS || dvalue < 1)
throw 1;
size = 510;
if ((rres = RegQueryValueEx(rkService, _T("0"), NULL, &type, (LPBYTE)&cvalue, &size)) != ERROR_SUCCESS)
throw 1;
cvalue[size] = 0;
RegCloseKey(rkService);
// Открываем раздел с описанием подключения и получаем порт
_stprintf(keyname, _T("SYSTEM\\ControlSet001\\Enum\\%s\\Device Parameters"), cvalue);
if ((rres = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyname, 0, KEY_READ, &rkService)) != ERROR_SUCCESS)
throw 2;
size = 510;
if ((rres = RegQueryValueEx(rkService, _T("PortName"), NULL, &type, (LPBYTE)&cvalue, &size)) != ERROR_SUCCESS)
throw 2;
cvalue[size] = 0;
RegCloseKey(rkService);
}
catch (int e)
{
switch (e)
{
case 1:
printf("XYZ device not connected.\r\n");
return 1020;
case 2:
printf("Can't activate XYZ's driver.");
return 1020;
case 3:
printf("XYZ's driver is not installed.");
return 1020;
}
return 0;
}
_stprintf(comname, _T("\\\\.\\%s"), cvalue);
hcom = CreateFile(comname, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hcom == INVALID_HANDLE_VALUE)
{
hcom = NULL;
DWORD err = GetLastError();
_tprintf(_T("Error opening %s - %d\r\n"), argv[1], err);
return 1002;
}
DWORD rdd;
COMSTAT cst;
BOOL res = ClearCommError(hcom, &rdd, &cst);
DCB dcb;
COMMTIMEOUTS cto;
dcb.DCBlength = sizeof(DCB);
res = GetCommState(hcom, &dcb);
char st[1024];
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 460800;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = 1;
dcb.fParity = 0;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = 0;
dcb.fTXContinueOnXoff = 1;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fErrorChar = 0;
dcb.fNull = 0;
dcb.fRtsControl = 0;
dcb.fAbortOnError = 0;
res = SetCommState(hcom, &dcb);
if (!res)
{
CloseHandle(hcom);
hcom = NULL;
printf("Error DCB set\r\n");
return 1004;
}
res = GetCommTimeouts(hcom, &cto);
cto.ReadIntervalTimeout = MAXDWORD;
cto.ReadTotalTimeoutMultiplier = 0;
cto.ReadTotalTimeoutConstant = 0;
cto.WriteTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
res = SetCommTimeouts(hcom, &cto);
if (!res)
{
CloseHandle(hcom);
hcom = NULL;
printf("Error CTO set\r\n");
return 1005;
}
res = GetCommTimeouts(hcom, &cto);
Правда я самым бессовестным образом заменил все описатели и имена служб в коде и .inf файле на свои
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
В твоём случае нужно менять значения в массиве Virtual_Com_Port_StringSerial, ну или в двух предыдущих.michael-yurov писал(а):Стоит ли здесь что-то менять?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Я здесь заменил «STM3210» на «ECB0100»UAVpilot писал(а):В твоём случае нужно менять значения в массиве Virtual_Com_Port_StringSerial
Код: Выделить всё
uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
{
VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
};Код: Выделить всё
uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
{
VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
'E', 0, 'C', 0, 'B', 0, '0', 0, '1', 0, '0', 0, '0', 0
};Или данная строка все равно потом заполняется данными из серийного номера в этих строках кода:
Код: Выделить всё
IntToUnicode(Device_Serial0, &Virtual_Com_Port_StringSerial[2], 8);
IntToUnicode(Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4);Гугл говорит, что некий уникальный идентификатор устройства.
Ну и имена производителя и устройства заменил.
- AndyBig
- Мастер
- Сообщения: 3971
- Зарегистрирован: 07 мар 2014, 04:01
- Репутация: 1121
- Откуда: юг России
- Контактная информация:
Re: Блок контроля для оптических линеек (проект)
Уникальный для каждого чипа 96-битный идентификатор.michael-yurov писал(а):Что там вообще лежит по адресам 0x1FFFF7E8 - 0x1FFFF7F0?
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Жаль, что заинтересованных нет.

Оно, конечно, и не сезон... но я надеялся, что хоть кто-то отпишется.
Оно, конечно, и не сезон... но я надеялся, что хоть кто-то отпишется.
- solo
- Мастер
- Сообщения: 1374
- Зарегистрирован: 20 окт 2011, 18:39
- Репутация: 272
- Настоящее имя: Юрий Соловьев
- Откуда: Украина Харьков
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
я могу взять на испытание но у меня станок на LinuxCNC привода осей ШД и сейчас линейки подключений к лпт , скорость станка по осям 2700мм/мин , энкодеры (0.005) , если линейки можно прилепить к моему станку то могу по тестировать
Я думаю, что проблем с отправкой в Харьков не будет
Я думаю, что проблем с отправкой в Харьков не будет