Получение веса с весов ВН-... (индикатор IE-03) с помощью MSCOMM

18.02.14

Разработка - Разработка внешних компонент

Необходимо получать вес с весов типа ВН-... (индикатор IE-...), подключенных по COM-порту. На компьютерах, подключенных к весам, есть компонента MSCOMM от Visual Basic. Воспользуемся этой компонентой, получим данные с весов, найдём там вес и отобразим на форме.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ПолучениеВесаСВесов.epf
.epf 7,84Kb
34
34 Скачать (1 SM) Купить за 1 850 руб.

Предполагаю, что вы имеете уже зарегистрированную в системе Windows компоненту MSCOMM (описание компонента: http://msdn.microsoft.com/en-us/library/aa259393%28v=vs.60%29.aspx)

Также предполагаю, что вы соединили весы с ПК с помощью кабеля, схема распайки которого приведена в инструкции к весам.

По инструкции, прилагаемой к весам, настроим протокол обмена №1(простой протокол, при котором весы выдают вес постоянно, без запроса).

Скорость связи возьмём 9600.

В коде подключаем компоненту MSCOMM, выставляем скорость и параметры протокола обмена, размер буфера приема. Важным моментом является установка InputMode = 1 (comInputModeBinary), чтобы получить при приёме COMSafeArray, который просто выгружается в массив целых чисел 1С.

ComPort = Новый COMОбъект("MsCommLib.MsComm");
ComPort.CommPort        = 1;
ComPort.Settings        = "9600,N,8,1";
ComPort.Handshaking     = 0;
ComPort.InBufferCount   = 0;
ComPort.InBufferSize	= 70;
ComPort.InputLen        = 0;
ComPort.InputMode       = 1;
ComPort.NullDiscard     = 0;

Открываем порт, пытаемся получить 7-байтную посылку от весов, и закрываем порт.

ComPort.PortOpen = Истина;
ПодождатьПриемаСимволовСТаймаутом(ComPort, 7, 2);
ПринятаяПосылка = ComPort.Input;	// получаем COMSafeArray
ComPort.PortOpen = Ложь;

Осталось убедится в том, что принята вся посылка из семи байт, перекинуть её в массив 1С, и обработать, выделив вес из посылки.

Если ПринятаяПосылка.GetLength(0) >= 7 Тогда
	МассивПосылки = ПринятаяПосылка.Выгрузить();
	Если ПосылкаСВесовКорректна(МассивПосылки) И ЭтотВесСтабилен(МассивПосылки) Тогда
		Вес = ПолучитьЗначениеВесаИзПосылки(МассивПосылки);
	КонецЕсли;
	// отображение символьного представления посылки
	Буфер = "";
	Для Каждого Элемент Из МассивПосылки Цикл
		Буфер = Буфер + Символ(Элемент);
	КонецЦикла;
КонецЕсли;

Так как в 1С нет операций битовой арифметики, применим немного вычислений для выделения значений разрядов, знака веса, и других битовых параметров.

// Функция возвращающая числовое значение веса из 7-байтовой посылки
Функция ПолучитьЗначениеВесаИзПосылки(МассивПосылки)
	Вес = ПолучитьЧисловоеЗначениеПарыРазрядов(МассивПосылки[2]) * 10000
		+ ПолучитьЧисловоеЗначениеПарыРазрядов(МассивПосылки[3]) * 100
		+ ПолучитьЧисловоеЗначениеПарыРазрядов(МассивПосылки[4]);
	Вес = Вес * ПолучитьМножительДесятичнойТочки(МассивПосылки);
	Если ЭтотВесОтрицательный(МассивПосылки) Тогда
		Вес = - Вес;
	КонецЕсли;
	Возврат Вес;
КонецФункции // ПолучитьЗначениеВесаИзПосылки()

// Функция получает десятичное представление пары розрядов из двух тетрад байта
Функция ПолучитьЧисловоеЗначениеПарыРазрядов(Байт)
	СтаршаяТетрада = Цел(Байт / 16);
	МладшаяТетрада = Байт % 16;
	Если СтаршаяТетрада > 9 Тогда
		СтаршаяТетрада = 0;
	КонецЕсли;
	Если МладшаяТетрада > 9 Тогда
		МладшаяТетрада = 0;
	КонецЕсли;
	Возврат СтаршаяТетрада * 10 + МладшаяТетрада;
КонецФункции // ПолучитьЧисловоеЗначениеПарыРазрядов()

// Функция получает множитель по положению десятичной точки из байта признаков посылки
Функция ПолучитьМножительДесятичнойТочки(МассивПосылки)
	ПоложениеТочки = МассивПосылки[5] % 4;
	Делитель = 1;
	Пока ПоложениеТочки > 0 Цикл
		Делитель = Делитель * 10;
		ПоложениеТочки = ПоложениеТочки - 1;
	КонецЦикла;
	Возврат 1 / Делитель;
КонецФункции // ПолучитьЧисловоеЗначениеПарыРазрядов()

Как видите - ничего сложного. Удачных вам проектов.

получить вес весы ВН- IE-

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    54135    9    69    

46

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1177    3    4    

3

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    47407    124    66    

67

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3661    3    0    

5

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77574    72    257    

191

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28783    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    2279    bayselonarrend    14    

48

Разработка внешних компонент Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4928    kovalevdmv    26    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pomkka 07.09.15 12:44 Сейчас в теме
Добрый день, подскажите пожалуйста, как мне организовать задержку между открытием порта и отправкой сообщения? Как работает Ваша функция: ПодождатьПриемаСимволовСТаймаутом ? Можете написать ее код?
2. andr_andrey 10 21.09.15 09:26 Сейчас в теме
(1) pomkka, в учебных целях делал примитивно через ожидание
// Процедура приема заданного количества символов из COM-порта втечение указанного количества секунд таймаута
Процедура ПодождатьПриемаСимволовСТаймаутом(ComPort, КоличествоСимволов, Таймаут)
	
	ПорогТаймаута = ТекущаяДата() + Таймаут;
	
	Пока (ТекущаяДата() < ПорогТаймаута) И (ComPort.InBufferCount < КоличествоСимволов) Цикл
		// ждём ...
	КонецЦикла;
	
КонецПроцедуры // ПодождатьПриемаСимволов()
Показать

3. пользователь 25.09.18 11:32
Сообщение было скрыто модератором.
...
Оставьте свое сообщение