经过大量搜索和阅读文档,我发现西门子仍在开发 MSSql 服务器模块,现在还没有完成。数据将在 Receivebuffer: 内InstLsql_Microsoft.statRcvData.bytes[]
。但是你必须搜索你的信息。
但是,在 PLC 寄存器上读写的最佳方法仍然是使用S7netplus
库(西门子 S7 连接的 .NET 库)。S7.Net Plus 是 Juergen1969 在 S7.Net 项目上所做工作的延续。我发现这个库简单而有效,但该项目自 2009 年底以来一直停滞不前。
下载并安装在 C# 项目上:
PM> Install-Package S7netplus -Version 0.4.0
要创建驱动程序的实例,您需要使用此构造函数:
public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot)
例子:
此代码为 IP 地址为 127.0.0.1 的 S7-300 plc 创建一个 Plc 对象,用于机架 0 中的 plc 和插槽 2 中的 cpu:
Plc plc = new Plc(CpuType.S7300, "127.0.0.1", 0, 2);
连接到 PLC
public void Open()
例如这行代码打开连接:
plc.Open();
与 PLC 断开连接
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:dataType的地址,例如读取DB1,该字段为“1”;如果要读取T45,则该字段为45。 startByteAdr:要读取的第一个字节的地址,例如,如果要读取DB1.DBW200,则为200。 count:包含您要读取的字节数读书。Value[]:要写入 PLC 的字节数组。示例:此方法读取 DB1 的前 200 个字节:
var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 200);
更多文档在这里:
S7.Net 文档