/// <summary> /// 使用功能码H05进行单线圈写入 /// </summary> /// <param name="address">起始地址</param> /// <param name="coil">要写入的状态</param> /// <returns></returns> public OperateResult <bool> write_Bool(byte address, coil coil) { try { mutex.WaitOne(3000); if (this.Socket_ready) { Thread.Sleep(10); this.socket.Send(this.Modbus_TCP.GenerateH05(function.H05, 1, address, coil)); //发送报文 byte[] data = new byte[100]; //定义数据接收数组 this.socket.Receive(data); //接收数据到data数组 mutex.ReleaseMutex(); return(new OperateResult <bool>() { Content = Convert.ToBoolean(coil), ErrorCode = "0", IsSuccess = true }); } else { throw new AggregateException("未连接设备"); } } catch (Exception e) { mutex.ReleaseMutex(); return(Err <bool>(e)); } }
byte[] Modbus_name.GenerateH05(function function, ushort Station, ushort start, coil coil) { return(message(modbus_Name.GenerateH05(function, Station, start, coil).ToList())); }
/// <summary> /// 实现对下位机进行线圈写入--H05 /// </summary> /// <param name="function">功能码枚举</param> /// <param name="Station">访问的站号</param> /// <param name="start">写入起始地址</param> /// <param name="coil">要写入的状态</param> /// <returns></returns> byte[] Modbus_name.GenerateH05(function function, ushort Station, ushort start, coil coil) { byte[] message = new byte[6]; message[0] = Convert.ToByte(Station); message[1] = Convert.ToByte(function); for (int i = 0; i < 2; i++) { message[2 + i] = (int_to_byte(start)[i]); } message[4] = Convert.ToByte(coil); return(this.GetCRCDatas(message)); }