Подключение ПЛК Siemens S7-1500 к базе данных SQL Server

Руководство по подключению: здесь. Я слежу за гидом и делаю много вещей. Соединение между ПЛК и сервером SQL установлено в порядке, я успешно вошел в SQL.
Я могу insert в таблицы, update и выполнить store procedures.

Но когда я запускаю select запрос, я не знаю, как получить данные и прочитать значения.

Тиа Портал

Использую TIA PORTAL v16.

ПЛК: S7 1200 siemens

У меня простая таблица, я хочу просто прочитать целое число, сначала с одной строкой! затем расширите мою работу.

Это моя структура таблицы:

CREATE TABLE MyTable(
[id] [int] IDENTITY(1,1) NOT NULL,
[value] [int] NOT NULL,
)
) ON [PRIMARY]

а это мой select запрос:

SELECT [value]
FROM [dbo].[MyTable]
WHERE id = 12033

ожидаемый результат:

20

SQL выстрел

https://support.industry.siemens.com/tf/ww/en/posts/connecting-an-plc-siemens-s7-1500-to-an-sql-server-database/239392/?page=0&pageSize=10#post939400.

ОБНОВИТЬ

Я ответил на свой вопрос: обратите внимание, компания Siemens недавно (20.11.2020) опубликовала документ о прямом подключении серии S7- * к базе данных Microsoft SQL Server. Таким образом, проверенный ответ - это классический и нормальный способ подключения ПЛК к SQL Server, а следующий ответ - новейшее собственное решение. Повеселись


person Peyman Majidi    schedule 16.06.2020    source источник


Ответы (2)


Заметное обновление !!!

Компания Siemens недавно (20.11.2020) опубликовала документ о подключении серии S7- * к базе данных Microsoft SQL Server, напрямую и с NO средним -программное обеспечение типа OPC Servers или S7netplus package. Это означает, что вы можете запускать SQL-запросы, такие как select и insert, через внутреннюю функцию в ПЛК.
Это более быстрое и собственное решение.

Сначала через TiaPortal я сделал массив строк в блоке Program. массив sqlcommands

Вы должны настроить строки подключения, как показано на рисунке ниже, IP-адрес Microsoft Sql Server - 172.16.62.1:

введите описание изображения здесь

Затем я создал встроенную функцию ПЛК, следуя инструкциям в этих pdf, опубликованный Simense. настройка функции ПЛК

У меня есть куча запросов в моем предопределенном строковом массиве, я выбираю один из них по его индексу в качестве входного параметра для функции PLC.
затем я загружаю изменения в PLC. в результате у меня hello world в MSSQL Server. введите здесь код  hello world До сих пор я выполнял запрос SQL Server с помощью самого ПЛК!
Давайте выполним еще один запрос, самый сложный: select.
Я сказал самое сложное, потому что select имеет набор записей с различными типами данных: например, varchar, bool, DateTime.

Инструкция select Используя инструкцию select, вы можете считывать данные из таблицы базы данных и выполнять с ними другие операции в вашем контроллере. Ниже мы используем пример, чтобы показать, как работает эта инструкция, и какие изменения вам нужно будет внести в свой запрос. В примере используется следующий запрос:

Select * from Mytable

Запрошенные данные хранятся в блоке данных SqlReceive в структуре типа данных typeUseCaseSpecificData. Эти типы данных необходимо изменять индивидуально для каждого запроса. Вы можете сделать это следующим образом: 1. Запустите запись Wireshark, чтобы узнать длину пакета метаданных. 2. Выполните запрос Выберите сумму из PLCDATA_2, где Fruit = $ 'Apple $'. 3. Остановите запись Wireshark и найдите кадр ответа от SQL-сервера, используя фильтр TDS. 4. Выделите фрейм и щелкните строку Token - ColumnMetaData.

Хорошо, теперь я хочу выбрать select запрос в массиве sqlqueries:

SELECT _barcode FROM mytable where id = 4

select

Я снова активирую / деактивирую ввод, затем я получаю свой результат, здесь я получаю строку «Peyman Majidi» по ее идентификатору.

выбрать результат

Выход:

'Пейман Маджиди'

Я могу показать вам, как это работает, Wireshark, слушая tds протокол.
Протокол потока табличных данных (TDS) дает вам возможность установить прямое соединение с сервером Microsoft SQL. Используя TDS, вы можете войти в базу данных SQL-сервера и передать инструкции SQL. Таким образом можно читать данные из базы данных или отправлять их в базу данных для хранения.

wirehark

person Peyman Majidi    schedule 12.01.2021

После долгих поисков и чтения документов я обнаружил, что Siemens все еще разрабатывает серверный модуль MSSql, и теперь он не завершен. Данные будут внутри буфера приема: InstLsql_Microsoft.statRcvData.bytes[]. Но вы должны искать свою информацию.

Но, тем не менее, лучший способ чтения и записи в регистры ПЛК - это использовать S7netplus библиотеку (.NET-библиотеку для подключения Siemens S7). S7.Net Plus является продолжением работы, проделанной Juergen1969 над проектом S7.Net. Библиотека мне показалась простой и эффективной, но с конца 2009 года проект не претерпел изменений.

Загрузите и установите в C # Project:

PM> Install-Package S7netplus -Version 0.4.0

Для создания экземпляра драйвера вам необходимо использовать этот конструктор:

public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot)

Пример:

Этот код создает объект Plc для plc S7-300 с IP-адресом 127.0.0.1 для plc в стойке 0 с процессором в слоте 2:

Plc plc = new Plc(CpuType.S7300, "127.0.0.1", 0, 2);

Подключение к ПЛК

public void Open()

Например, эта строка кода открывает соединение:

plc.Open();

Отключение от ПЛК

public void Close()

Например, это закрывает соединение:

plc.Close();

Чтение байтов / Запись байтов

Библиотека предлагает несколько методов чтения переменных. Базовый и наиболее используемый - ReadBytes.

public byte[] ReadBytes(DataType dataType, int db, int startByteAdr, int count)

public void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value)

Это прочитает все байты, которые вы укажете, из заданной области памяти. Этот метод автоматически обрабатывает несколько запросов, если количество байтов превышает максимальное количество байтов, которое может быть передано за один запрос.

dataType: вы должны указать место в памяти с помощью перечисления DataType

public enum DataType
{
    Input = 129,
    Output = 130,
    Memory = 131,
    DataBlock = 132,
    Timer = 29,
    Counter = 28
}

db: адрес типа данных, например, если вы хотите прочитать DB1, это поле будет «1»; если вы хотите прочитать T45, это поле - 45. startByteAdr: адрес первого байта, который вы хотите прочитать, например, если вы хотите прочитать DB1.DBW200, это 200. count: содержит, сколько байтов вы хотите читать. Value []: массив байтов для записи в ПЛК. Пример: этот метод считывает первые 200 байтов DB1:

var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 200);

Дополнительная документация находится здесь:
документация S7.Net

person Peyman Majidi    schedule 02.07.2020