Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Обмен с крейтом.

Вы не вошли.

 Поиск | Регистрация | Вход 

18.10.2016 10:24:09
#1

Участник
Здесь с 18.10.2016
Сообщений: 5

Обмен с крейтом.

Исходные:
Имеется ящик с модулями LTR11, 2xLTR24-1, LTR27, LTR212
Служба установлена, связь по IP, монитор ее видит.

Что пытаюсь:
Написать сборщик (в особом порядке) на АССЕМБЛЕРЕ.

По примерам из дельфи посмотрел, например для модуля LTR11:

Как написано, объявляю структуру заголовка LTR11 header. (она пустая)
Вызываю LTR11_Init(pheader).
В дебаге видим, что структура заполняется, но чем? первое слово 0х140 (должен бы быть размер), но размер заполненной части структуры больше чем 0х140, в теле присутствует текст LTR11-что-то-там. Вообще не очень похоже на структуру TLTR11 из примера.

Возвращаемый результат LTR11_Init - 0, (ошибка LTR11_ERR_INVALID_DESCR       =-1000; // указатель на описатель модуля равен NULL?) Но он заведомо НЕ ноль!

Дальнейшие функции типа LTR11_GetConfig(hdr) возвращают -6 (LTR11_ERR_GETCFG??)

1. Что я делаю не так?
2. Как служба поймет, к какому из установленных LTR11 я хочу обратиться? В доке и исходнике об этом ни слова (ltr11api.pdf).
3. С чего вообще начинать работу со службой, на которой висит крейт? В каком примере или доке это есть? Нашел только кучу примеров работы с платами (нет у меня плат) или с отдельными модулями (тоже не этот случай).

Спасибо )

18.10.2016 11:24:52
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,293

Re: Обмен с крейтом.

Zetus пишет:

Написать сборщик (в особом порядке)

В каком смысле в особом порядке?

Zetus пишет:

В дебаге видим, что структура заполняется, но чем? первое слово 0х140 (должен бы быть размер),

0х140 (320 байт) - правильный размер (для 32-битных программ) и имя LTR11 в поле ModuleInfo.Name также устанавливается - так что похоже вызвалась LTR11 правильно.
Если что-то изменяется вне, то по видимому это не структура...

Zetus пишет:

Возвращаемый результат LTR11_Init - 0, (ошибка LTR11_ERR_INVALID_DESCR       =-1000; // указатель на описатель модуля равен NULL?) Но он заведомо НЕ ноль!

Не совсем понял, так LTR11_Init() вернул 0 или -1000? Вообще используете последние библиотеки (http://www.lcard.ru/download/ltrdll.exe)?

Также стоит проверить правильность передачи параметров и возвращаемого значения - в ltrapi под Windows используется соглашение вызовов stdcall.

Zetus пишет:

Как служба поймет, к какому из установленных LTR11 я хочу обратиться?

По параметрам, переданным в LTR11_Open() - в ней помимо прочего указывается серийный номер крейта (на случай, если крейтов больше одного, если один - можно пустую строку) и номер слота в крейте, в который установлен модуль, с которым хотите работать.

Пример может проще взять на С (http://www.lcard.ru/download/examples/l … i_msvc.zip), т.к. там просто последовательность вызовов LTR11 без кода связанного с интерфейсами.
С точки зрения функций модуля - они описаны в большинстве своем в ltr11api.pdf + документ по базовой библиотеке ltrapi - http://www.lcard.ru/download/ltrapi.pdf.

Общая идея работы со службой и самого ПО - http://www.lcard.ru/download/ltr_soft_g … tarted.pdf и более подробное описание работы службы при желании можно почитать в http://www.lcard.ru/download/ltr_cross_sdk.pdf.

P.S.: Использования ассемблера конечно интересный вариант)

18.10.2016 11:33:15
#3

Участник
Здесь с 18.10.2016
Сообщений: 5

Re: Обмен с крейтом.

Спасибо. Попробую.
LTR11_GetConfig(hdr) возвращает именно -6, а не -1006, странно?

18.10.2016 11:37:43
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,293

Re: Обмен с крейтом.

Есть набор общих ошибок, которые описаны в ltrapi.pdf - соответственно функции LTR11 могут возвращать как общие ошибки, так и специфические коды, описанные в ltr11api.pdf (которые -1000 и дальше).

-6 - код LTR_ERROR_CHANNEL_CLOSED из ltrapi, и в общем-то он логичен. Пока Вы не вызвали LTR11_Open(), то с модулем работать нельзя (Open идет после Init(), а только потом уже остальные функции)

18.10.2016 14:11:39
#5

Участник
Здесь с 18.10.2016
Сообщений: 5

Re: Обмен с крейтом.

теперь ошибка сокета...
    invoke LTR_Open,mTLTR //ок
    invoke LTR_GetCrates,mTLTR,Arr //ок, серийник коробки на месте
    invoke LTR_GetCrateModules,mTLTR,Arr //ок, список модулей на слотах корректен
    ;end main
    invoke LTR11_Init,mTLTR11 //ок, структура вроде заполнилась

вот тут начинается (mName заполнен 0, искомый модуль на слоте 1, порт - 11111 десятичный) :
    invoke LTR11_Open,mTLTR11,SADDR_DEFAULT,SPORT_DEFAULT,mName,1 ;0C0A800FEh

на выходе имеем LTR_ERROR_OPEN_SOCKET = -5;  // Ошибка открытия сокета.
адрес коробки в сети - 192.168.0.254, но служба запущена на моей машине
вместо адреса давать дефолт, или 0C0A800FEh?
вообще, оба варианта дают ошибку...

18.10.2016 14:16:57
#6

Участник
Здесь с 18.10.2016
Сообщений: 5

Re: Обмен с крейтом.

сорри, все решено.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск