// 连接和关闭PLC
Plc newPlc = new Plc(CpuType.S71500, "192.168.1.5", 0,1);
newPlc.Open();
newPlc.Close(); // 读取数据
bool B = (bool)newPlc.Read("DB1.DBX0.0"); // 写入数据
newPlc.Write("DB1.DBX0.0", true); // 读取字节数组
newPlc.ReadBytes(DataType.DataBlock,1, 0, 8);
// 1.哪一块的位置,2.第几个DB块,3.从哪里开始,4.读几位 // 写字节数组
byte[] B = new byte[8];
for (int i = 0; i < B.Length; i++)
{
B[i] = (Byte)i;
}
newPlc.WriteBytes(DataType.DataBlock,1, 0, B); // 写监控表
newPlc.Read("I0.0", true);
newPlc.Read("Q0.0", true); // 写监控表
newPlc.Write("I0.0", true);
newPlc.Write("Q0.0", true); // B:字节,W:2字节,D:4字节
// 字节,字符,双字的读写
newPlc.Write("MB100",(Byte)70);
newPlc.Write("MW104",(Int16)80);
newPlc.Write("MD108",(Byte)90); // 获取PLC的IP地址
newPlc.IP.ToString();
newPlc.IP.ToString(); // 实数转换(实测管用,用来获取小数)
float allClearance = ((uint)newPlc.Read("DB24.DBD4.0")).ConvertToFloat();
在多线程写入和读取的时候会报错:TPKT is incomplete / invalid。(实测有用)
经过多次测试,是使用S7协议写入的时候报错了,原因是多余2个线程在同一时间在写入时,会报此错误,需要在代码上做优化。
C#可以连接PLC,但是无法读写,出现如下报错:(实测有用)
S7.Net.PlcException: 无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。
索引超出范围,请重新输入!
需要开启远程访问权限,处理操作:
首先在博图TIA查看PLC的属性
查看权限,设置完全权限
勾选 允许来自远程对象的PUT/GET通讯访问
读取DB数据时必须改DB块的属性,去掉优化的块访问的勾选项