|
|
не ясна функция SOFT_MEMORY_START
Программирую E-330
Nch=32;
int Chan[32]={0,1,2... итд до 31}
int Data32[32];
SET_SOFT_PARM_E330(Nch,Chan);
SOFT_MEMORY_START(Nch*2,Chan,Nch,freq,0,0,1);
if(TEST_FOR_INPUT_END())
{
GET_INPUT_DATA(Data32,Nch*2);
}
если Nch не умножать на 2 то заполняются только первые 16 каналов при запросе 32х, или 8 при запросе 16. Почему так? Почему я должен запрашивать 2 кадра? Чтобы получать заполннеыми все 32 элемента массива.
И ещё - загадочные слова из документа lcard_ad.doc
"Число вводимых отсчетов в формате четырехбайтного целого числа. Внимание !!! Его необходимо передать преобразованным по формуле : N=0x7fffffff-Otschet; где Otschet -> число вводимых отсчетов (т.е. число вводимых аналоговых каналов, умноженное на число вводимых кадров)."
В примерах там стоит просто умножение двух произвольных чисел без преобразования...
или нужно делать то самое преобразование? Типа: (С++)
(__int32)(0x7fffffff-(32*1))
И как вообще правильно?
Очень жду ответа
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
если int -32 битный то будут глюки. Данные 16 битные. из 7fffffff вычитать не надо- оно само вычитается.
!!!! short Data32;
SET_SOFT_PARAM вызывать не надо - он внутри вызывается...
Ждать надо в цикле до готовности...
|
|
|
Re: не ясна функция SOFT_MEMORY_START
что все данные 16 битные?????
и массив интовый с номерами каналов?????
это visual C++ 6.0 - тут же всё по умолчанию 32х
Вообщем всё обозначить как __int16 ???
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
да 16 битовый. данные и номера каналов. да как int16
|
|
|
Re: не ясна функция SOFT_MEMORY_START
а вот функция GET_INPUT_DATA хочет вот такой прототип:
typedef void (WINAPI *GET_INPUT_DATA) (__int16 *Data, int Npoint);
и ни как не typedef void (WINAPI *GET_INPUT_DATA) (__int16 *Data, __int16 Npoint);
если второй вариант то программа сомазакрывается.
Все каналы кроме первого дают -1 на выходе, а первый через такт -180 -1. Глюк канала? или неправильно запрограммирован?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
дык число точек оно 32 битное...
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Вообщем проясняется...
железо в плате 16 битное. А софт компилировался на 32х битном компиляоре. В итоге - та часть что к железу - 16ти битная - остальное 32х..
Ладно - ковыряем дальше.
Спасибо.
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Так...
что то я перестал понимать вообще что либо..
в файле e330.doc - Модуль E-330 Техническое описание и инструкция по эксплуатации ДЛИЖ 411618.007 ТО 1996 г.
указано что:
0.0.0.1.Старт ввода во внутреннюю память (SOFT_MEMORY_START())
Формат вызова
void SOFT_MEMORY_START();
Назначение
Запускает функцию ввода в соответствии с параметрами, установленными при помощи функции SOFT_MEMORY_PREPARE().
Параметры
Отсутствуют
документ lcard_ad.doc - Пакет программного обеспечения L-Win для плат L-12XX, N-1250, L-1610, L-305, L-154, L-164, L-264, E-330, LTC, L-1620, L-1211
Версия 1.31
1997 г.
3,13,1 .Базовая функция ввода во внутреннюю память (SOFT_MEMORY_START())
Применимость
Функция реализована для плат серии L-12XX и для E330.
Формат вызова
void SOFT_MEMORY_START(unsigned long Npoint, int *Channels, int Nch, int Rate, int PageNumber, int OffsetNumber, int RestartMode);
и это, кроме того, что кто-то из них 16 битный а кто 32х.
Будьте добры, дайте разъяснения как правильно программировать под E330. Нужен ввод с частотой 256Гц по 32м каналам под win 2000 на Visual C++ 6.0
Вот взял пример:
WORD Data[2000];
WORD Channels[16]={0, 1, 2, 3};
#define MyN 8
#define MyX 10
#define Rate 1000
SOFT_MEMORY_START(MyX*MyN, Channels, MyN, Rate, 0, 0, 0);
while (!TEST_FOR_INPUT_END());
GET_INPUT_DATA(Data, MyX*MyN);
Что здесь означают MyX MyN ???
Если в списке каналов их всего 4
А массив для ввода вообще на 2000 значений типа word
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Просто считали 80 точек и все. Если открыть lc_procs.h то размеры однозначно определяются
в 32 битных компиляторах и long и int 32 бита
в 16 битных long -32 int -16
word -16 всегда
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Просто 80..... ну 8 на 10 я могу умножить.
Но не понимаю смысла в этом действе написанном:
4 канала - но массив объявлен на 16
второе - что есть точка?
unsigned long Npoint -
Это число отсчётов на число каналов? Тогда 4канала*1такт = каждый отсчёт с нужной мне частотой я хочу писать в файл... А в примере 8 (каналов то 4...вроде...) умножают на 10 - почему на 10? далее на месте где пишут число каналов стоит MyN=8 - когда в массиве указано 4 канала....
И зачем массив Data делать на 2000 - когда там всего то - то ли 80 то ли 4 канала по word.
Числа расставляют в программу по какому принципу?
В случае 32х каналов мне что - указать MyN=64, MyX=10 И вести запись в файл с частотой меньшей частоты оцифровки в 10 раз, через массив для ввода Data[16000] ?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Просто так получилось когда то давно лет 7-8 назад... Из одного примера сделали другой и не все поменяли...
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Это я понял..... что тот пример вряд ли после компиляции работать будет..
А правильно то как?
если каналов 32 то MyN=32 и если частота 256 то Rate= 3906 и MyX=1 чтобы оцифрованное сохранять по готовности каждый такт на винт?
И массив Data[32] как я понимаю?
У меня правда и в таком варинате не работает....
на выходе прёт всякая ерунда со значениями явно превышающими 2048 в хаотичном порядке по первым 7 каналам. Может это ещё и из-за выделения функции оцифровки в отдельный поток?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Можетпротсо отрицательные числа идут, а смтрите как word?
|
|
|
Re: не ясна функция SOFT_MEMORY_START
по каналам:
76
65280
41727
57853
11260
37115
11258
51449
248
248
248
и так далее 248 до 32 канала.....
Если читать 32канала*10 отсчёов то картина аналогичная - первые 8 заполнены числами примерно таких порядоков, а остальные каналы 248 - так все 10 кусков... (((
И кстати массив обозначен как WORD Data[320];
Значит массив не как в примере WORD а __int16 ???
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Одна фигня... с __int16 появляются отрицательные числа на некоторых из первых 8. Дальше те же 248
|
|
|
Re: не ясна функция SOFT_MEMORY_START
А один из нескольких циклов по всем каналам 2048..
Вот красота то....
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Так отрицательные можно. Диапазон то +-. Главное их величина. А в начале при старте переходны процесс а потом некотрый установившийся уровень наверное.... Сигналы то подключены? Лучше все же параметры под себя поставить 4 канала так и задайте 4 канала ну и данных возьмите 4*X точек. и смотрите потом.
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Итак что я выяснил:
всё работает на раз два три:
POWER_AND_PRINTER_E330
SOFT_MEMORY_START
GET_INPUT_DATA
STOP_FUNC_E330
А вся проблема в том, что при выделении трёх нижних функций в отдельный поток они выдают совсем не то, что должны.
Если делать их вне потока, то значения на выходе при не подключённых внешних сигналах и без заземления колебляться: -1 или 248
Теперь вот думаю как управлять процессом оцифровки без потоков...
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Это странно...тк все собирается в память платы... хотя и возмжно тк библиотек очень монстровидная и древняя...
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Посидел ещё немного и узнал вот что:
Всё перестаёт пахать и вне потока, если в функцию
SOFT_MEMORY_START подставить массив с номерами каналов где каналы УКАЗАНЫ.
А вот елси туда подставлять массив не инициализированный, то на выходе или -1 или -257
Я снова ничего не понимаю.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
Код полный пришлите, может опять что-то в размерности напутали int16 и int32?
В примере teste330.cpp все типы данных правильные.
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Итак - спасибо Полу!!!
Секрет этой функции для модуля E330 (???) разгадан.
последний параметр в функции SOFT_MEMORY_START должен быть 0 (однократный запуск)
Затем после готовности и сбора данных требуется перезапуск функцией SOFT_MEMORY_RESTART
|
|
|
Re: не ясна функция SOFT_MEMORY_START
Здравствуйте Пол. по-видимому остался ещё один секрет функции soft_memory_start
В документации сказано: Базовая функция ввода во внутреннюю память (SOFT_MEMORY_START())
Применимость
Функция реализована для плат серии L-12XX и для E330.
Рестарт, и TEST_FOR_INPUT_END GET_INPUT_DATA
так же реализоавны для плат 12хх
И как я понял, елис програма работает с E330 этими же функицями она должна и работать с 1250.
Нужно только загрузить другой биос.
А вот по факту не работает. Консольная программа из примеров с опросом 4х каналов просто виснет,
а то, что было модифицровано от платы E330 - виснет в зависимости от компьютера по-разному.
В чём исктаь ошибку?
Жду ответа.
Спасибо
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
а должна... там внутри case по разным платам..ю
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: не ясна функция SOFT_MEMORY_START
|