82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using AR;
 | |
| using System;
 | |
| using System.Windows.Media.Media3D.Converters;
 | |
| using vmsnet.Configures;
 | |
| 
 | |
| namespace vmsnet
 | |
| {
 | |
|     public class DigitalIndicator : JdModbusRTU
 | |
|     {
 | |
| 
 | |
|         /// <summary>
 | |
|         /// default value  = 1
 | |
|         /// </summary>
 | |
|         public byte SlaveID { get; set; } = 1;  // Slave No 
 | |
| 
 | |
|         public DigitalIndicator(byte slaveID = 0) : 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 = 0) : base(comPort, configure)
 | |
|         {
 | |
|             SlaveID = slaveId;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// value 값을 디스플레이에 전송합니다.
 | |
|         /// 전송 주소는 기본 0으로 설정되어 있습니다
 | |
|         /// 이 명령은 회신값을 체크하고 True를 반환하지 않습니다.
 | |
|         /// False 반환시에는 장치 상태를 점검 하세요
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         /// <returns></returns>
 | |
|         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);
 | |
|         }
 | |
| 
 | |
|         UInt16[] splitI32(Int32 value)
 | |
|         {
 | |
|             var hValue = (UInt16)(value >> 16);     // 상위 16 Bit
 | |
|             var lValue = (UInt16)(value & 0xFFFF);  // 하위 16 Bit
 | |
|             return new ushort[] { hValue, lValue };
 | |
|         }
 | |
| 
 | |
|         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;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 | 
