1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

обмен ModBus через CM PtP 400-го контроллера

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
dmitryRA
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 17 окт 2022, 12:22
Имя: Дмитрий
Страна: Россия
город/регион: Пермский край

обмен ModBus через CM PtP 400-го контроллера

Сообщение dmitryRA »

CM PtP (6ES7 137-6AA00-0BA0) нормально программируется в TIA-portal, но есть необходимость интегрировать его в Step7, что вызывает проблемы. Библиотек нет (бесплатных, да и с платными не все понятно в связи с санкциями). Описания модуля тоже найти не удалось (в плане описания нижнего уровня, чтобы напрямую общаться с модулем: настройка порта, передача данных и т.д.). Если кто работал по этой теме, буду признателен. Могу предложить рабочий вариант расчета CRC (побитовый сдвиг), написанный в STL
[+]
FUNCTION FC 2 : VOID
TITLE =расчет CRC побитовым сдвигом
//полином и стартовое значение CRC задается через входа, если нет разрешения
//расчета CRC обнуляется, что должно восприниматься внешними алгоритмами как
//ошибка
VERSION : 0.1


VAR_INPUT
EN : BOOL ; //включить расчет
DB_num : INT ; //номер DB c данными
Offset_byte : INT ; //начальное смешение 0-байта данных в DB
Byte_amount : INT ; //количество байт данных
Polinom : WORD ; //полином
CRC_begin : WORD ; //начальное значение CRC (напр. W#16#FFFF)
END_VAR
VAR_OUTPUT
OK : BOOL ; //расчет окончен
CRC : WORD ; //значение CRC
END_VAR
VAR_TEMP
numbyte : DINT ; //указатель номера байта в DB
num_db : INT ; //номер DB с данными для расчета
num_bit : INT ; //счетчик бит, номер бита цикличный
num_byte : INT ; //номер байта (не указатель!) цикличный
count : INT ; //счетчик байт цикличный
t_crc : WORD ; //временный CRC
END_VAR
BEGIN
NETWORK
TITLE =расчет

//разрешение
AN #EN;
JC end;
//инициализация
L #CRC_begin;
T #t_crc;
L 1;
T #count;
L #Offset_byte;
T #num_byte;
L #DB_num;
T #num_db;
OPN DB [#num_db]; //открываем DB с данными
//расчет
c_by: L #num_byte; //цикл по количеству байт данных
SLD 3; //сдвигаем номер байта влево на 3 бита
T #numbyte; //и получаем указатель на байт в открытом DB

L DBB [#numbyte];
L #t_crc;
XOW ;
T #t_crc;

L 0;
T #num_bit;

c_bt: L #t_crc; //цикл на 8 бит в каждом байте
SRW 1;
T #t_crc;
A <=0;
JC nxt1;
L #t_crc;
L #Polinom;
XOW ;
T #t_crc;

nxt1: L #num_bit;
L 7;
==I ;
A <=0;
JC nxt2;
L #num_bit;
+ 1;
T #num_bit;
JU c_bt; //битовый цикл

nxt2: L #count;
L #Byte_amount;
==I ;
A <=0;
JC out;
L #num_byte;
+ 1;
T #num_byte;
L #count;
+ 1;
T #count;
JU c_by; //байтовый цикл

out: L #t_crc;
T #CRC;
SET ;
= #OK;
BE ;

end: L 0;
T #CRC;
CLR ;
= #OK;

END_FUNCTION
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17481
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1281 раз

обмен ModBus через CM PtP 400-го контроллера

Сообщение Jackson »

dmitryRA писал(а): 17 окт 2022, 12:51 Если кто работал по этой теме, буду признателен.
Так Вы вопрос задайте. :)

И рекомендации:
1. Для исходников лучше использовать тэг "код" (CODE) - кнопка тут есть. Иначе часть символов может потеряться
2. Большие объём текста (кода) убирать под спойлер.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
dmitryRA
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 17 окт 2022, 12:22
Имя: Дмитрий
Страна: Россия
город/регион: Пермский край

обмен ModBus через CM PtP 400-го контроллера

Сообщение dmitryRA »

Вопрос: необходимо описание модуля CM PtP (6ES7 137-6AA00-0BA0) для самостоятельной организации обмена с S7300/400 или существующие наработки (если есть возможность поделиться).
По поводу кода и спойлера понял, далее буду следовать рекомендациям.

Andreywys
освоился
освоился
Сообщения: 286
Зарегистрирован: 15 сен 2016, 18:47
Имя: Андрей
Страна: Россия
город/регион: Вологда
Благодарил (а): 18 раз
Поблагодарили: 73 раза

обмен ModBus через CM PtP 400-го контроллера

Сообщение Andreywys »

Здесь посмотрите viewtopic.php?p=71835#p71835 Там в проекте работа через rs-232, но это не важно.
Ответить

Вернуться в «Simatic Step7»