1с считать данные с com порта

Обновлено: 06.07.2024

Была поставлена задача, написать внешнюю компоненту для работы из 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 следующий код:

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

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

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

В обработке осылаю команду на устройство персонализации проксимити карточек и хочу получить номер карточки.
То, что устройство возвратило коды трех карточек, подтверждает 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?

gluar

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

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

Cуществует такая удобная штука, как соединение по COM порту c базой данных 1С. Сам COM порт очень старое соединение и используется в огромном количестве компьютеров. Не смотря на свой возраст COM порт до сих пор очень популярен и позволяет удобно передавать информацию между различными программами на разных машинах.

Часто в связи с проблемами подключения многие начинающие программисты 1С не могут нормально организовать подключение. На самом деле не совсем ясно в чем возникает проблема подключений 1С по COM порту. В целом настройка данной функции не доставляет никаких проблем и далее будет показано как нормально настроить COM соединение с 1С.


1С Документооборот нужно соединить по COM порту к информационной базе 1C УПП:

  • Ищем документ, который нам нужен, к примеру его имя будет 123
  • Получаем статус документа
  • В том случае если документ изменяется то, что нужно это изменить и указать в нашем документообороте

Выполним наше задание:

Создание подключения к базе 1C по COM

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


Данный программный код 1С поможет установить соединение по COM порту и у нас появится возможность работать с другой бд 1С.

Если мы используем программу с выделенным сервером нам придется использовать другой программный код, и он не будет немного иным, чем мы использовали для файлового режима:


Далее вам нужно выбрать именно подходящую версию 1С, к которой вы подключаетесь по COM порту.

Поиск нужного документа 1С с помощью COM соединения.

Для образца мы возьмем имя нашего документа 1234 и начнем его поиск с помощью процедуры.


С помощью нашего кода мы нашли по COM соединению искомый нами документ и узнали его статус. Если он не совпадает с нужным, то вносятся изменения.

Читайте также: