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. Ноябрь 29th, 2008 at 14:25 | #1

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

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

  2. gluar
    Февраль 23rd, 2009 at 15:53 | #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. Февраль 25th, 2009 at 09:29 | #3

    @

    gluar

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

  4. Turbo
    Октябрь 5th, 2009 at 19:24 | #4

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

  5. Октябрь 10th, 2009 at 10:40 | #5

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

  6. Aleko
    Октябрь 13th, 2009 at 12:01 | #6

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

  7. Октябрь 16th, 2009 at 15:33 | #7

    @

    Aleko

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

  8. valm0unt
    Декабрь 6th, 2009 at 19:03 | #8

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

  9. Декабрь 7th, 2009 at 10:39 | #9

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

  10. Serg
    Декабрь 28th, 2009 at 20:56 | #10

    Gua
    :

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

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

  11. Декабрь 31st, 2009 at 10:23 | #11

    @

    Serg

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

  12. Buxxter
    Февраль 27th, 2010 at 14:39 | #12

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

  13. Март 5th, 2010 at 09:43 | #13

    @

    Buxxter

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

  14. Alexander
    Апрель 15th, 2010 at 10:38 | #14

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

  15. Dimon
    Сентябрь 13th, 2010 at 17:19 | #15

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

  16. Сентябрь 14th, 2010 at 10:41 | #16

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

  17. Андрей
    Сентябрь 22nd, 2010 at 22:31 | #17

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

  18. Октябрь 30th, 2010 at 07:40 | #18

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

  19. Алексей
    Июнь 24th, 2011 at 08:11 | #19

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

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