Контроллер оптических линеек / энкодеров (Step/Dir)

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

Потихоньку двигаю проект.
Показывать особенно то нечего... Вот, скриншот прикрепляю.
На данный момент и программа настройки работает, и сама плата тоже.
Подключать к линейке и приводу пока не пробовал. Нужно еще дописать отображение графиков.
Вполне вероятно, я что-то забыл, и, вероятно, добавил что-то ненужное в интерфейс и функционал, но пока я не способен это увидеть.
В целом картинка вырисовывается.
Настройки хранятся в контроллере и при подключении usb кабеля сразу же передаются в программу, после чего поля становятся доступными для редактирования.
Ввод новых значений на экране сразу же передается в контроллер, используется в его работе и сохраняется в его памяти.
2017-03-31_00-22-04.png (2261 просмотр) <a class='original' href='./download/file.php?id=107634&mode=view' target=_blank>Загрузить оригинал (50.84 КБ)</a>
Расчеты ведутся в числах с плавающей точкой (где это необходимо в 64 битных).
Период сервоцикла 100 мкс (обработка данных и корректировка выходного сигнала занимает около 50 мкс, остальные 50 мкс - бездействие).
Возможна работа в бесконечном режиме (привод конвейерной ленты).
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

Наверное, оно уже работает, но к железу еще пока не пробовал подключать.
Вылавливаю баги (в основном в поведении интерфейса программы). Казалось бы, "все там просто", но вот потратил уже на это несколько недель. Улучшаю, исправляю, тестирую, оптимизирую, вылавливаю нетипичные ситуации.
В данный момент ломаю голову над тем, как проверить, что все переменные привел к общим единицам.
2017-04-12_23-47-56.png (2203 просмотра) <a class='original' href='./download/file.php?id=108737&mode=view' target=_blank>Загрузить оригинал (56.44 КБ)</a>
2017-04-12_23-47-56.png (2193 просмотра) <a class='original' href='./download/file.php?id=108757&mode=view' target=_blank>Загрузить оригинал (71.99 КБ)</a>
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

Сегодня осмелился подключить блок контроля к своему раскладчику.
Боялся, что всплывет много проблем,.. но нет, заработало!
Пока еще «продукт» сыроват, но за счет визуального интерфейса с графиками удалось лучше настроить раскладчик.

https://youtu.be/Nu5Au73ohDc
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение Serg »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

Платы контроллера установил на раскладчик. Работают исправно, и что-то существенно улучшить сложно.
Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе, но другие устройства можно отключить на время настройки этой платы.
Скорее всего исправить проблему не смогу, т.к. косяк с USB подключением, вероятно, где-то в кодах от STMicroelectronics.
Собственно, вопрос:
Есть ли у кого-нибудь интерес к данному устройству, и, возьмется ли кто-либо проверить контроллер в работе?
Собранных плат в запасе нет, но если кто-либо возьмется тестировать - куплю комплектующих, соберу нужное количество, отправлю.

Бесплатно раздавать не хотелось бы, т.к. в этом случае велика вероятность, что контроллеры останутся лежать на полочках.
Полагаю, сумма в 1000 руб. за штуку будет разумной.
При желании контроллеры можно будет вернуть (с возвратом денег).
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение AndyBig »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

AndyBig писал(а):А что за проблемы?
Да сам не пойму.
Было такое, что в системе установилось два разных USB устройства с одинаковыми номерами COM порта.
Иногда, вроде бы, подключается, usb устройство работает, но установить связь с виртуальным COM портом не удается, хотя он есть.
В каких-то случаях, вылезала ошибка определения дескриптора usb устройства.

У меня и без данных плат возникали проблемы с китайскими USB-UART преобразователями (на раскладчике два таких стоят один для ленточных питателей, второй - в главном контроллере).
Все те же проблемы, что перечислил выше.

Если левые usb-com устройства отключить - контроллеры линеек/энкодеров подключаются и определяются без проблем.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение Serg »

michael-yurov писал(а):Платы контроллера установил на раскладчик. Работают исправно, и что-то существенно улучшить сложно.
Могут возникнуть проблемы с usb подключением при наличии других виртуальных com-потров в системе, но другие устройства можно отключить на время настройки этой платы.
Скорее всего исправить проблему не смогу, т.к. косяк с USB подключением, вероятно, где-то в кодах от STMicroelectronics.
Это не баг stm, это особенности енумератора usb в винде.
Задай какой-либо уникальный признак в usb-дескрипторе своей платы (например название) и при одключении к ней проверяй его.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение AndyBig »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

UAVpilot писал(а):Задай какой-либо уникальный признак в usb-дескрипторе своей платы (например название) и при одключении к ней проверяй его.
Это то, что в файле usb_desc.c/h:

Код: Выделить всё

/**
  ******************************************************************************
  * @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>&copy; 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****/
А что именно можно изменять? Virtual_Com_Port_StringProduct и Virtual_Com_Port_StringVendor?
UAVpilot писал(а):и при одключении к ней проверяй его.
Вот это - совсем не умею. Подключаюсь, перебирая все COM порты.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение Serg »

michael-yurov писал(а):Это то, что в файле usb_desc.c/h:
Да, словесные названия производителя, продукта, серийный номер.
michael-yurov писал(а):Вот это - совсем не умею. Подключаюсь, перебирая все COM порты.
У системы можно запросить список подключенных usb устройств с выборкой по нужным атрибутам...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

При инициализации виртуального com порта создается серийный номер устройства.

Собственно, здесь вызывается функция 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: Блок контроля для оптических линеек (проект)

Сообщение AndyBig »

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: Блок контроля для оптических линеек (проект)

Сообщение Serg »

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

Re: Блок контроля для оптических линеек (проект)

Сообщение michael-yurov »

UAVpilot писал(а):В твоём случае нужно менять значения в массиве Virtual_Com_Port_StringSerial
Я здесь заменил «STM3210» на «ECB0100»

Код: Выделить всё

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);
2017-05-09_18-21-05.png (1939 просмотров) <a class='original' href='./download/file.php?id=111015&mode=view' target=_blank>Загрузить оригинал (65.12 КБ)</a>
Что там вообще лежит по адресам 0x1FFFF7E8 - 0x1FFFF7F0?
Гугл говорит, что некий уникальный идентификатор устройства.

Ну и имена производителя и устройства заменил.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Блок контроля для оптических линеек (проект)

Сообщение AndyBig »

michael-yurov писал(а):Что там вообще лежит по адресам 0x1FFFF7E8 - 0x1FFFF7F0?
Уникальный для каждого чипа 96-битный идентификатор.
STM32F101xx-102xx-103xx-105xx-107xx reference manual 1045.jpg (1930 просмотров) <a class='original' href='./download/file.php?id=111016&mode=view' target=_blank>Загрузить оригинал (256.36 КБ)</a>
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение michael-yurov »

Жаль, что заинтересованных нет. :eh: :wik:
Оно, конечно, и не сезон... но я надеялся, что хоть кто-то отпишется.
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение solo »

я могу взять на испытание но у меня станок на LinuxCNC привода осей ШД и сейчас линейки подключений к лпт , скорость станка по осям 2700мм/мин , энкодеры (0.005) , если линейки можно прилепить к моему станку то могу по тестировать
Я думаю, что проблем с отправкой в Харьков не будет
Ответить

Вернуться в «Электроника»