S7

nuget包

1.S7netplus

1-安装S7netplus 2-using S7.Net;

//plc型号,一般是1500,仿真实例的IP,端口一般是102,对应的机架和插槽
Plc plc = new Plc(CpuType.S71500, "192.168.0.1", 102, 0, 1);
//plc型号,一般是1500,仿真实例的IP,端口一般是102,对应的机架和插槽
Plc plc = new Plc(CpuType.S71500, "192.168.0.1", 102, 0, 1);
//读
//DB: 通常用于表示数据块的编号。
//DataType: 表示数据的类型。一般就是DataBlock
//StartByteAdr: 起始字节地址,表示从数据块中哪个字节开始访问数据。起始值偏移量
//BitAdr: 位地址,表示字节中的具体位位置。偏移量的小数位
//Count: 数据数量,这里设为 1,表示只读取一个数据单元。
//VarType:要读取数据的变量类型,假设是一个枚举类型,值为 Bit。
DataItem dataItem = new DataItem()
{
    DataType = DataType.DataBlock,
    DB = 1,
    StartByteAdr = 14,
    BitAdr = 1,
    Count = 1,
    VarType = VarType.Bit,
};
List<DataItem> temp = [dataItem];
//读多个
plc.ReadMultipleVars(temp);
Console.WriteLine((bool)temp[0].Value);
//foreach (var item in (BitArray)temp[0].Value)
//{
//  Console.WriteLine(item);
//}
plc.Close();
//写入
//Value:要写入的值
DataItem dataItem1 = new DataItem()
{
    DataType = DataType.DataBlock,
    DB = 1,
    StartByteAdr = 14,
    BitAdr = 1,
    Count = 1,
    VarType = VarType.Bit,
    Value = !(bool)temp[0].Value,
};
DataItem[] temp1 = [dataItem1];
​
plc.Write(temp1);

采集间隔

//internal: 访问修饰符,表示此字段只能在同一个程序集内访问。
//readonly: 修饰符,意味着这个字段只能在声明时或者在构造函数中被赋值,之后就不能再被修改。
//PeriodicTimer: .NET 6引入的一个计时器类型,用于创建按固定周期触发的定时器。
//采集间隔: 变量名,表示这是一个采集间隔的计时器。
//new(TimeSpan.FromMilliseconds(300)): 创建一个新的PeriodicTimer,间隔时间为300毫秒(0.3秒)。
这个计时器可以用于定期执行某些任务,比如数据采集、状态检查等。每300毫秒,它会触发一次执行。
internal readonly PeriodicTimer 采集间隔 = new(TimeSpan.FromMilliseconds(300));

读取String地址要加2,首位是字符串最大长度,第二位是字符串的实际长度,通常读254

//将多读出的空格去除
virtualSN = 信号表[信号名称表.读取_SN].Value.ToString().Trim('\0');

//清空之前独到的数据

await plc.WriteAsync(plcAddress, emptyString);



工站 = (工站Base)Activator.CreateInstance(工站类型, new object[] { 系统参数.信号表, 实时信息 });

工站 = (工站Base)Activator.CreateInstance(工站类型, [系统参数.信号表, 实时信息]);

plc写入起始地址一致,类型为S7string

读取还是原来的