using System;
using Newtonsoft.Json;
namespace HH.WCS.Mobox3.DSZSH.device {
///
/// 输送线PLC设备
///
public class ProductionLineDevice {
public string Ip { get; set; }
public int Port { get; set; }
public ProductionLineDevice(string ip, int port) {
Ip = ip;
Port = port;
}
public ProductionLineDevice(string id, string ip, int port) {
Ip = ip;
Port = port;
Id = id;
}
public string Id { get; set; }
///
/// 系统状态:0本地 1联动(AGV模式) 2故障
///
public int SystemState { get; set; }
///
/// 满垛下线:1输送线末端有成品料,需要AGV搬运 0默认值
///
public int FullOffline { get; set; }
///
/// 呼叫托盘垛:1需要空托,呼叫AGV配送 0默认值
///
public int CallPallet { get; set; }
///
/// 允许 AGV 放托盘垛:1允许放垛 0默认值
///
public int AllowAgvPlacePallet { get; set; }
private int _agvPicking;
private int _agvPlacingPallet;
///
/// AGV 正在取货:下线AGV写入1,取货完成后恢复0
///
public int AgvPicking {
get => _agvPicking;
set {
var isOk = ModbusHelper.WriteSingleRegister(10, value, Ip, Port);
_agvPicking = isOk ? value : throw new Exception($"修改 [AGV 正在取货] 为 '{value}' 失败");
}
}
///
/// AGV 正在放托盘垛:上线AGV写入1,放托完成后恢复0
///
public int AgvPlacingPallet {
get => _agvPlacingPallet;
set {
var isOk = ModbusHelper.WriteSingleRegister(11, value, Ip, Port);
_agvPlacingPallet = isOk ? value : throw new Exception($"修改 [AGV 正在放托盘垛] 为 '{value}' 失败");
}
}
public bool LoadDeviceStateOk() {
var readArray = ModbusHelper.ReadHoldingRegisters(0, 20, Ip, Port);
if (readArray == null || readArray.Length < 12) {
return false;
}
// 只读地址数据
SystemState = readArray[0];
FullOffline = readArray[1];
CallPallet = readArray[2];
AllowAgvPlacePallet = readArray[3];
// 可写地址数据
_agvPicking = readArray[10];
_agvPlacingPallet = readArray[11];
var log = JsonConvert.SerializeObject(readArray);
LogHelper.Info(log);
return true;
}
}
}