C++ (ATL) против METTLER-TOLEDO

07.11.09

Интеграция - Весы

Внешняя компонента для работы с периферией по RS-232. В моём случае это были весы!

Скачать исходный код

Наименование Файл Версия Размер
Внешняя компонента
.dll 287,00Kb
195
.dll 287,00Kb 195 Скачать
Обработка для подключения
.epf 14,46Kb
94
.epf 14,46Kb 94 Скачать

C++ (ATL) против METTLER-TOLEDO

 

Стараясь быть кратким, но понятным сообщу, что потребовалось как-то мне заставить работать весы знаменитой фирмы «Mettler-Toledo» с  1С Предприятием 8.1 … Вариантов особых не было интерфейс (RS-232) и работа с COM портом. На весах взвешивают партии слитков из драгметалла. Компьютер, который планировалось задействовать для этой цели, не имел физических COM портов, но ситуацию спас преобразователь интерфейса USB<->COM.  Кстати, стоимость 2500 руб. Не так уж и много…

Чтобы не переносить данные из одной программы в другую (Ну это я о способе реализации), было принято решение выгружать полученный вес прямёхонько в  1С. Для этого будем писать внешнюю компоненту, в которой и реализуем весь функционал работы с последовательным портом, обработку команд весов, а надо сказать, командная строка этих METTLER довольно многообразна и обратную связь с 1С!

В результате этой разработки появилась универсальная .dll, которая позволяет в принципе работать с любым устройством , у которого есть возможность подключиться на последовательный порт и что либо туда писать.  А также обработка для подключения внешней компоненты и управления настройками COM порта…

Я уже видел как некоторые товарищи использовали bat файлы чтобы имитировать устройство на линии. Что сказать?! Это их право Laughing. Зачем делать сложным то,  что проще простого? Для начала просто поставим перемычку на 2-3 контакты, так мы сможем читать то, что сами отправили в порт…  Для первичной отладки сойдет! А вообще я использовал модем, ну кто мне даст весы стоимостью 300 тыс. руб.? Модем на моём ноутбуке прекрасно заменил оконечное устройство! Команда «wat» неизменно возвращала отклик «ОК!»,  «wat it» возвращала ответ Toshiba Software XXX.XX, где крестики модель устройства и код прошивки. ATDP XXX-XX-XX (крестики номер телефона) заставляла модем резво набирать предложенный номер! Любые данные записанные мной в порт и не распознанные модемом как команда отсылались обратно эхом!

Теперь некоторые замечания о внутреннем устройстве компоненты, написанной с использованием технологии СОМ. За основу был взят мой собственный шаблон, вернее правленый мной до рабочего состояния с диска ИТС и выложенный на известном всем ресурсе www.nowa.cc , кстати по просьбе трудящихся совсем недавно он был обновлён.  Кроме основного потока, создается поток чтения и находится в режиме ожидания события поступления в порт данных от устройства, а так же при записи команды в порт, создается поток записи, но этот сразу завершается после операции записи. То есть вы уже наверняка поняли, что мы используем асинхронные операции  чтения и записи! Это позволяет сделать наше приложение очень быстрым и не загружать процессор бессмысленной работой…

Лишь некоторые замечания по реализации кода «Внешнего события». Я обещал быть краток Laughing! Думаю у новичков вызовет затруднение один вопрос. А именно как реализовать в своем коде вызов внешнего события?! (если всё сделано правильно, 1С обязательно вызовет свои обработчики, уж поверьте…) Так вот, при инициализации компоненты обязательно присвойте значению глобального указателя на  IAsynchEvent  объявленного со спецификатором

 

 // Это глобальный указатель для реализации событий в файле AddIn.cpp

static IAsyncEvent *pAsyncEvent = NULL;

значение параметра  m_iAsyncEvent функции QueryInterface,

m_iAsyncEvent = NULL;

    pConnection->QueryInterface(IID_IAsyncEvent,(void **)&m_iAsyncEvent);  

      pAsyncEvent = m_iAsyncEvent;

далее в этом же классе объявите public функцию в которой через глобальный указатель, которому вы только что присвоили значение вызовите метод ВнешнееСобытие. Примерно так

void CAddIn::Event(BSTR Sourse, BSTR Message, BSTR Data)

{

      pAsyncEvent->ExternalEvent(Sourse, Message, Data);

}

Дальше в своем классе (у меня в шаблоне он MyClass)  объявите указатель на класс где вы присваивали значение глобальному указателю и добавляли функцию с вызовом обработчика внешнего события.

CAddIn* pAddIn;

Обязательно указатель, не пытайтесь создать объект не получится! Так как класс абстрактный, т.е. не все чистые виртуальные функции переопределены и реализованы! Не забудьте добавить в заголовочный файл своего класса заголовок класса на который мы объявляем указатель. Ну всё теперь в своем классе вы можете вызывать функцию абстрактного класса, передав ей нужные параметры, которая в свою очередь вызовет обработчик внешнего события в 1С!

После того как порт открыт установятся таймауты с такими значениями если вам это не подходит выберите нужные на вкладке настройка!

      CommTimeouts.ReadIntervalTimeout = MAXDWORD;

      CommTimeouts.ReadTotalTimeoutMultiplier = 0;

      CommTimeouts.ReadTotalTimeoutConstant = 0;

      CommTimeouts.WriteTotalTimeoutMultiplier = 0;

      CommTimeouts.WriteTotalTimeoutConstant = 0;

Важно: Перед тем как закрыть 1С убедитесь, что закрыли порт!!! Или хотя бы обработку, в этом случае она сама попробует закрыть порт… В противном случае реализуйте механизм закрытия порта при завершении работы системы или соответствующую проверку!

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

P.S. Вот уже почти год как я занимаюсь разработкой и внедрением программного комплекса на базе 1С 8.1 Бухгалтерии, специфика учета оборота драгоценных металлов заставила реализовать невероятные схемы от которых по началу становилось просто муторно Innocent. Что-то удалось сразу и не требовало никаких доработок. Например, прием и обработка сырья. А вот бизнес процесс, который охватывает собой практически весь производственный цикл и сданный мной в работу ещё месяца три назад оказался слишком сложен для понимания операторов, не смогли освоить! И это явный промах Cry. К чему это я? Да просто всё… накопился ценный опыт работы в отрасли переработки драгметаллов, разумеется в сфере автоматизации документооборота и IT технологий! И я готов предложить его заинтересованным производственникам.

 

 

См. также

Обработка обслуживания весов с печатью этикеток ШТРИХ-М серии PC-200 для УТ 10.х

Весы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием Платные (руб)

Данная обработка позволяет настроить обмен с весами с печатью этикеток ШТРИХ-М серии PC-200 и 1С:Управление торговлей редакция 10. Может быть использована в 1С: Управление производственным предприятием 1.3 ,1С: Комплексная автоматизация 1.1, 1С: Розница 1.х. Универсальная обработка выгрузки номенклатуры для 1С:Розница редакция 2.3 использует типовой функционал "Правила обмена с подключаемым оборудованием offline" Обработка обслуживания весов с печатью этикеток ШТРИХ-М серии PC-200  для ДАЛИОН: Управление магазином 1.2.х Обработка выгрузки данных в весы с печатью этикеток ШТРИХ-М серии PC-200  для Штрих-М: Торговое предприятие 5.2.х Универсальная обработка выгрузки номенклатуры для 1С:Управление торговлей редакция 11 использует типовой функционал "Правила обмена с подключаемым оборудованием offline" Обработка обслуживания весов с печатью этикеток ШТРИХ-М серии PC-200  для ДАЛИОН: ТРЕНД, редакция 3.0

7800 руб.

04.12.2019    21111    71    35    

67

Драйвер для подключения электронных весов CAS и АТОЛ MARTA к 1Сv8.3

Весы Оптовая торговля Розничная торговля Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Драйвер электронных весов предназначен для подключения торговых весов фирмы CAS всех моделей, а также весов АТОЛ MARTA к различным конфигурациям 32-разрядной или 64-разрядной платформы 1С v.8.3. Драйвер разработан по стандарту "1С: Совместимо". Уникальность драйвера заключается в том, что он прост в подключении, надежен в работе и оптимален по цене.

2400 руб.

19.12.2017    67807    380    124    

137

Подключение старых весов ШТРИХ-ПРИНТ 4.5 к 1С: Розница 2.3+

Весы Платформа 1С v8.3 1С:Розница 2 Россия Бесплатно (free)

Подключение старых весов ШТРИХ-ПРИНТ 4.5 к 1С: Розница 2.3+ без внешних обработок и доработок.

17.04.2024    412    Archidemon    1    

3

Вариант интеграции с весами по com-порту через http-сервис

Весы Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Демонстрируется вариант интеграции 1С с весами по com-порту через реализацию отдельного http-сервиса.

1 стартмани

21.03.2024    489    2    gzharkoj    0    

5

Драйвер электронных весов Физтех Т11. Внешняя компонента Native API 1С (x86-64)

Весы Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Драйвер электронных весов Физтех Т11 (x86-64). Внешняя компонента Native API 1С. 1С Совместимо. Версия требований к разработке драйверов 3.9 Компонента предназначена для подключения к конфигурациям с БПО. Тестировалась на конфигурациях ERP, Управление нашей фирмой с БПО 3.2.2.25

3600 руб.

07.03.2024    506    0    0    

0

Работа с весами CAS через бесплатный драйвер

Весы Управляемые формы 1С:Розница 2 Розничная и сетевая торговля (FMCG) Абонемент ($m)

Расширение для работы с весами CAS (AD, AP, CS, ER, ER jr) через бесплатный драйвер.

1 стартмани

28.02.2024    538    12    vet25    0    

5

Выгрузка товаров в весы Масса-К (УНФ 3.0)

Весы Платформа 1С v8.3 1С:Розница 3.0 Россия Абонемент ($m)

Альтернативная выгрузка товаров в весы Масса-К для конфигураций Розница 3.0 и УНФ 3.0.

3 стартмани

05.02.2024    332    1    a_kudaev    1    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3122 07.11.09 01:03 Сейчас в теме
Понятно, что здорово, но здорово непонятно! ;-)
2. AndrewEv 18 07.11.09 08:30 Сейчас в теме
перИферия, а не перЕферия
Для поиска по сайту лучше использовать правильную орфографию.
3. artbear 1547 07.11.09 09:28 Сейчас в теме
За работу с ВК несомненный плюс.
4. Valet 56 07.11.09 10:13 Сейчас в теме
Вариантов особых не было интерфейс (RS-232) и работа с COM портом

А Атолловские драйвера для весов? Сейчас специально посмотрел, поддерживаются: Toledo 8217 и Toledo Tiger E.
Или это совсем редкая модель весов?
5. AmoreMe 150 07.11.09 11:25 Сейчас в теме
Для Tiger не нужны драйвера, бесплатно распространяется ПО которое работает с СОМ порторм напрямую (написано на C++ MFC), однако в нашем случае это не вариант был, хоть и пробовался :) . Не работает! Весы и правда редкие, специально для взвешивания слитков серебряно-золотого сплава! А потом если можем сами, почему этим не воспользоваться?! :)
6. angler225 125 10.11.09 18:01 Сейчас в теме
А где собственно сам шаблон, выложенный на известном всем ресурсе www.nowa.cc? Не могу найти, помогите , плиз!
7. AmoreMe 150 10.11.09 19:27 Сейчас в теме
Шаблон Депозит 8-) До конца ноября доступен для скачивания... (Ну вроде так на хосте заявлено!)
8. AmoreMe 150 10.11.09 19:32 Сейчас в теме
9. AmoreMe 150 10.11.09 19:35 Сейчас в теме
На "нове" что бы видеть закрытые разделы, а 1С именно такой!!! Обязательно нужно зарегистрироваться... :!:
10. angler225 125 11.11.09 11:10 Сейчас в теме
Спасибо за шаблон!
У нас в конторе(завод по производству мясных полуфабрикатов) весы фирмы Scanvaegt. Вернее программный комплекс, но софт весь закрытый, поэтому есть идея подключить весы непосредственно к 1С, вот тут то и возникает проблема с драйверами для весов.
11. angler225 125 11.11.09 11:12 Сейчас в теме
Спасибо за шаблон! У нас весы фирмы Scanvaegt. Нужно подключить их к 1С.
12. AmoreMe 150 11.11.09 12:20 Сейчас в теме
Пожалуйста!
В любом случае dll вам очень поможет, вы можете использовать её, а можете написать свою. Хоть ПО на ваши весы и "закрыто", документация то на них у вас есть!? Вы все равно с её помощью увидите что отправляют в порт весы. и если это не шифрованные данные, а в случае с Меттлер это просто строки, то и обрабатывайте их как вам удобно! Напомню ещё раз, что в шаблоне нет реализации класса для работы с портом, не написан обработчик внешнего события, хоть я и объяснил как это сделать! :) Удачи!
13. krosaf4eg 46 07.06.10 17:42 Сейчас в теме
к сожалению, в 7.7 компонента не захотела адекватно работать. Пришлось по Вашему примеру написать свою.

Выложил компоненту, примеры и исходный код сюда
14. konfed 08.06.10 10:24 Сейчас в теме
Спасибо за dll, но не могу посмотреть шаблон - на Депозит - какая-то регистрация, зарегистрировался, но файла все равно нет.
15. krosaf4eg 46 13.06.10 22:57 Сейчас в теме
2 konfed, вообще-то все качается нормально, если ты брал вторую ссылку (8й комментарий). Но на всякий случай - лови зеркало: mediafire
16. $erg 81 07.09.11 15:00 Сейчас в теме
Спасибо за обработку - работает. Конвертнул на 8.2 тоже сработало. Есть вопрос: если весы работают в режиме Continous - каким методом получать данные с порта?
17. OkeyYar 11.07.17 15:47 Сейчас в теме
А ссылку на депозите можно обновить?
Оставьте свое сообщение