Страница 1 из 1

Mettler Toledo Tiger 8442 Прогрузка весов через TransferEth.dll

Добавлено: 13 ноя 2025, 14:31
MikeSh
Добрый день.
Появилась задача прогружать MT Tiger через библиотеки.
Методом научного тыка дошёл до того, что появился код для powershell
Код: Выделить всё

Код: Выделить всё

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

public class ScaleTester {
    [DllImport(@"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\TransferEth.dll", EntryPoint = "_Transfer_Ethernet_EX@8", CallingConvention = CallingConvention.StdCall)]
    public static extern int Transfer_Ethernet_EX(string configFile, int key);

    [DllImport(@"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\TransferEth.dll", EntryPoint = "Transfer_Ethernet", CallingConvention = CallingConvention.StdCall)]
    public static extern int Transfer_Ethernet(string configFile);
}
"@
[ScaleTester]::Transfer_Ethernet_EX("Transscale.ini", 251245664)
При правильном формировании файлов Transscale.ini, SCALEADDRESS.INI и trf.out он вполне рабочий.
Получается удалять plu, записывать ингредиенты, название магазина и даже plu.
Проблема в следующем:
Согласно описанию, формат для загрузки однострочных весов CMDHEADER"L06C13C28C01L08U01U02S04L11S04F04S03S03S03" - и он работает (другой вопрос как, но сейчас это не важно)
А вот формат CMDHEADER"L06C13C30С30C01L08U01U02S04L11S04F04S03S03S03" - нет, ошибка длины строки.
Изыскания вывели на библиотеку ArcnetTxt_Bin.dll, которая преобразует строку в нужные байты, так вот внутри неё, если открыть просто блокнотом, можно найти L06C13C28C01L08U01U02S04L11S04F04S03S03S03, как раз для команды 00207, а вот L06C13C30С30C01L08U01U02S04L11S04F04S03S03S03 - внутри нет, и видимо именно из-за этого ничего и не работает.
Между тем, SPCT из этой же папки прекрасно грузит 2 строки, только формат trf.out при этом - бинарник (MTCN_RL00_BINFILE_V4.01).
Меня бы устроил и такой формат, если бы понимать, как его формировать. В документации использование PLUFmtConvert.dll не описано.

1) Может быть, кто-то решал проблему прогрузки 2-строчных весов каким-нибудь другим образом (имеется ввиду без использования SPCT, и вообще без участия пользователя)?
2) Может быть, есть какая-то документация по использованию PLUFmtConvert.dll?

Спасибо.

Прогрузка весов через TransferEth.dll

Добавлено: 13 ноя 2025, 15:19
MikeSh
Так, дело не в бабине было...
Мне дали папку с названием SPCT2, в котором лежали файлы SPCT1.
"Так там же всё одинаково, кроме экзешника", -говорили они...
Надеюсь, дальше всё получится, пусть пост останется, как маяк.

Mettler Toledo Tiger 8442 Прогрузка весов через TransferEth.dll

Добавлено: 13 ноя 2025, 17:45
Zipstore
Привет! В программировании не соображаю, но слышал от разработчиков, что для однострочных и двустрочных весов разные библиотеки используются, которые можно взять из соответствующей прогри для прогрузки SPCT1 или SPCT2. Если использовать неверную библиотеку, то сползает формат данных и цена записывается в соседний столбец данных.

Mettler Toledo Tiger 8442 Прогрузка весов через TransferEth.dll

Добавлено: 14 ноя 2025, 05:43
MikeSh
В общем, всё получилось. Почти.
1) Файл запуска библиотек. Сохранить в Trans.ps1, скомпилировать в exe (ps2exe с ключом -x86)

Код: Выделить всё

param(
    [int]$NotEx
)

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

public class MTLoader {
    [DllImport(@"TransferEth.dll", EntryPoint = "_Transfer_Ethernet_EX@8", CallingConvention = CallingConvention.StdCall)]
    public static extern int Transfer_Ethernet_EX(string configFile, int key);

    [DllImport(@"TransferEth.dll", EntryPoint = "Transfer_Ethernet", CallingConvention = CallingConvention.StdCall)]
    public static extern int Transfer_Ethernet(string configFile);
}
"@
If ($NotEx -eq 1) {
    [MTLoader]::Transfer_Ethernet("Transscale.ini")
}
Else
{
    [MTLoader]::Transfer_Ethernet_EX("Transscale.ini", 251245664)
}
2) Файл запуска файла запуска (как бы это ни звучало). Сохранить в LoadStarter.ps1, скомпилировать в exe.

Код: Выделить всё

param(
    [string]$exePath,
    [int]$TimeoutSeconds = 10,
    [int]$NotEx = 0
)

# Проверка существования EXE
if (-not (Test-Path -LiteralPath $exePath)) {
    Write-Error "EXE не найден: $exePath"
    exit 1
}

try {
    # Настройка процесса
    $psi = New-Object System.Diagnostics.ProcessStartInfo
    $psi.FileName = $exePath
    $psi.Arguments = $NotEx.ToString()
    $psi.UseShellExecute = $false      # Обязательно false для перехвата вывода
    $psi.RedirectStandardOutput = $true
    $psi.RedirectStandardError = $true
    $psi.CreateNoWindow = $true        # Не показывать окно консоли

    $process = [System.Diagnostics.Process]::Start($psi)

    # Ждём завершения с таймаутом
    $completed = $process.WaitForExit($TimeoutSeconds * 1000)

    if ($completed) {
        $output = $process.StandardOutput.ReadToEnd()
        $errorOut = $process.StandardError.ReadToEnd()
        if ($output) {
            Write-Host $output
        }
        ElseIf($errorOut) {
            Write-Host $errorOut
        }
    }
    Else {
        $process.Kill()  # Принудительно завершаем
        Write-Host "-1"
    }
}
Catch {
}
Второй файл нужен только для того, чтобы прибить процесс первого файла, если в нём ошибки и выскакивает гуй. Как сделать по другому - не знаю.

Положить в папку SPCT, рядом с набором библиотек и настроек.
Запускать

Код: Выделить всё

LoadStarter.exe Trans.exe %TimeOut% %NotEx%
Ожидать 800. Если не 800 - значит что-то пошло не так.

Параметр NotEx используется для некоторых методов, например, очистки плу, т.к. вызывается другой метод.

А "почти" - потому что данный формат не предполагает записи сообщений (ингредиентов) больше 999.
В данный момент это не критично, но хотелось бы научиться отправлять и такие сообщения (через SPCT грузится).
Вдруг кто знающий увидит пост и подскажет.
В документации :

Код: Выделить всё

Б) в бинарном формате
Загрузка PLU в весы осуществляется функцией
ireturn =Transfer_Ethernet_EX("Transscale.ini",251245664)
из предварительно сформированного при помощи PLUFmtConvert.dll файла &&trf!!.out.
и всё...

Mettler Toledo Tiger 8442 Прогрузка весов через TransferEth.dll

Добавлено: 14 ноя 2025, 14:38
Zipstore
Вот тут прописан формат передачи ингредиентов:
https://zipstore.ru/auxpage_cmd-tiger-p-tiger-pro-3/

И вот здесь на будущее может что-то полезное найдете:
https://zipstore.ru/auxpage_soft-firmwa ... er-toledo/