Получение веса с весов ВН-... (индикатор 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-

См. также

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

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

4600 руб.

27.06.2023    3796    3    0    

5

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

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

3600 руб.

02.09.2010    77766    73    257    

191

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

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    37120    115    128    

116

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

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

2400 руб.

25.06.2024    1301    3    4    

3

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

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

14.01.2025    2604    bayselonarrend    14    

48

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

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

04.12.2024    5353    kovalevdmv    26    

77

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

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    7775    starik-2005    40    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение