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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2014, 14:44   #1  
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   #2  
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   #3  
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.
Старый 16.05.2014, 18:31   #4  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
Если есть терпение и время, очень интересно попробовать сделать перехват сообщений от HID клавиатуры с фильтром по VID/PID . Конечно проще настроить префикс и ловить данные со сканера в активный элемент с нулевой высотой к примеру.
Старый 01.09.2014, 11:42   #5  
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, время: 14:00.