Просмотр полной версии : Подключение весов Тензо-М к ПЛК210
Добрый день! Столкнулись с проблемой при обмене данными между весовым терминалом ТВИ-024ВТ (Тензо-М) и ПЛК210 по интерфейсу RS-485 при использовании библиотеки TensoM_Communication для Codesys.
При попытке считать данные с весов переменная ErrorType библиотеки принимает значение 5061 (Нет разделителя в начале посылки) вне зависимости от того, подключен ли терминал к контроллеру или нет.
Если кому-то тоже приходилось работать с данными весами, подскажите, пожалуйста, на какие параметры помимо настроек обмена стоит обратить внимание при подключении Тензо-М к ПЛК210? Возможно, есть какие-то особенности протокола или типовые ошибки при таком подключении?
Евгений Кислов
03.08.2026, 13:09
Добрый день! Столкнулись с проблемой при обмене данными между весовым терминалом ТВИ-024ВТ (Тензо-М) и ПЛК210 по интерфейсу RS-485 при использовании библиотеки TensoM_Communication для Codesys.
При попытке считать данные с весов переменная ErrorType библиотеки принимает значение 5061 (Нет разделителя в начале посылки) вне зависимости от того, подключен ли терминал к контроллеру или нет.
Если кому-то тоже приходилось работать с данными весами, подскажите, пожалуйста, на какие параметры помимо настроек обмена стоит обратить внимание при подключении Тензо-М к ПЛК210? Возможно, есть какие-то особенности протокола или типовые ошибки при таком подключении?
Добрый день.
Вы можете попробовать настроить обмен без использования TensoM_Communication, взяв за основу этот пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Tenzo_M_3517v2.projectarchive
В настройках прибора стоит проверить, что включен именно протокол "Тензо-М", а не "6.43".
По поводу TensoM_Communication, вероятно, сможет проконсультировать только техподдержка Тензо-М.
В настройках прибора стоит проверить, что включен именно протокол "Тензо-М", а не "6.43".
Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
Пока ждем ответа от техподдержки по этому поводу.
Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?
Евгений Кислов
04.08.2026, 17:39
Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
Пока ждем ответа от техподдержки по этому поводу.
Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?
Я не сталкивался с ТВИ-024ВТ.
У ТВ-003/05Д, которые попадались чаще всего, выбор протокола осуществлялся в меню прибора:
89960
aaaSashaMGGU
06.08.2026, 12:59
Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
Пока ждем ответа от техподдержки по этому поводу.
Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?
В ТВИ-24 нет "6.43", там только "Тензо-М". Из настроек навскидку нужно выставить адрес (16) и скорость (13). Все настройки нужно искать не в руководстве по эксплуатации, а в руководстве по юстировке. В интернете их не найти - с каждой головой эти руководства приходят в комплекте
По поводу опроса: библиотекой не пользовался. Точнее, когда я всё своё писал - библиотеки ещё не было
89983
89984
89985
89986
89987
Функции:
FUNCTION GetVesFromTensoM: REAL //Получение веса из массива байтов, прочитанного с COM-порта
//Входные параметры
VAR_INPUT
MassivIn : POINTER TO BYTE; //Указатель на нулевой элемент массива буфера ответа
MassivInKolVo : UINT; //Количество значимых байтов в буфере ответа
END_VAR
//Внутренние параметры
VAR
//Буфер ответа - 100 байтов
MassivFromTenso: ARRAY[0..99] OF BYTE := [100(16#00)];
//Длина буфера ответа
MassivFromTenso_KolVo: UINT := 0;
//Переменная цикла
i: UINT;
//Контрольная сумма
CRC: BYTE := 16#00;
//ВрЕменные указатели
MassivInTemp1: POINTER TO BYTE; //i-й элемент
MassivInTemp2: POINTER TO BYTE; //(i - 1)-й элемент
END_VAR
//Выход функции
GetVesFromTensoM := -999999.0;
//Проверим, что хоть что-то есть
IF (MassivInKolVo >= 10) THEN
//Копируем весь массив к себе
FOR i := 0 TO (MassivInKolVo - 1) DO
//При копировании сразу выкидываем все 0xFE
//Чтобы выкинуть 0xFE - предыдущий байт должен обязательно равен 0xFF
IF (i = 0) THEN
//Указатель
MassivInTemp1 := MassivIn + i; //i-й элемент //В данном случае - нулевой
//Присваиваем
MassivFromTenso[MassivFromTenso_KolVo] := MassivInTemp1^;
MassivFromTenso_KolVo := MassivFromTenso_KolVo + 1;
ELSE
//Указатели
MassivInTemp1 := MassivIn + i; //i-й элемент
MassivInTemp2 := MassivIn + i - 1; //(i - 1)-й элемент
//Проверяем, что текущий байт 16#FE, а предыдущий 16#FF. Если это всё не так - то копируем текущий байт
IF NOT (MassivInTemp1^ = 16#FE AND MassivInTemp2^ = 16#FF) THEN
MassivFromTenso[MassivFromTenso_KolVo] := MassivInTemp1^;
MassivFromTenso_KolVo := MassivFromTenso_KolVo + 1;
END_IF
END_IF
END_FOR
//Идём по массиву, прочитанному с Com-Порта, назад
FOR i := (MassivFromTenso_KolVo - 1) TO 9 BY (-1) DO
//Проверка, что пакет имеет структуру "FF XX C3/C2 XX XX XX XX XX FF FF" 'C3 - Брутто, C2 - Нетто
IF MassivFromTenso[i - 9] = 16#FF AND (MassivFromTenso[i - 7] = 16#C3 OR MassivFromTenso[i - 7] = 16#C2) AND MassivFromTenso[i - 1] = 16#FF AND MassivFromTenso[i] = 16#FF THEN
//Контрольная сумма и её проверка
CRC := GetCRC(7, MassivFromTenso[i - 8], MassivFromTenso[i - 7], MassivFromTenso[i - 6], MassivFromTenso[i - 5], MassivFromTenso[i - 4], MassivFromTenso[i - 3], MassivFromTenso[i - 2], 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00, 16#00);
//Если всё ОК, то вычисляем итоговый вес и выходим из цикла
IF CRC = 16#00 THEN
//Значение
GetVesFromTensoM := 1.0 * STRING_TO_REAL(OSCAT_BASIC.BYTE_TO_STRH(MassivFrom Tenso[i - 6])) + 100.0 * STRING_TO_REAL(OSCAT_BASIC.BYTE_TO_STRH(MassivFrom Tenso[i - 5])) + 10000.0 * STRING_TO_REAL(OSCAT_BASIC.BYTE_TO_STRH(MassivFrom Tenso[i - 4]));
//Позиция запятой в байте CON: 0й бит
IF MassivFromTenso[i - 3].00 THEN
GetVesFromTensoM := GetVesFromTensoM / 10.0;
END_IF
//Позиция запятой в байте CON: 1й бит
IF MassivFromTenso[i - 3].01 THEN
GetVesFromTensoM := GetVesFromTensoM / 100.0;
END_IF
//Позиция запятой в байте CON: 2й бит
IF MassivFromTenso[i - 3].02 THEN
GetVesFromTensoM := GetVesFromTensoM / 1000.0;
END_IF
//Знак минус в байте CON: 7й бит
IF MassivFromTenso[i - 3].07 THEN
GetVesFromTensoM := GetVesFromTensoM * (-1.0);
END_IF
//Выход из цикла
EXIT;
END_IF
END_IF
END_FOR
END_IF
FUNCTION GetCRC: BYTE //Расчёт контрольной суммы Тензо-М
VAR_INPUT
KolVo : BYTE; //Количество байтов для проверки
Byte00 : BYTE; //Байт №00
Byte01 : BYTE; //Байт №01
Byte02 : BYTE; //Байт №02
Byte03 : BYTE; //Байт №03
Byte04 : BYTE; //Байт №04
Byte05 : BYTE; //Байт №05
Byte06 : BYTE; //Байт №06
Byte07 : BYTE; //Байт №07
Byte08 : BYTE; //Байт №08
Byte09 : BYTE; //Байт №09
Byte10 : BYTE; //Байт №10
Byte11 : BYTE; //Байт №11
Byte12 : BYTE; //Байт №12
Byte13 : BYTE; //Байт №13
Byte14 : BYTE; //Байт №14
Byte15 : BYTE; //Байт №15
Byte16 : BYTE; //Байт №16
Byte17 : BYTE; //Байт №17
Byte18 : BYTE; //Байт №18
Byte19 : BYTE; //Байт №19
END_VAR
//Внутренние параметры
VAR
//Входной массив
MassivIn: ARRAY[0..19] OF BYTE := [20(16#00)];
//Переменные цикла
i, j: INT;
//i-й байт
Data: BYTE := 16#00;
//Выход функции
GetCRC_Result: BYTE := 16#00;
END_VAR
//Константы
VAR CONSTANT
//Примитивный неприводимый порождающий полином в 8-й степени P(X)-101101001b (младшая часть 69h)
Polynom: BYTE := 16#69; //105
END_VAR
//Входной массив
MassivIn[00] := Byte00;
MassivIn[01] := Byte01;
MassivIn[02] := Byte02;
MassivIn[03] := Byte03;
MassivIn[04] := Byte04;
MassivIn[05] := Byte05;
MassivIn[06] := Byte06;
MassivIn[07] := Byte07;
MassivIn[08] := Byte08;
MassivIn[09] := Byte09;
MassivIn[10] := Byte10;
MassivIn[11] := Byte11;
MassivIn[12] := Byte12;
MassivIn[13] := Byte13;
MassivIn[14] := Byte14;
MassivIn[15] := Byte15;
MassivIn[16] := Byte16;
MassivIn[17] := Byte17;
MassivIn[18] := Byte18;
MassivIn[19] := Byte19;
//Обход входного массива
FOR i := 0 TO (KolVo - 1) DO
//Берём i-й байт
Data := MassivIn[i];
//8 раз сдвигаем наш байт и XOR-им его. Спасибо https://www.linux.org.ru/forum/development/16306501
FOR j := 0 TO 7 DO
//Проверяем самый левый бит
IF GetCRC_Result.07 THEN
//Сдвигаем один бит влево
GetCRC_Result := GetCRC_Result * 2; //GetCRC_Result = (GetCRC_Result << 1)
//Проверяем самый левый бит. Если он есть - делаем "+1" к CRC
IF Data.07 THEN
GetCRC_Result := GetCRC_Result + 1;
END_IF
//XOR-им
GetCRC_Result := GetCRC_Result XOR Polynom;
ELSE
//Сдвигаем один бит влево
GetCRC_Result := GetCRC_Result * 2; //GetCRC_Result = (GetCRC_Result << 1)
//Проверяем самый левый бит. Если он есть - делаем "+1" к CRC
IF Data.07 THEN
GetCRC_Result := GetCRC_Result + 1;
END_IF
END_IF
//Сдвигаем один бит влево
Data := Data * 2; //Data = (Data << 1)
END_FOR
END_FOR
//Выход функции
GetCRC := GetCRC_Result;
В ТВИ-24 нет "6.43", там только "Тензо-М". Из настроек навскидку нужно выставить адрес (16) и скорость (13). Все настройки нужно искать не в руководстве по эксплуатации, а в руководстве по юстировке. В интернете их не найти - с каждой головой эти руководства приходят в комплекте
Действительно, написали в техподдержку, они нам прислали руководство по юстировке для нашей модели весов. Всё настроили, обмен данными происходит :)
Спасибо Вам и Евгению!
Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс RS-232, но для промышленных систем такой вариант не очень удобен. Подскажите, пожалуйста, пробовали ли Вы подключать их через интерфейс RS-485? Если да, то как именно была реализована схема и с какими трудностями возможно столкнулись?
МихаилГл
07.08.2026, 13:25
Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс RS-232, но для промышленных систем такой вариант не очень удобен. Подскажите, пожалуйста, пробовали ли Вы подключать их через интерфейс RS-485? Если да, то как именно была реализована схема и с какими трудностями возможно столкнулись?
Можно глупый вопрос... А что такое БПА?
aaaSashaMGGU
07.08.2026, 13:53
Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс RS-232, но для промышленных систем такой вариант не очень удобен. Подскажите, пожалуйста, пробовали ли Вы подключать их через интерфейс RS-485? Если да, то как именно была реализована схема и с какими трудностями возможно столкнулись?
Там схема крайне странная, но это работает
К БПА мы цепляемся по RS-232. А после БПА - идёт RS-485, который проходит по нескольких головам
Единственное что - там есть объективное ограничение по количеству ТВИ, т.к., там, в 4-жильном кабеле, идёт ещё и питание самого блока RS-485 на ТВИ
И да - если распитать БП, то "отвалятся" все ТВИ. Логичнее было бы купить отдельный БП для этого
Мы поставили 4-канальную MOXA - и подключили к ней 4 разных БПА. К каждому БПА по 5-6 ТВИшек
Есть вариант №2. Он тоже работает. Можно напрямую подоткнуться к ветке RS-485 минуя RS-232
Но питание для RS-485 от "главного" БПА на все ТВИ кинуть всё равно придётся. В случае, если ТВИ стоят не во взрывоопасном цеху - так, очевидно, сделать можно
Во взрывоопасном цеху так делать, очевидно, нельзя
Скорее всего, можно запитывать каждый RS-485 каждого ТВИ своим БПА, а опрашивать главным БПА - но так мы не проверяли, т.к., пришлось бы кинуть кучу дополнительных кабелей
aaaSashaMGGU
07.08.2026, 13:57
Можно глупый вопрос... А что такое БПА?
БПА - это искробезопасный блок питания для головы ТВИ. Он же выполняет функцию преобразования RS-232 в RS-485
Вот БПА + ТВИ:89992
Сергей0308
08.08.2026, 21:23
БПА - это искробезопасный блок питания для головы ТВИ. Он же выполняет функцию преобразования RS-232 в RS-485
Вот БПА + ТВИ:89992
Блок питания вверху или внизу, в смысле, оба прибора с экраном, сразу понятно что блок питания, а какой из них непонятно?
И правильно что сокращаете названия по самый "не балуйся", а то могут понять!
МихаилГл
09.08.2026, 07:34
Блок питания вверху или внизу, в смысле, оба прибора с экраном, сразу понятно что блок питания, а какой из них непонятно?
И правильно что сокращаете названия по самый "не балуйся", а то могут понять!
Я не стал дальше, как говорят "душнить", но похоже об этом БПА написано только в РЭ. На сайте никакой вменяемой информации.
Расскажу случай из своей практики.
Приходит киповец и говорит, надо ДС72 поменять. А я буквально месяц как устроился. Спрашиваю, что это? А он: ну как же, это же датчик скорости на весах ленточного конвейера на 72 импульса. А я ему: да любвх датчиков тысячи, все разного типа, у многих одинаковые названия, но они для разных целей. Можно же было сразу сказать что датчик скорости на весах. Но люди любят сокращать всё подряд.
Вот есть КНС, в одном случае круто наклонный сепаратор, в другом канализационно насосная станция. Один для угля, другая для го.на.
И где вы там на верхнем экран то увидели?, там большая оранжевая наклейка на всю сторону...
Сергей0308
10.08.2026, 20:20
И где вы там на верхнем экран то увидели?, там большая оранжевая наклейка на всю сторону...
Сетевой провод с вилкой к наклейке подходит?
Да, и на "экране" тут же подписано "Сеть 220В 50Гц" :)
Доброго времени, коллеги! Может кто-нибудь выручить руководством по юстировке на ТВИ-024 в личку?
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot