| | |
| | | /// </summary> |
| | | public class S7Helper |
| | | { |
| | | public static Dictionary<string, Plc> ip_Plc = new Dictionary<string, Plc>();//内存,连接上的PLC通讯对象 |
| | | public static Dictionary<string, Plc> ip_Plc = new Dictionary<string, Plc>();//内存,连接上的PLC通讯对象 |
| | | |
| | | public S7Helper(string ip, short rack, short slot) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量读取或单独读取DB块数据(8位byte),并转换成字符串形式 |
| | | /// 批量读取或单独读取DB块数据 (8位byte) ,并转换成字符串形式 |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="count">读取的个数,1个=8位十六进制数</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="count">读取的个数,1个=8位十六进制数</param> |
| | | /// <returns></returns> |
| | | public static string ReadString(string deviceIp, int dbNo, int startByteAdr, int count) |
| | | { |
| | |
| | | if (plc.IsConnected) |
| | | { |
| | | var data = plc.ReadBytes(DataType.DataBlock, dbNo, startByteAdr, count); |
| | | result = System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0').TrimEnd('\n').TrimEnd('\r'); ;//此方法可以把byte数组转换成字符串,但是会造成\0\u结束符不显示,需要下位机正确的数据 |
| | | result = System.Text.Encoding.UTF8.GetString(data).TrimEnd('\0').TrimEnd('\n').TrimEnd('\r'); ;//此方法可以把byte数组转换成字符串,但是会造成\0\u结束符不显示,需要下位机正确的数据 |
| | | if (result == string.Empty) |
| | | { |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量写入或单独写入DB块数据(8位byte),以字符串转换byte形式写入 |
| | | /// 批量写入或单独写入DB块数据 (8位byte) ,以字符串转换byte形式写入 |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="data">要写入的数据</param> |
| | | /// <returns></returns> |
| | | public static bool WriteString(string deviceIp, int dbNo, int startByteAdr, string data) |
| | |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量读取或单独读取DB块数据(8位byte) |
| | | /// 批量读取或单独读取DB块数据 (8位byte) |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="count">读取的个数,1个=8位十六进制数</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="count">读取的个数,1个=8位十六进制数</param> |
| | | /// <returns></returns> |
| | | public static byte[] ReadBytes(string deviceIp, int dbNo, int startByteAdr, int count) |
| | | { |
| | |
| | | |
| | | if (result.Length == 0) |
| | | { |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量写入或单独写入DB块数据(8位byte) |
| | | /// 批量写入或单独写入DB块数据 (8位byte) |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="data">要写入的数据</param> |
| | | /// <returns></returns> |
| | | public static bool WriteBytes(string deviceIp, int dbNo, int startByteAdr, byte[] data) |
| | |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量读取或单独读取DB块数据(1位bit) |
| | | /// 批量读取或单独读取DB块数据 (1位bit) |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="count">要读取多少位</param> |
| | | /// <param name="bitAdr">从第几位开始读取</param> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | if (result.Length == 0) |
| | | { |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | Link(plc);//设备发送的数据为空,重连 |
| | | } |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量写入或单独写入DB块数据(1位bit) |
| | | /// 批量写入或单独写入DB块数据 (1位bit) |
| | | /// </summary> |
| | | /// <param name="deviceIp">plc设备通讯地址</param> |
| | | /// <param name="dbNo">DB块号</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="biteAdr">起始bit地址,从第几位开始写k</param> |
| | | /// <param name="startByteAdr">起始byte地址,最小值0,1=8位=1个Block</param> |
| | | /// <param name="biteAdr">起始bit地址,从第几位开始写k</param> |
| | | /// <param name="bitValue">要写入的数据</param> |
| | | /// <returns></returns> |
| | | public static bool WriteBits(string deviceIp, int dbNo, int startByteAdr, byte biteAdr, BitArray bitValue) |
| | |
| | | } |
| | | else |
| | | { |
| | | Link(plc);//设备未连接,重连 |
| | | Link(plc);//设备未连接,重连 |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 通过S7协议连接下位机时需要的model,应该放在model层,这里我懒了 |
| | | /// 通过S7协议连接下位机时需要的model,应该放在model层,这里我懒了 |
| | | /// </summary> |
| | | public class S7ConfigModel |
| | | { |