Обучаем новичка программированию ПЛК (kobrik)

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

Превышена общая квота вложений. У меня тоже это сообщение выскакивало. Сейчас я увеличил квоту. Все должно работать.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Спасибо большое Михайло. Так вот я создал соединение через универсальный Модбас ОРС сервер Инсат по протоколу Модбас ТСР. Вроде все работает. Чтоб передать флаг из контроллера ОВЕН в инструкции надо создать тип данных 1 байт (8 бит) где возможно использовать каждый бит. А аналоговое значение передается через типданных в WORD.
Безымянный22.JPG
В Модбас ОРС сервере Инсат все сделал по инструкции. Вот скриншоты конфигурации, все читается и записывается.
Безымянный1.JPG
Безымянный2.JPG
Я уверен здесь имеются люди которые знают модбас, регистры я уже определил через универсальный Модбас ОРС сервер Инсат, остается просто все правильно прописать в Сименсе, с чем я так и не справился :( :( :( .
Безымянный.JPG
И еще как проверить и протестировать, что соединение работает? Спасибо всем заранее, буду очень признателен за любую информацию.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Автоматизатор »

Адрес и количество данных попутал.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

REQ=true - ОК

DISCONNECT=false - ОК

CONNECT_ID=1 - ОК

IP_OCTET - будем считать, что IP-адрес Овна действительно 10.2.11.203, ОК

IP_PORT=502 - ОК

MB_MODE=0 - ОК, читаем данные

MB_DATA_ADDR=1 - здесь важно правильно задать нужный адрес, от этого адреса зависит, что ты считываешь - входные/выходные биты или регистры. В данном случае считываются выходные биты. MB_DATA_ADDR=10001 - чтение входных битов, MB_DATA_ADDR=30001 - чтение входных регистров, MB_DATA_ADDR=40001 - чтение выходных регистров.

MB_DATA_LEN=2000 - две тысячи 16-битных слов - это круто :) Такое значение допустимо для Modbus, но тогда сервер также должен выдавать 2000 слов.

MB_DATA_PTR=DB1.DBB12 - неправильно, ты сейчас подставил сюда DB1.DBB12, текущее значение этого байта равно нулю, т.е. ты указал нулевой адрес для записи. Правильно здесь нужно задать адрес с помощью указателя (pointer) P# на первый бит памяти: P#DB1.DBX12.0 WORD 2. Тот же самый результат даст запись P#DB1.DBX12.0 BYTE 4. Сименс ограничивает запись в свою память указанием длины WORD 2 = BYTE 4. В данном случае два слова (четыре байта). Просто запомнить эту нотацию и понять, как ее строить для своего случая. Можно указывать другие области памяти, например: P#M1000.0 WORD 100. Судя по примерам Сименса, ограничение может быть задано больше, чем MB_DATA_LEN, не обязательно равные значения.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Автоматизатор »

Михайло писал(а):MB_DATA_LEN=2000
Михайло писал(а):MB_DATA_ADDR=10001 - чтение входных битов, MB_DATA_ADDR=30001 - чтение входных регистров, MB_DATA_ADDR=40001 - чтение выходных регистров.
По моему уже было, но еще раз: адреса у Сименса десятичные и начинаются с 1, а у большинства устройств с 0. Мораль: к адресу надо добавить спереди указатель на тип данных, а к адресу добавить 1.

Так, если надо считать данные выходных регистров, начиная с адреса 20hex, то MB_DATA_ADDR=40033
(20hex -> 32dec; добавляем 1 -> 33dec; добавляем 4 -> 40033dec)

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

Автоматизатор писал(а):добавляем 4 -> 40033dec
Не понял. Что добавляем?

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Автоматизатор »

Михайло писал(а):Не понял. Что добавляем?
адрес в инверторе 20hex
адрес в программе Сименса 40033dec

получается переводом числа из шестнадцатеричной системы в десятичную и добавлением грубо числа 40001
Карта адресов.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

В принципе у Сименса четко написано, что адреса начинаются с 1, 10001, 30001 и 40001. У всех производителей по-разному, стандарт Modbus не устанавливает четко все нюансы. Из-за неточно заданных адресов ошибки соединения быть не должно. Будут только глюки, поначалу непонятные получаемые данные. :)

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а):IP_OCTET - будем считать, что IP-адрес Овна действительно 10.2.11.203, ОК
Через ПЛК браузер изменил IP-адрес Овна:

PLCInfo
PLC model MODEL PLC 110-30
Binary VERSION 0.2.49
Need Target version >= 3.04
Compiled: 08:25:33 Apr 23 2014
MAC 6A:77:00:23:00:E9
IP 192.168.0.3
GATE 192.168.0.1
MASK 255.255.255.0

Скришот был старым: 192.168.0.3.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

Какой адрес у S7-1200?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а):Какой адрес у S7-1200?
192.168.0.1

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

Какой сейчас статус у функции MB_CLIENT?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а):Какой сейчас статус у функции MB_CLIENT?
Статус: 16#0000, проверял. Все еще мне неясно как работать с поинтерами для указания ячейки в памяти...

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

Статус=0 означает, что данные принимаются. Разве не так?

Просто пишешь "хочу чтобы писал в память, начиная с ячейки такой-то длины такой-то". То есть пишешь:
P#начальная_ячейка WORD количество_слов_максимум.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а):Статус=0 означает, что данные принимаются. Разве не так?
В том то и дело что обмен идет, простно нужно правильно сослаться на регистр в ОВЕН и правильно указать ячейку контроллера.
Михайло писал(а):Просто пишешь "хочу чтобы писал в память, начиная с ячейки такой-то длины такой-то". То есть пишешь:
P#начальная_ячейка WORD количество_слов_максимум.
Я пишу, но у меня выдает ошибку и не компилируется, а сам адрес остается красным, указывая на неправильный синтаксис. :( Пропишите пожалуйста, может я что-то не правильно указываю. Проект прикреплен к сообщению. Не хочу у вас отнимать много времени, просто исправьте плииз адреса, а дальше я сам :)
Сжатая ZIP-папка.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

1) Я ввел "P#DB1.DBX18.0 WORD 2" и работает. Обрати внимание на два пробела вокруг "WORD".

2) Структура Modbus_Data в блоке DB1. Что-то мне кажется обращение к ячейке DB1.DBX18.0 не будет соответствовать Modbus_Data.40003. Я бы на твоем месте для начала не создавал сложные структуры, а просто работал бы с простыми переменными типа WORD. Или ты уверен, что это заработает?

3) MB_DATA_ADDR=40033 - поменьше слушай Автоматизатора :) Этот адрес будет соответствовать адресу 40032 или 40033 на стороне Овна. Ты в какой ячейке памяти на стороне Овна готовишь данные на передачу?

4) Ты передаешь 1 слово (MB_DATA_LEN=1)?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а): 2) Структура Modbus_Data в блоке DB1. Что-то мне кажется обращение к ячейке DB1.DBX18.0 не будет соответствовать Modbus_Data.40003. Я бы на твоем месте для начала не создавал сложные структуры, а просто работал бы с простыми переменными типа WORD. Или ты уверен, что это заработает?
Я этим методом создавал соединение с универсальным Модбас ОРС сервером Инсат. Я попробую сделать так как вы говорите еще раз, а где мне сохранять данные для их использования в программе?
Михайло писал(а): 3) MB_DATA_ADDR=40033 - поменьше слушай Автоматизатора :) Этот адрес будет соответствовать адресу 40032 или 40033 на стороне Овна. Ты в какой ячейке памяти на стороне Овна готовишь данные на передачу?
Вот адреса памяти в ОВНЕ, которые я считывал из универсального Модбас ОРС сервера Инсат. Пытаюсь считаывть и записывать с тех же самых ячеек с помощью Сименса.
Безымянный1.JPG
Безымянный2.JPG
Михайло писал(а):4) Ты передаешь 1 слово (MB_DATA_LEN=1)?
Может я чтото не правильно указал, наверное если мы введем ввел "P#DB1.DBX18.0 WORD 2", то MB_DATA_LEN будет равен 2. Подскажите правильно ли я выразился?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

kobrik писал(а): Я этим методом создавал соединение с универсальным Модбас ОРС сервером Инсат. Я попробую сделать так как вы говорите еще раз, а где мне сохранять данные для их использования в программе?
Как можно их мониторить?

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение Михайло »

kobrik писал(а):Я попробую сделать так как вы говорите еще раз, а где мне сохранять данные для их использования в программе?
Там же в DB1 сохраняй, только создай не структуру Struct, а пачку переменных типа WORD. Главное, чтобы были переменные с offset +18.0, +20.0, куда и будут писаться данные.
kobrik писал(а):Пытаюсь считаывть и записывать с тех же самых ячеек с помощью Сименса.
Там для дискретных катушек задан начальный адрес 0. Значит надо ловить данные, начиная с ячейки 1.
Одной функции MB_CLIENT недостаточно, вторая функция должна считывать Holding registers, начиная с адреса 40002, т.к. в Овне начальный адрес 1.
Ты этот момент с адресами 1, 10001, 30001, 40001 уловил?
kobrik писал(а):Может я чтото не правильно указал, наверное если мы введем ввел "P#DB1.DBX18.0 WORD 2", то MB_DATA_LEN будет равен 2. Подскажите правильно ли я выразился?
Эти значения могут быть различные, но логично все-таки задать одинаковые числа.
MB_DATA_LEN определяет длину запрашиваемых данных, которую нужно вписывать в Modbus-запрос клиента. Указатель P# определяет длину вроде как для безопасности, чтобы не было переполнения памяти.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка программированию ПЛК (kobrik)

Сообщение kobrik »

Михайло писал(а): Там же в DB1 сохраняй, только создай не структуру Struct, а пачку переменных типа WORD. Главное, чтобы были переменные с offset +18.0, +20.0, куда и будут писаться данные.
Пачка переменных? что это значит? Если мы введем P#DB1.DBX18.0 WORD 2 в блоке то все равно не показывает в DB1...
Михайло писал(а): Ты этот момент с адресами 1, 10001, 30001, 40001 уловил?
Да уловил, это в зависимости что мы хотим считывать или записывать, применяем адреса. К примеру Holding registers использует такой вид: 40001.

Ответить