using AR; using System; using System.Windows.Media.Media3D.Converters; using vmsnet.Configures; namespace vmsnet { public class DigitalIndicator : JdModbusRTU { /// /// default value = 1 /// public byte SlaveID { get; set; } = 1; // Slave No public DigitalIndicator(byte slaveID = 1) : base("", new RtuConfigure { BaudRate = 9600, DataBits = 8, StopBits = System.IO.Ports.StopBits.One, Parity = System.IO.Ports.Parity.None }) { SlaveID = slaveID; } public DigitalIndicator(string comPort, RtuConfigure configure, byte slaveId = 1) : base(comPort, configure) { SlaveID = slaveId; } /// /// value 값을 디스플레이에 전송합니다. /// 전송 주소는 기본 0으로 설정되어 있습니다 /// 이 명령은 회신값을 체크하고 True를 반환하지 않습니다. /// False 반환시에는 장치 상태를 점검 하세요 /// /// /// public bool SetKA(int value) { // Config 에서 가져온 코드 var valuebuffer = new ushort[20]; valuebuffer[0] = Convert.ToUInt16(value); for (int i = 1; i < valuebuffer.Length; i++) valuebuffer[i] = 0; return WriteValue(valuebuffer); // 이전 코드 //var buffer = splitI32(value); //return WriteValue(buffer); } public bool WriteValue(UInt16[] values) { if (IsOpen == false) { ErrorMessage = "포트가 열리지 않았습니다"; return false; } if (master == null) { ErrorMessage = "모드버스가 초기화 되지 않았습니다"; return false; } try { master.WriteMultipleRegisters(this.SlaveID, 0, values); return true; } catch (Exception ex) { ErrorMessage = ex.Message; return false; } } UInt16[] splitI32(Int32 value) { var hValue = (UInt16)(value >> 16); // 상위 16 Bit var lValue = (UInt16)(value & 0xFFFF); // 하위 16 Bit return new ushort[] { hValue, lValue }; } } }