Инструменты пользователя

Инструменты сайта


подключить-как-dll-через-loadlibrary

Это старая версия документа!


Подключение драйвера как DLL

Общее описание

Настройте и проверьте связь с весами через программу «Программа настройки драйвера весов» (admin1CScales.exe). Если нет физического подключения к весам, то выберите тип весов «20:ЭМУЛЯТОР ВЕСОВ».

UniproScalesComServer.dll - экспортирует 4 функции (Calling convention = stdcall).

Название функции Параметры Описание
vr1 нет Загружает настройки с «settings.ini» - файл должен находиться в одной директории с UniproScalesComServer.dll. Нужно вызвать при запуске приложения.
Возвращает всегда 0.
gw1 5 параметров Получает вес/цену/стоимость с весов.
[in] int p_scales Номер весов, целое число (4 байта). Соответствует параметру «Номер весов в 1С»
[out] double p_weight Значение массы, дробное число (8 байт).
[out] double p_price Значение цены, дробное число (8 байт). Если весы не поддерживают = 0.
[out] double p_cost Значение стоимости, дробное число (8 байт). Если весы не поддерживают = 0.
[out] int p_stab Признак успокоения/стабильности веса, дробное число (4 байта).
0-не стабильно
1-стабильно
не все модели весов поддерживают.
pp1 2 параметра Передача цены на весы. Не все модели весов поддерживают.
[in] int p_scales Номер весов, целое число (4 байта). Соответствует параметру «Номер весов в 1С»
[in] int p_price Цена в копейках, целое число (4 байта).
pt1 1 параметр Нажатие на весах кнопки «ТАРА». Не все модели весов поддерживают.
[in] int p_scales Номер весов, целое число (4 байта). Соответствует параметру «Номер весов в 1С»

Все функции возвращают значение типа int (целое 4 байта), варианты:

Значение Описание
0 Все ОК
1 Не возможно установить соединение с весами.
Если СОМ-порт: Убедитесь в правильности имени СОМ порта, возможно, он занят другим приложением.
Если Ethernet:
1. Проверьте правильность указания IP-адреса и TCP-порта.
2. Ethernet-переходник весов должен работать в режиме: TCP-Server.
3. Возможно, блокирует соединение Брандмауэр(Firewall).
2 Ошибка в работе драйвера СОМ-порта.
3 Нет ответа от весов. Возможно:
1. Проверьте правильность выбора типа весов, СОМ-порта и скорость СОМ-порта.
2. Некоторые весы не передают вес, если он меньше ли равен НУЛЮ.
3. На некоторых весах нужно настроить специальные параметры, чтоб узнать как настроить нажмите кнопку «Что нужно настроить в весах»в программе настройки драйвера.
4 Ошибка в цене, например число меньше нуля, или больше чем к-во разрядов на весах.
5 Текущий тип весов не поддерживает команды, например, не на все типы моделей можно передать цену, или нажать «ТАРА».
6 Связь с весами ОК, но отсутствует лицензия на драйвер. Без лицензии можно получить вес в диапазонах: [80..110 г.] [2..3 кг.] [19..22 кг.] [95..105 кг.]
7 На весах «Перегруз». (Некоторые модели весов передают такую информацию)
8 Нет весов в settings.ini с указанным номером p_scales. Возникает если нет файла «settings.ini» или в нем нет такого номера весов.

Порядок вызовов функций: после загрузки UniproScalesComServer.dll в программу нужно вызвать функцию: vr1, после этого можно вызывать все другие функции (gw1, pp1, pt1) в любом порядке.

Пример на c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
 
namespace scales_dll_csharp
{
    class Program
    {
        // Load parameters from INI-file
        [DllImport("UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int vr1();
 
        // get weight from scales
        [DllImport("UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int gw1(int p_scales, 
                                    ref double p_weight, 
                                    ref double p_price, 
                                    ref double p_cost, 
                                    ref int p_stab );
        // send price
        [DllImport("UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int pp1(int p_scales, int p_price);
 
        // press "T"
        [DllImport("UniproScalesComServer.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int pt1(int p_scales);
 
        static void Main(string[] args)
        {
            double  lv_weight = 0;
            double  lv_price = 0;
            double  lv_cost = 0;
            int     lv_stab = 0;
            int     lv_res = 0;
 
            // Load parameters from INI-file
            vr1();
 
            // send price
            lv_res = pp1(1, 12345);
 
            // get weight from scales number 1
            lv_res = gw1( 1, ref lv_weight, ref lv_price, ref lv_cost, ref lv_stab);
 
            if (lv_res == 0)
            {
                Console.WriteLine("res={0:D} weight={1:F}; price={2:F}; cost={3:F}; stab={4:D}",
                    lv_res,
                    lv_weight,
                    lv_price,
                    lv_cost,
                    lv_stab);
            }
            else
            {
                Console.WriteLine("Error={0:D}", lv_res);
            }
 
            // press T
            lv_res = pt1(1);
 
            Console.ReadLine();
        }
    }
}
подключить-как-dll-через-loadlibrary.1586972320.txt.gz · Последние изменения: 2020/04/15 20:38 — iserbin