/// <summary> /// Command code 42: Single discrete control. /// </summary> /// <param name="slaveStationNo">Slave Station No</param> /// <param name="cmmdCode">Command Code</param> /// <param name="runCode">Running Code</param> /// <param name="mType">Memory Type</param> /// <param name="discreteNo">Discrete No</param> /// <param name="dType">Data Type</param> public void WriteSingleDiscrete(int slaveStationNo, CommandCode cmmdCode, RunningCode runCode, MemoryType mType, ushort discreteNo, DataType dType) { try { string frame = this.GetMessageWriteSingleDiscrete(slaveStationNo, cmmdCode, runCode, mType, discreteNo, dType); objSerialPort.WriteLine(frame); // Read SerialPort int sizeOfMessageReceiver = 9; string buffReceiver = string.Empty; DateTime startDateTime = DateTime.Now; do { this.CheckBufferReceiver(buffReceiver); buffReceiver = objSerialPort.ReadExisting(); System.Threading.Thread.Sleep(100); } while (buffReceiver.Length < sizeOfMessageReceiver && (DateTime.Now.Subtract(startDateTime).TotalMilliseconds < objSerialPort.ReadTimeout)); string errorMsg = this.GetException(buffReceiver); if (!string.IsNullOrEmpty(errorMsg) || !string.IsNullOrWhiteSpace(errorMsg)) { throw new Exception(errorMsg); } } catch (Exception ex) { throw ex; } }
/// <summary> /// Command code 42: Single discrete control. /// </summary> /// <param name="slaveStationNo">Slave Station No</param> /// <param name="cmmdCode">Command Code</param> /// <param name="runCode">Running Code</param> /// <param name="mType">Memory Type</param> /// <param name="discreteNo">Discrete No</param> /// <param name="dType">Data Type</param> /// <returns>string</returns> public string GetMessageWriteSingleDiscrete(int slaveStationNo, CommandCode cmmdCode, RunningCode runCode, MemoryType mType, ushort discreteNo, DataType dType) { string frame = string.Format("{0:X2}", slaveStationNo); // Slave station no. frame += string.Format("{0:X2}", (byte)cmmdCode); // Command no. frame += string.Format("{0}", (byte)runCode); // Runiing code. switch (dType) { case DataType.BOOL: frame += string.Format("{0}{1:X4}", mType, discreteNo); // Discrete No. break; default: throw new InvalidOperationException("Data type is invalid"); } frame += CheckSum(frame); return(Convert.ToChar(STX) + frame + Convert.ToChar(EXT)); }