Home > 1C > 1С Работа с COM портом

1С Работа с COM портом

Ноябрь 13th, 2008

Была поставлена задача, написать внешнюю компоненту для работы из 1C v8 с COM портом. Компонента должны была снимать показания веса с очень необычных весов, а именно Весы вагонные тензометрические ЭлВВ-150/2 (III) и Весы автомобильные тензометрические ЭлВА-1660 (III). Доступа к ним не было, по всей видимости, они были не подъемные и находились далеко от меня.

Для разработки dll была выбрана среда разработки Delphi. Окончательное готовое решение было выполнено на 3й день после начала работ. Код был не полностью мой, основывался на примерах из Интерента.

Долго не мог найти девайс который бы работал через нужный мне порт. Сперва была найдена мышь, но она на посланные команды в ответ нечего не слала обратно. Потом у приятеля нашелся модем, на котором я и проводил испытание свежеиспеченной динамической библиотеки.

Вот, что в итоге получилось:

1С работа с COM портом

1С работа с COM портом

Для мониторинга того что происходило на COM порте использовал утилиту PortMon компании Sysinternals которую пару лет назад купила преславутая Microsoft.

Portmon отслуживает COM порт

Portmon прослушивает COM порт

Для загрузки компоненты в следует поместить ее в директорию где установлина 1С в папку bin

После чего исполнить в 1C следующий код:

//Подключаем Компоненту

ЗагрузитьВнешнююКомпоненту(«rs232.dll»);

COMПорт = Новый(«Addin.rs232″);

// Открываем порт COM1, COM2, COM3 ….

COMПорт.ОткрытьПорт(«COM1″);

// Записываем команду

Команда = «AT»;

COMПорт.ЗаписатьСтроку(Команда);

//Закрываем порт

COMПорт.ЗакрытьПорт();

Для того что бы получить значени следует использовать процедуру обработки Внешнего События

Процедура ВнешнееСобытие(Источник, Событие, Данные)

Сообщить(«Получено значение: « + Данные);

КонецПроцедуры

Скачать демонстрационную конфигурацию и dll можно по ссылке: 1C_COM_DEMO+dll.rar

Скачать исходник DLL: rs232.rar

1C , , , , ,

  1. | #1

    Нашлись команды получения веса для: Весы вагонные тензометрические ЭлВВ-150/2 (III) и Весы автомобильные тензометрические ЭлВА-1660 (III).

    01h — Получение значения R
    61h — Получение значения веса

  2. gluar
    | #2

    В обработке осылаю команду на устройство персонализации проксимити карточек и хочу получить номер карточки.
    То, что устройство возвратило коды трех карточек, подтверждает Portmon:
    0 0.01302819 1cv8.exe IRP_MJ_CREATE cyg_ser0 SUCCESS Options: Open
    1 0.00000279 1cv8.exe IOCTL_SERIAL_GET_BAUD_RATE cyg_ser0 SUCCESS
    2 0.00000168 1cv8.exe IOCTL_SERIAL_GET_LINE_CONTROL cyg_ser0 SUCCESS
    3 0.00000196 1cv8.exe IOCTL_SERIAL_GET_CHARS cyg_ser0 SUCCESS
    4 0.00000168 1cv8.exe IOCTL_SERIAL_GET_HANDFLOW cyg_ser0 SUCCESS
    5 0.00000168 1cv8.exe IOCTL_SERIAL_GET_BAUD_RATE cyg_ser0 SUCCESS
    6 0.00000168 1cv8.exe IOCTL_SERIAL_GET_LINE_CONTROL cyg_ser0 SUCCESS
    7 0.00000140 1cv8.exe IOCTL_SERIAL_GET_CHARS cyg_ser0 SUCCESS
    8 0.00000168 1cv8.exe IOCTL_SERIAL_GET_HANDFLOW cyg_ser0 SUCCESS
    9 0.00678857 1cv8.exe IOCTL_SERIAL_SET_BAUD_RATE cyg_ser0 SUCCESS Rate: 9600
    10 0.00298557 1cv8.exe IOCTL_SERIAL_CLR_RTS cyg_ser0 SUCCESS
    11 0.00307022 1cv8.exe IOCTL_SERIAL_CLR_DTR cyg_ser0 SUCCESS
    12 0.00280734 1cv8.exe IOCTL_SERIAL_SET_LINE_CONTROL cyg_ser0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
    13 0.00397537 1cv8.exe IOCTL_SERIAL_SET_CHAR cyg_ser0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:0 XOFF:0
    14 0.00396391 1cv8.exe IOCTL_SERIAL_SET_HANDFLOW cyg_ser0 SUCCESS Shake:0 Replace:0 XonLimit:28672 XoffLimit:7168
    15 0.00000223 1cv8.exe IOCTL_SERIAL_GET_TIMEOUTS cyg_ser0 SUCCESS
    16 0.00000168 1cv8.exe IOCTL_SERIAL_SET_TIMEOUTS cyg_ser0 SUCCESS RI:1 RM:1 RC:10 WM:0 WC:0
    17 0.10989860 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    18 0.11033218 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    19 0.00093420 1cv8.exe IRP_MJ_WRITE cyg_ser0 SUCCESS Length 3: n..
    20 0.05856052 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 12: ;0F0004D836?
    21 0.11033497 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    22 0.11033777 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    23 0.11032715 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    24 0.00031261 1cv8.exe IRP_MJ_WRITE cyg_ser0 SUCCESS Length 3: n..
    25 0.11033218 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    26 0.01168500 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 12: ;0F00C02248?
    27 0.11033721 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    28 0.11032492 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    29 0.11032827 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    30 0.00014806 1cv8.exe IRP_MJ_WRITE cyg_ser0 SUCCESS Length 3: n..
    31 0.11033246 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    32 0.01169562 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 12: ;0F00C089C1?
    33 0.11032184 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    34 0.11033106 1cv8.exe IRP_MJ_READ cyg_ser0 TIMEOUT Length 0:
    35 0.00000447 1cv8.exe IRP_MJ_CLEANUP cyg_ser0 SUCCESS
    36 0.05259775 1cv8.exe IRP_MJ_CLOSE cyg_ser0 SUCCESS

    Устройство подключено к USB.
    cyg_ser0 это COM4.

    Но Процедура ВнешнееСобытие(Источник, Событие, Данные) не отлавливает эти посылки. Что посоветуете?

    Может есть описание rs232.dll?

  3. | #3

    @

    gluar

    на указаный email выслал измененную версию библиотеки. возможно заработает

  4. Turbo
    | #4

    Ссылка на скачивания уже не работает, можна ли получить компоненту на почту? И пробовали будет ли она работать на win2003 Server?

  5. | #5

    @Turbo
    выслал на почту

  6. Aleko
    | #6

    Ссылка на скачивания уже не работает, можна ли получить компоненту на почту?

  7. | #7

    @

    Aleko

    Отправил на почту

  8. valm0unt
    | #8

    Здравствуйте, Ссылка уже не работает, можно ли получить компоненту на почту?

  9. | #9

    Вот новая ссылка dll + демо конфа

  10. Serg
    | #10

    Gua
    :

    Вот новая ссылка dll + демо конфа

    как в вашей библиотеке можно установить скорость передаче данных? скорость по умолчанию не подходит.

  11. | #11

    @

    Serg

    Скорость устанавливается в настройках драйвера.

  12. Buxxter
    | #12

    Можно ли получить сырцы библиотеки для адаптации под конкретное устройство?

  13. | #13

    @

    Buxxter

    Думаю можно! если я их найду. + от вас небольшое денежное вознаграждение ;)

  14. Alexander
    | #14

    Добрый день.
    Хочеться «приспособить» библиотеку под свои весы.
    Можно и мне сырцов на мыло.
    За оплату договоримся

  15. Dimon
    | #15

    Очень хотелось бы поиметь исходники. Если не жаль конечно. Если можно на мыло kdv170@mail.ru

  16. | #16

    Обновил ссылки. Выложил исходники

  17. Андрей
    | #17

    А под 1С 8.2 можете привести пример использования Вашей dll?

  18. | #18

    Наверное доолжен работать пример (обработка) для 8.1 если пересохранить.

  19. Алексей
    | #19

    большое спасибо за пример
    но по рабочей ссылке rs232.dll странно работает — возвращает текст отправленной команды
    скачал другой вариант vk_rs232.dll (http://www.kb.mista.ru/article.php?id=77) и все отлично заработало (на AT выводит OK и так далее)

  1. No trackbacks yet.
Перед отправкой формы: