| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Помогите пожалуйста! Как работать с функцией DLL? |
| Автор: wanderervb 26.3.2008, 15:20 | ||||||||||
| Доброе время суток! Помогите пожалуйста, совсем замаялся с функцией настройки серийного номера USB конвертора. Необходима программка считывающая и меняющая серийный номер конвертера CP2102 Со считыванием номера нет никаких проблем, а вот поменять на другой ни как не получается. Все делаю по инструкции: Описал функцию в отдельном модуле:
Определил константы:
Программа определила количество подключенных устройств
Получил номер устройства
Получил серийный номер
А когда пытаюсь записать новый серийный номер, VB выдает сообщение, что неправильный номер аргумента или неверное назначение. Может кто писал приложения для CP210x, помогите, в чем может быть проблема? У производителя скачал даташит AN144 |
| Автор: cardinal 26.3.2008, 16:41 |
| Модератор: wanderervb, пользуйтесь тегом "код"! |
| Автор: wanderervb 26.3.2008, 16:55 |
| Спасибо, непременно |
| Автор: cardinal 26.3.2008, 18:26 |
| У FTDI например есть своя программа для того, чтобы это сделать. Может есть такая же программа для изменения серийного номера и у CP210x? Если с помощью программы тоже не получится изменить этот номер, то может стоит защита и с твоим устройством это вообще невозможно (а возможно только со своим чипом). |
| Автор: wanderervb 27.3.2008, 05:02 | ||||||||||
У CP210x тоже есть такая программа, при помощи которой можно изменить серийный номер, но она не удобная для постоянного использования, вот и затеял написать программку позволяющую процесс изменения серийного номера упростить. Ссылка на даташит:
Вот часть кода: Максимальная длинна строки
В процедуре чтения:
В функции:
В процедуре записи:
|
| Автор: cardinal 27.3.2008, 14:02 | ||||
Про три я ничего не нашел в документе, тут ИМХО все правильно. Я вот больше думаю правильно ли то, что ты говоришь, что ind = 1? То есть что ты обращаешься ко второму device!
|
| Автор: Akina 27.3.2008, 14:10 |
Я вижу дефиницию, котрая написана в самом первом посте. С какого конца не считай - аргументов три. И вижу вызов в том же посте. Там аргументов - четыре, тоже вне зависимости от направления подсчета. |
| Автор: wanderervb 27.3.2008, 17:55 | ||||||||||||
[QUOTE=cardinal,27.3.2008, 14:02]
Приношу свои извинения, - это опечатка
Обращение к нулевому устройству При записи серийного номера ind = 0 У меня затруднения с переменной SerialString2( ), хотя точно не уверен. При получении серийного номера от устройства SerialString() определена как байт Все взято из даташита
Функция, извлекающая номер из устройства
Получает первый байт серийного номера SerialString(0) и длинну номера SerialLength Хотя в даташите написано, что SerialStrin() должен получить строку Ну да ладно, - перебрав побайтно SerialStrin() , я получил действительно номер устройства. Хотя для меня непонятно, - почему в функции необходимо указывать SerialString(0) По аналогии получения номера от устройства, попытался записать свой номер. Так как функция получения номера дает байт от номера, а не всю строку, я так же для записи попробовал записать первый байт серийного номера, но все безуспешно. При записи байта, я получаю ошибку проверки Status
В случае записи всей строки получаю сообщение, что аргумент не соответствует описанию или Type mismatch Я попробовал и менять тип переменной, и длину серийного номера. Ничего не помогает. |
| Автор: wanderervb 27.3.2008, 18:20 | ||||
Спасибо Исправлено
Но проблема осталась. |
| Автор: Akina 27.3.2008, 18:52 | ||||||
Все правильно написано. Хоть в SerialString() передается строка, но оно у тебя определено как массив байтов. Собственно для того и существует процедура ConvertToString(), чтобы массив байтов превратить в строку. Хотите работать со строковой переменной - передавайте в функцию VARPTR на строку требуемой длины. Но должна существовать и комплементарная процедура, которая превратит строку сериального номера для присвоения в массив байтов, который можно скормить функции CP210x_SetSerialNumber
Более того, мне напрочь неясно, как может работать этот код:
На операторе присвоения он должен визжать как недорезанный поросенок, что не может присвоить значение массиву. Или по крайней мере жаловаться на несоответствие типов. |
| Автор: cardinal 27.3.2008, 22:07 | ||
Туда не смотрел |
| Автор: wanderervb 1.4.2008, 04:12 | ||
| Спасибо Всем, заработало Только есть небольшие затруднения с настройкой PID При записи PID его значение меняется на произвольную величину, при этом устройство не выдает сообщений об ошибках
И еще одна неприятная вещ, устройство не всегда перенастраивается. Ни как не могу понять причины. Не меняя программы, а только перезагрузив ее, устройство "смерено" меняет серийные номера (кроме PID) и другие настройки. При новом подключении начинает на каждую команду настройки, отправлять сообщение, о неверном параметре и не хочет менять настроек. Какую-то зависимость такого поведения выявить не удалось. Все уже перепроверил, в одном случае меняет настройки, в другом, нет. В даташите о таких ситуациях ничего не написано. Так как это происходит со всеми устройствами, грешу только на программу, а что в ней еще проверить, - не приложу ума |
| Автор: cardinal 1.4.2008, 12:07 | ||
cyHandle поменялся? |
| Автор: wanderervb 1.4.2008, 14:55 | ||||
Нет, не поменялся В начале процедуры настройки S/N, PID и т.д. , я получаю новый cyHandle |