Подключение ПЛК 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
2 ответа
После долгих поисков и чтения документов я обнаружил, что 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
Заметное обновление!!!
Компания Siemens недавно (20.11.2020) опубликовала документ о подключении серии S7-* к базе данных Microsoft SQL Server напрямую и без промежуточного программного обеспечения, такого как
OPC Servers
или
S7netplus
упаковка. Это означает, что вы можете выполнять запросы SQL, такие как и
insert
через внутреннюю функцию в ПЛК.
Это более быстрое и родное решение.
Сначала через TiaPortal я сделал массив строк в программном блоке.
Вы должны настроить строки подключения, как показано на рисунке ниже, где IP-адрес сервера Microsoft Sql
172.16.62.1
:
Затем я сделал встроенную функцию ПЛК, следуя инструкциям в этих pdf -файлах, опубликованных Simense.
У меня есть куча запросов в моем предопределенном массиве строк, я выбираю один из них по его индексу в качестве входного параметра функции ПЛК.
затем я загрузил изменения в ПЛК. в результате у меня
hello world
в MSSQL Server. введите код здесь До сих пор я запускал SQL Server Query с помощью самого ПЛК!
Запустим еще один запрос и самый сложный: .
Я сказал самый сложный, потому что у него куча записей с разными типами данных: например
varchar
,
bool
,
DateTime
.
Инструкция «выбрать» Используя инструкцию «выбрать», вы можете считывать данные из таблицы базы данных и выполнять с ними другие операции в вашем контроллере. Ниже мы используем пример, чтобы показать, как работает эта инструкция и какие изменения вам нужно будет внести для вашего запроса. В примере используется следующий запрос:
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
Я снова активирую/деактивирую ввод, затем получаю результат, здесь я получаю строку «Пейман Маджиди» по ее идентификатору.
Выход:
'Пейман Маджиди'
Я могу показать вам, как это работает,
Wireshark
слушая
tds
протокол.
Протокол Tabular Data Stream (TDS) позволяет установить прямое соединение с сервером Microsoft SQL. Используя TDS, вы можете войти в базу данных SQL-сервера и передавать SQL-инструкции. Таким образом можно считывать данные из базы данных или отправлять их в базу данных для хранения.