using HslCommunication.ModBus;
using OrpaonEMS.Model.Enums;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OrpaonEMS.App.Models
{
///
/// 开关模型
///
public class SwitchModel : BindableBase
{
///
/// 实例化函数
/// 地址和ModbusPull一样
/// 第一个合闸 第二个分闸
///
public SwitchModel(string onAddress, string offAddress, ModbusTcpNet modbusTcpNet)
{
OnAddress = onAddress;
OffAddress = offAddress;
ModbusTcpNet = modbusTcpNet;
}
///
/// 开地址
/// 开和关是不同的地址
///
private string OnAddress { get; set; }
///
/// 关地址
/// 开和关是不同的地址
///
private string OffAddress { get; set; }
private SwitchEm _CurSwtichState;
///
/// 开关的状态
/// 读取合闸的信号 DI读取
///
public SwitchEm CurSwtichState
{
get { return _CurSwtichState; }
set { _CurSwtichState = value; }
}
private SwitchErr _CurSwtichErrInfo;
///
/// 开关的故障状态
/// 读取开关的Err信号 DI读取
///
public SwitchErr CurSwtichErrInfo
{
get { return _CurSwtichErrInfo; }
set { _CurSwtichErrInfo = value; }
}
private SwitchStateInfo _CurSwitchStateInfo;
///
/// 开关的状态
///
public SwitchStateInfo CurSwitchStateInfo
{
get { return _CurSwitchStateInfo; }
set { _CurSwitchStateInfo = value; RaisePropertyChanged(); }
}
/////
///// 开关的故障状态
///// 读取开关的Err信号 DI读取
/////
//public SwitchErr CurSwtichErrInfo { get; set; }
///
/// 驱动
///
public ModbusTcpNet ModbusTcpNet { get; }
///
/// 设置Switch开和关
/// 可实时赋值
///
///
public bool SetRtSwitch(SwitchEm state)
{
switch (state)
{
case SwitchEm.On://开
if (CurSwtichState == SwitchEm.Off)
{
Task.Run(new Action(() =>
{
ModbusTcpNet.Write(OnAddress, true);
Thread.Sleep(100);
ModbusTcpNet.Write(OnAddress, false);
//可以判断DI的结果是否正确
}));
}
break;
case SwitchEm.Off://关
if (CurSwtichState == SwitchEm.On)
{
Task.Run(new Action(() =>
{
ModbusTcpNet.Write(OffAddress, true);
Thread.Sleep(100);
ModbusTcpNet.Write(OffAddress, false);
//可以判断DI的结果是否正确
}));
}
break;
default:
break;
}
return true;
}
}
}