89 lines
2.7 KiB
C#
89 lines
2.7 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 };
|
|
}
|
|
|
|
UInt16[] splitI32(Int32 value)
|
|
{
|
|
var hValue = (UInt16)(value >> 16);
|
|
var lValue = (UInt16)(value & 0xFFFF);
|
|
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|