Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Проблемы с MiniOS7

 Ответить Ответить Страница  123>
Автор
Сообщение
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Проблемы с MiniOS7
    Опубликовано: 28 Декабрь 2005 07:52

Здравствуйте, проблема состоит в следующем:

Необходимо разработать ПО для контроллера IView-100. Описание его находится на этой странице

http://www.nnz-ipc.ru/cgi-bin/main.pl?mode=spec&ObjNo=5002623&CclsID=347&uid=1132449837.
Данный контроллер работает под управлением MiniOS7.
На поставляемом с прибором диске мной были обнаружены заголовочные и lib-файлы(iview.h, mmi100.h, iview40L.lib, mmi100.lib).  Дело в том, что на API MiniOs7 у меня нет нормальной документации. Есть примеры, взятые с диска и скачаные из интернета, но они не работают. В своем проекте я использовал некоторые функции API (LcdInit(), Print(), LcdClearTextScreen(), Kbhit(), LcdPutsXY()). Но, используя их не удается собрать проект: ошибка переполнения сегмента при использовании модели памяти small (Fixup overflow at _TEXT:002F, target = _LcdPutsXY in module tst.cpp). Другую модель памяти использовать нельзя в данном контроллере.

Есть еще другие функции, которые описаны в руководстве (они вроде работают, если пишешь на C), но не работают, если пишешь на C++.
Вот некоторые из них: initLCD(), clrLCD(), closeLCD(), keypad100(), textoutT(), gotoxyT().

Использую Turbo C++ версии 3.0.

Кто-нибудь работал с этим контроллером, подскажите пожалуйста.


Где можно взять полную документацию на API MiniOs7 (в поставляемом с прибором руководстве документировано не все, да к тому же с ошибками, искал в интернете - ничего не нашел)? Поделитесь пожалуйста.

Прошу, отзовитесь кто работал с MiniOs7, очень нужно.

Спасибо, с уважением, silart.

Наверх
nick_user Смотреть выпадающим
Участник
Участник


Присоединился: 18 Ноябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54
Свойства публикации Свойства публикации   Ответить, цитируя автора - nick_user Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 08:17
У вас библиотеки для какой модели памяти?
Судя по названию (iview40L.lib), для модели Large.
Естественно, если вы установите в опциях компилятора
модель Small, с ними ничего не соберется.
Я никогда не работал с IView100, но у меня компакт-диске
от ICPDAS есть библиотеки и описание этого контроллера.
библиотеки такие:
iview.h
iviewl.h - для модели large
iviews.h - для модели small
mmi100.h
mmi100.lib - понятия не имею, для какой модели.
Наверх
remint Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 24 Февраль 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 185
Свойства публикации Свойства публикации   Ответить, цитируя автора - remint Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 08:19
Первоначально опубликовано silart

На поставляемом с прибором диске мной были обнаружены заголовочные и lib-файлы(iview.h, mmi100.h, iview40L.lib, mmi100.lib). Но, используя их не удается собрать проект: ошибка переполнения сегмента при использовании модели памяти small (Fixup overflow at _TEXT:002F, target = _LcdPutsXY in module tst.cpp). Другую модель памяти использовать нельзя в данном контроллере.

Где можно взять полную документацию на API MiniOs7?

На поставляемом диске (так всегда есть для подобных контроллеров i7188) есть довольно хорошее HTML-описание функций API для прилагаемых библиотек. Думаю что это касается и используемых вами библиотек.

У вас библиотека iview40L.lib с буквой L в конце. Это означает, что она скомпилирована для модели LARGE, и использовать ее можно только для такой модели памяти. Для модели SMALL такая библиотека может называться iview40S.lib, если таковая вообще есть.
Александр Бурмистров,
www.entels.ru
Наверх
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 10:15

Спасибо вам nick_user .

Нашел на диске я файл iviews.lib, скомпилировал - все работает, если не используешь некоторые функции из заголовочного файла. Начинаешь их использовать пишет дословно следующее: undefined symbol _LcdPutsXY in module tst.c.

Может ли так быть, что некоторые функции из заголовочного файла есть в lib-файле, а некоторых - нет?

И еще один вопрос.

В руководстве к прибору были описаны некоторые функции, которые, если пишешь на C работают, а на C++ - нет. Вот некоторые из них:

InitLCD()               initLCD()

ClrScrn()               clrLCD()

TextOutAt()           textoutT()

CloseLCD()           closeLCD().

Те, что расположены справа - работают в C, а в C++ - не работают.

Те, что расположены слева нигде не работают, но их прототипы находятся в файле mmi100.h. Прототипы функций, расположеных справа вообще нигде НЕТ. Как такое может быть? Прототипов нет, а все в C компилируется и компонуется, только в C++ нехочет. Можно ли каким-то образом засунуть прототипы в lib-файл, и самое важное, можно ли их оттуда достать?

Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 10:19

Судя по всему, нурешаются соглашения об именах.

Пробовали добавлять в *.H файлах такую конструкцию:

#ifdef _cplusplus

extern "C"

{

// все объявления функций

 

}

#endif

Наверх
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 10:26

Спасибо, remint .

Вы писали, что:

На поставляемом диске (так всегда есть для подобных контроллеров i7188) есть довольно хорошее HTML-описание функций API для прилагаемых библиотек. Думаю что это касается и используемых вами библиотек.

Дело в том, что есть на диске pdf-ник и есть бумажное руководство - распечатанный pdf-ник, но только там очень много ошибок и нет полного описания тех функций какие я нашел в заголовочных файлах. Хотелось бы иметь хорошую документацию на API MiniOS7, а не жалкое ее подобие в исполнении полуграмотного китайца.

Если Вам не трудно, прошу слить что у Вас есть по MiniOs7 мне на silart@mail.ru.

Заранее благодарен.

С уважением, silart.

Наверх
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Декабрь 2005 10:33
Первоначально опубликовано KozlovKS

Судя по всему, нурешаются соглашения об именах.

Пробовали добавлять в *.H файлах такую конструкцию:

#ifdef _cplusplus

extern "C"

{

// все объявления функций

 

}

#endif

В файле mm100.h так все и сделано.

Пробовал объявлять функции, расположенные справа (initLCD())

следующим образом:

extern "C" void initLCD();

Но ничего не помогает: линкер пишет, что в файле mm100.lib нет этих функций.

Наверх
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 29 Декабрь 2005 06:31

Здравстуйте, с прибором IVIEW-100 есть еще некоторые проблемы.

Главная проблема заключается в следующем: При отправки в COM2 прибора какого-нибудь числа (отправляются 16-разрядные целые числа типа WORD в Windows) контроллер получает совсем не то, что ему было отправлено. Если прибор что-то шлет в компьютер – тоже приходит не то.

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

Кабель спаян правильно: им я пробовал соединять два последовательных порта компьютера, и все работало. Соединял прибор с компьютером кабелем, купленным в магазине (этот кабель тоже был протестирован на 2-х портах компьютера) – те же глюки.

Пробовал соединять прибор прямым кабелем (не нуль-модемным) – вообще связь не работает.

На моем компьютере имеется один COM-порт и установлена плата PCI COM-порта типа Netmos 9835. Прибор подключен к порту, который на плате.

Возможно проблемы в неправильно работающих API-функциях MiniOS7? Или что-то со скоростями UARTа? Или может быть типы пересылаемых данных не согласованы.

Подскажите пожалуйста. Привожу здесь исходники для MiniOs7 и для Windows.

 

#include "mmi100.h"

#include "iview.h"

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

int port = 2;

int iNumberBuffer = 0;

char szStringTmp[16];

 

int main()

{

 

            Print("XxxxxxxxxxX\n");

 

            InstallCom(port, 115200, 8, 0, 1);

            Print("Installed Com2\n");

           

           

if (initLCD() > 0)

{

            Print("Can not initialize LCD\n");

} else

{

            while (1)

            {

                        if (IsCom(port))

                        {

                                   iNumberBuffer = ReadCom(port);

                                   Print("Port:%d\n", iNumberBuffer);

                                   clrLCD();

                        }

                       

 

                        memset(szStringTmp, 0, sizeof(szStringTmp));

                        itoa(iNumberBuffer, szStringTmp, 10);

                        textoutT(8, 4, szStringTmp);

            }         

            closeLCD();

}

 

            RestoreCom(port);

            Print("Restore Com2\n");

return 0;

}

 

 

#include <windows.h>

 

HANDLE hCom = INVALID_HANDLE_VALUE;

DCB dcb;

BOOL bResult = FALSE;

 

WORD iData[4];

DWORD dwReaden = 0, dwWriten = 0;

 

int main()

{

 

            hCom = CreateFile(TEXT("COM4"), GENERIC_READ | GENERIC_WRITE,

                                                             0, NULL, OPEN_EXISTING, 0, NULL);

 

            if (hCom != INVALID_HANDLE_VALUE)

            {

                        ZeroMemory(&dcb, sizeof(dcb));

                        bResult = BuildCommDCB(TEXT("baud=115200 parity=N data=8 stop=1"), &dcb);

                        dcb.fNull = FALSE;

                        bResult = SetCommState(hCom, &dcb);

                        PurgeComm(hCom,PURGE_RXCLEAR);

 

                        ZeroMemory(iData, sizeof(iData));

                        iData[0] = 16;

                        iData[1] = 24;

                        iData[2] = 27;

                        iData[3] = 12;

                        /* Отправленную в COM-порт последовательность целых чисел,
     прибор принемает как 10, 10, 225 и 9 соответственно,
     причем не всегда - бывают и другие последовательности.

                        */

 

                        bResult = WriteFile(hCom, &iData[0], 2, &dwWriten, NULL);

                        bResult = WriteFile(hCom, &iData[1], 2, &dwWriten, NULL);

                        bResult = WriteFile(hCom, &iData[2], 2, &dwWriten, NULL);

                        bResult = WriteFile(hCom, &iData[3], 2, &dwWriten, NULL);

                        CloseHandle(hCom);

            }

 

return 0;

}

Наверх
nick_user Смотреть выпадающим
Участник
Участник


Присоединился: 18 Ноябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54
Свойства публикации Свойства публикации   Ответить, цитируя автора - nick_user Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Январь 2006 11:21
Здравствуйте, silart.
Я бы предложил следующее.

1. Порт COM2 контроллера, согласно документации, может
работать как RS485 и RS232. Проверьте, как установлена
перемычка.

2. Насчет кабеля: проверьте, чтобы был соединены:
a) вывод 4 DB15(TxD2) с выводом 2 DB9(компьютер,RxD).
b) вывод 14 DB15(RxD2) с выводом 3 DB9(компьютер,TxD).
c) вывод 15 DB15(GND2) с выводом 5 DB9(компьютер,GND).

3. Зашейте для теста в контроллер программу-эхо:

void main()
{
   InstallCom(2, 115200, 8, 0, 1);
   while(1)
   {
      if(IsCom2())
      {
          while(DataSizeInCom2())
             ToCom2(ReadCom2());
      }
   }
}

и запустите гипертерминал или программу 7188.exe
(которая служит для прошивки контроллеров). Соответственно, то, что вы будете набирать с клавиатуры,
будет отправляться в контроллер, он будет возвращать
эти символы и в этом случае они будут отображаться в
консоли 7188.exe (или на гипертерминале).

Вот пока и все, что могу посоветовать.

Наверх
silart Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Декабрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 15
Свойства публикации Свойства публикации   Ответить, цитируя автора - silart Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Январь 2006 10:25
Спасибо за дельный совет, nick_user. Подскажите, пожалуйста, где находится эта перемычка. Когда я разбирал прибор там было 5 перемычек. Все они предназначены для управления дискретным вводом-выводом. Так написано в документации. Хотя там была где-еще одна перемычка, но я не знаю для чего она нужна.
Наверх
 Ответить Ответить Страница  123>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz