AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2008, 09:31   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от lev Посмотреть сообщение
У нас немного по другому:
X++:
void init()
{
   ...
   sc = new ComPortMSComm();
   sc.initParmDefault();
   ...
}
Где можно найти етот класс - ComPortMsComm ?
Старый 06.10.2008, 17:30   #2  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Где можно найти етот класс - ComPortMsComm ?
Спасибо вам , Лев , за помочь ...

Осталось одна проблема - немогу вызвать MsComm32.ОСХ . Идёт такая ошибка :

COM object of class '{648A5600-2C6E-101B-82B6-000000000014}' could not be created. Ensure that the object has been properly registered on computer 'RIMANTAS'.
Object 'COM' could not be created ...

И немогу понять , почему я немогу пускать етого ОСХ-а . Регистрация проходит , в регистре ключ есть ... как и всё хорошо ...

С уважением , Римантас
Старый 07.10.2008, 16:51   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Спасибо вам , Лев , за помочь ...

Осталось одна проблема - немогу вызвать MsComm32.ОСХ . Идёт такая ошибка :

COM object of class '{648A5600-2C6E-101B-82B6-000000000014}' could not be created. Ensure that the object has been properly registered on computer 'RIMANTAS'.
Object 'COM' could not be created ...

И немогу понять , почему я немогу пускать етого ОСХ-а . Регистрация проходит , в регистре ключ есть ... как и всё хорошо ...

С уважением , Римантас
Все проблемы решены ! Всё работает . Для успешной регистрации ОСХ-а , надо ещё добавить в реестр такое ( vbctrs.reg файлик ) :

Код:
REGEDIT
HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights.

// The 16 bit and 32-bit OCX Professional license follows:
HKEY_CLASSES_ROOT\Licenses\DB4C0D00-400B-101B-A3C9-08002B2F49FB = mgkgtgnnmnmninigthkgogggvmkhinjggnvm
							
// The 32 bit OCX Professional license follows:
HKEY_CLASSES_ROOT\Licenses\7BC20EDC-4A42-101B-A3C9-08002B2F49FB = gifblihbhiiihbciocfbkifbqcfcdiebbiqh

// spin32 DB key
// anibtn DB key
// gauge  7B key
// grid   DB key
// keysta DB key
// msoutl DB key
// threed DB key
Спасибо всем за помочь !
Старый 26.11.2008, 18:48   #4  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 523 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Решил добавить еще один пример работы с RS-232 он же COM.
Использован код AndyD, за что ему большое спасибо!
Принцип работы - непосредственно через WinApi, по таймеру.
Изображения
Тип файла: bmp BarCode_Form.bmp (132.0 Кб, 573 просмотров)
Вложения
Тип файла: xpo BarCodeScan_Example.xpo (11.4 Кб, 675 просмотров)
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
За это сообщение автора поблагодарили: mbal (1), jasper (1), Ace of Database (10).
Старый 16.05.2014, 14:44   #5  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Подниму тему.

Понимаю, конечно, что это скорее всего невозможно, но спрошу на всякий случай. Если посмотреть на различные примеры функций обработки КОМ-портов для сканеров ШК, то видим, что имя порта, к которому подключено устройство указывается строкой. Так как мой сканер использует первый следующий свободный порт (что на каждом компьютере может быть разным), получется потребуется производить настройку порта для каждого пользователя/компьютера индивидуально.
Вопрос: существуют ли способы определить к какому порту подключено моё устройство-сканер на текущей машине? Или давать каждому пользователю возможности настройки КОМ-порта для подключения сканера (скажем, прямо на форме) вручную и запоминать их через SysLastValue (к примеру)?

Спасибо!

Приведу свой код с использованием .NET в X++ для обработки получения данных COM-порта. Может пригодится.
X++:
    str                         message;
    boolean                     keepTrying;
    InteropPermission           lclsInteropPerm;
    System.IO.Ports.SerialPort  SerialPort;
    ;

    lclsInteropPerm = new InteropPermission(InteropKind::ClrInterop);
    lclsInteropPerm.assert();

    try
    {
        SerialPort = new System.IO.Ports.SerialPort('COM3');

        // Parameters
        SerialPort.set_BaudRate(9600);
        SerialPort.set_Parity(System.IO.Ports.Parity::None);
        SerialPort.set_StopBits(System.IO.Ports.StopBits::One);
        SerialPort.set_DataBits(8);
        SerialPort.set_Handshake(System.IO.Ports.Handshake::None);
        // Timeout
        SerialPort.set_ReadTimeout(500);

        SerialPort.Open();

        keepTrying = true;
        while (keepTrying)
        {
            message = SerialPort.ReadExisting();

            if (message)
            {
                keepTrying = false;
                info(message);
            }
        }
    }
    catch (Exception::Internal)
    {
        error(AIFUtil::getClrErrorMessage());
    }
    catch (Exception::CLRError)
    {
        error(AIFUtil::getClrErrorMessage());
    }

    if (!CLRINterop::isNull(SerialPort))
    {
        SerialPort.Close();
    }

    CodeAccessPermission::revertAssert();
Старый 16.05.2014, 17:03   #6  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
Лучше создать настроечную табличку жёсткого соответствия ComputerName - COM порт. Если нельзя такого сделать можно смотреть в сторону команды change port, devcon. И если работаете через эмулятор USB-COM , то лучше административными мерами запретить пользователям переподключать сканеры к разным машинам, так как система выдает новые номера COM портов согласно идентификатору устройства.
За это сообщение автора поблагодарили: Cardagant (1).
Старый 16.05.2014, 17:26   #7  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Использую эмулятор USB-COM.
Спасибо за ответ! В принципе, так и думал.

Сейчас задумался, возможно стоит поразмыслить об использовании мканера в режиме HID-клавиатуры (или разрыва клавиатуры) с настройками ASCII префиксов/суффиксов (Ctrl + N and Ctrl + S при работе с Grid).
Или же перехватывать специальную клавишу, настроенную как префикс (например, F1) и производить обработку.
Или вообще просто на validateField() таблицы проверять корректность введённого значения без всего вышеуказанного.
Как считаете, что может быть эффективнее в плане реализации и использования?

Последний раз редактировалось Cardagant; 16.05.2014 в 17:38.
Старый 01.09.2014, 11:42   #8  
byte is offline
byte
Участник
 
36 / 31 (2) +++
Регистрация: 21.08.2007
Добрый день!

Приведенный код .net работает не так, как нужно. Ах ничего не выводит в инфолог, при завершении все выводится в редактор кода X++. Работаем через терминал, при этом в блокнот все сканируется нормально.

Цитата:
Сообщение от Cardagant Посмотреть сообщение

Приведу свой код с использованием .NET в X++ для обработки получения данных COM-порта. Может пригодится.
X++:
    str                         message;
    boolean                     keepTrying;
    InteropPermission           lclsInteropPerm;
    System.IO.Ports.SerialPort  SerialPort;
    ;

    lclsInteropPerm = new InteropPermission(InteropKind::ClrInterop);
    lclsInteropPerm.assert();

    try
    {
        SerialPort = new System.IO.Ports.SerialPort('COM3');

        // Parameters
        SerialPort.set_BaudRate(9600);
        SerialPort.set_Parity(System.IO.Ports.Parity::None);
        SerialPort.set_StopBits(System.IO.Ports.StopBits::One);
        SerialPort.set_DataBits(8);
        SerialPort.set_Handshake(System.IO.Ports.Handshake::None);
        // Timeout
        SerialPort.set_ReadTimeout(500);

        SerialPort.Open();

        keepTrying = true;
        while (keepTrying)
        {
            message = SerialPort.ReadExisting();

            if (message)
            {
                keepTrying = false;
                info(message);
            }
        }
    }
    catch (Exception::Internal)
    {
        error(AIFUtil::getClrErrorMessage());
    }
    catch (Exception::CLRError)
    {
        error(AIFUtil::getClrErrorMessage());
    }

    if (!CLRINterop::isNull(SerialPort))
    {
        SerialPort.Close();
    }

    CodeAccessPermission::revertAssert();
Теги
com port, rs232, winapi, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
COM / RS232 simple intergation project EVGL DAX: База знаний и проекты 10 18.03.2014 15:04
Kurt Hatlevik: Sneak preview of the WMS E&E Blog bot DAX Blogs 0 20.11.2008 01:10
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
Solutions Monkey: Enterprise Portal Screencasts at Channel9.msdn.com Blog bot DAX Blogs 6 01.07.2008 19:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:51.