Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16

Тема: Подключение весов Тензо-М к ПЛК210

  1. #1

    По умолчанию Подключение весов Тензо-М к ПЛК210

    Добрый день! Столкнулись с проблемой при обмене данными между весовым терминалом ТВИ-024ВТ (Тензо-М) и ПЛК210 по интерфейсу RS-485 при использовании библиотеки TensoM_Communication для Codesys.
    При попытке считать данные с весов переменная ErrorType библиотеки принимает значение 5061 (Нет разделителя в начале посылки) вне зависимости от того, подключен ли терминал к контроллеру или нет.
    Если кому-то тоже приходилось работать с данными весами, подскажите, пожалуйста, на какие параметры помимо настроек обмена стоит обратить внимание при подключении Тензо-М к ПЛК210? Возможно, есть какие-то особенности протокола или типовые ошибки при таком подключении?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,994

    По умолчанию

    Цитата Сообщение от julkhud Посмотреть сообщение
    Добрый день! Столкнулись с проблемой при обмене данными между весовым терминалом ТВИ-024ВТ (Тензо-М) и ПЛК210 по интерфейсу RS-485 при использовании библиотеки TensoM_Communication для Codesys.
    При попытке считать данные с весов переменная ErrorType библиотеки принимает значение 5061 (Нет разделителя в начале посылки) вне зависимости от того, подключен ли терминал к контроллеру или нет.
    Если кому-то тоже приходилось работать с данными весами, подскажите, пожалуйста, на какие параметры помимо настроек обмена стоит обратить внимание при подключении Тензо-М к ПЛК210? Возможно, есть какие-то особенности протокола или типовые ошибки при таком подключении?
    Добрый день.
    Вы можете попробовать настроить обмен без использования TensoM_Communication, взяв за основу этот пример:
    https://ftp.owen.ru/CoDeSys3/21_Exam...projectarchive

    В настройках прибора стоит проверить, что включен именно протокол "Тензо-М", а не "6.43".

    По поводу TensoM_Communication, вероятно, сможет проконсультировать только техподдержка Тензо-М.

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    В настройках прибора стоит проверить, что включен именно протокол "Тензо-М", а не "6.43".
    Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
    Пока ждем ответа от техподдержки по этому поводу.
    Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,994

    По умолчанию

    Цитата Сообщение от julkhud Посмотреть сообщение
    Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
    Пока ждем ответа от техподдержки по этому поводу.
    Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?
    Я не сталкивался с ТВИ-024ВТ.
    У ТВ-003/05Д, которые попадались чаще всего, выбор протокола осуществлялся в меню прибора:

    04-08-2026 17-37-53.png

  5. #5

    По умолчанию

    Цитата Сообщение от julkhud Посмотреть сообщение
    Евгений, спасибо за совет! Попытались найти информацию по настройке прибора в документации, но не нашли в ней ничего связанного с выбором протокола(
    Пока ждем ответа от техподдержки по этому поводу.
    Подскажите, пожалуйста, видели ли вы руководство, где объяснялось, как переключать данные протоколы на ВТ?
    В ТВИ-24 нет "6.43", там только "Тензо-М". Из настроек навскидку нужно выставить адрес (16) и скорость (13). Все настройки нужно искать не в руководстве по эксплуатации, а в руководстве по юстировке. В интернете их не найти - с каждой головой эти руководства приходят в комплекте
    По поводу опроса: библиотекой не пользовался. Точнее, когда я всё своё писал - библиотеки ещё не было
    Безымянный.png
    Безымянный2.png
    Безымянный3.png
    Безымянный4.png
    Безымянный5.png

    Функции:
    Код:
    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(MassivFromTenso[i - 6])) + 100.0 * STRING_TO_REAL(OSCAT_BASIC.BYTE_TO_STRH(MassivFromTenso[i - 5])) + 10000.0 * STRING_TO_REAL(OSCAT_BASIC.BYTE_TO_STRH(MassivFromTenso[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;
    Последний раз редактировалось aaaSashaMGGU; 06.08.2026 в 13:06.

  6. #6

    По умолчанию

    Цитата Сообщение от aaaSashaMGGU Посмотреть сообщение
    В ТВИ-24 нет "6.43", там только "Тензо-М". Из настроек навскидку нужно выставить адрес (16) и скорость (13). Все настройки нужно искать не в руководстве по эксплуатации, а в руководстве по юстировке. В интернете их не найти - с каждой головой эти руководства приходят в комплекте
    Действительно, написали в техподдержку, они нам прислали руководство по юстировке для нашей модели весов. Всё настроили, обмен данными происходит
    Спасибо Вам и Евгению!
    Последний раз редактировалось julkhud; 06.08.2026 в 16:26.

  7. #7

    По умолчанию

    Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс RS-232, но для промышленных систем такой вариант не очень удобен. Подскажите, пожалуйста, пробовали ли Вы подключать их через интерфейс RS-485? Если да, то как именно была реализована схема и с какими трудностями возможно столкнулись?

  8. #8

    По умолчанию

    Цитата Сообщение от julkhud Посмотреть сообщение
    Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс RS-232, но для промышленных систем такой вариант не очень удобен. Подскажите, пожалуйста, пробовали ли Вы подключать их через интерфейс RS-485? Если да, то как именно была реализована схема и с какими трудностями возможно столкнулись?
    Можно глупый вопрос... А что такое БПА?

  9. #9

    По умолчанию

    Цитата Сообщение от julkhud Посмотреть сообщение
    Возник новый вопрос, связанный с подключением БПА к ПЛК. Согласно руководству эксплуатации они подключаются друг к другу через интерфейс 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 в 19:54.

  10. #10

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Можно глупый вопрос... А что такое БПА?
    БПА - это искробезопасный блок питания для головы ТВИ. Он же выполняет функцию преобразования RS-232 в RS-485
    Вот БПА + ТВИ:115062_bf4a9f7efee7963b9ac4cd6ea101bbe4.jpg
    Последний раз редактировалось aaaSashaMGGU; 07.08.2026 в 14:00.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Подключение МК210-301 к ПЛК210
    от ArtKar в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 03.02.2026, 09:43
  2. подключение весов МИ ВДА/7Я через rsr232
    от Andreich_vv в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 4
    Последнее сообщение: 01.09.2024, 13:41
  3. Подключение ПЛК210 к веб-серверу.
    от ishutin.vladimir@inbox.ru в разделе Сетевые технологии
    Ответов: 6
    Последнее сообщение: 16.03.2023, 15:06
  4. Подключение весов к ПЛК
    от nevii в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 01.09.2019, 18:40
  5. Подключение весов к ПЛК
    от arsm в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 07.05.2011, 18:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •