Commit e0de60c8 LN

增加stb状态读取

1 个父辈 27b90029
...@@ -8,6 +8,10 @@ namespace DeviceLib ...@@ -8,6 +8,10 @@ namespace DeviceLib
public class ACCMDManager public class ACCMDManager
{ {
/// <summary> /// <summary>
/// 0130h 选通输入(STB) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON
/// </summary>
internal static string STB_State = "0130";
/// <summary>
/// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON /// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON
/// </summary> /// </summary>
internal static string Home_Single = "0132"; internal static string Home_Single = "0132";
......
...@@ -13,6 +13,7 @@ namespace DeviceLib ...@@ -13,6 +13,7 @@ namespace DeviceLib
/// </summary> /// </summary>
public partial class ACServerManager public partial class ACServerManager
{ {
public static bool NeedCloseSTB = true;
public static bool IsShowMsg = false ; public static bool IsShowMsg = false ;
private static int SleepMSendons = 20; private static int SleepMSendons = 20;
private static int ReviceOutTimeMS = 100; private static int ReviceOutTimeMS = 100;
......
...@@ -264,14 +264,37 @@ namespace DeviceLib ...@@ -264,14 +264,37 @@ namespace DeviceLib
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
} }
private static void OpenAndCloseSTB(string portName, int slvAddr) private static void OpenAndCloseSTB(string portName, int slvAddr)
{ {
OnlyOpenSTB(portName, slvAddr);
System.Threading.Thread.Sleep(200); if (GetBusyStatus(portName, slvAddr).Equals(1))
CloseSTB(portName, slvAddr); {
Log(InfoType.Error, "伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 busy=1,直接返回");
return;
}
System.Threading.Thread.Sleep(SleepMSendons); System.Threading.Thread.Sleep(SleepMSendons);
if (GetSTBState(portName, slvAddr).Equals(1))
{
Log(InfoType.Error, "伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 STB=ON,先关闭STB");
CloseSTB(portName, slvAddr);
System.Threading.Thread.Sleep(SleepMSendons);
if (GetSTBState(portName, slvAddr).Equals(1))
{
Log(InfoType.Error, "伺服【" + portName + "_" + slvAddr + "】OpenSTB时发现 STB=ON,先关闭STB 后发现STB仍为ON,直接返回");
return;
}
}
System.Threading.Thread.Sleep(SleepMSendons);
OnlyOpenSTB(portName, slvAddr);
if (NeedCloseSTB)
{
System.Threading.Thread.Sleep(200);
CloseSTB(portName, slvAddr);
System.Threading.Thread.Sleep(SleepMSendons);
}
} }
private static void OnlyOpenSTB(string portName, int slvAddr) private static void OnlyOpenSTB(string portName, int slvAddr)
...@@ -391,7 +414,7 @@ namespace DeviceLib ...@@ -391,7 +414,7 @@ namespace DeviceLib
int length = 2; int length = 2;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); bool result = SendData(portName, dataArray);
System.Threading.Thread.Sleep(500); System.Threading.Thread.Sleep(500);
data = "0000"; data = "0000";
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
...@@ -409,11 +432,11 @@ namespace DeviceLib ...@@ -409,11 +432,11 @@ namespace DeviceLib
PreReadAddr = ACCMDManager.ActualPosition; PreReadAddr = ACCMDManager.ActualPosition;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2);
// SendData(portName,dataArray); // SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9);
int result = -1; int result = -1;
for (int i = 1; i <= rGetCount; i++) for (int i = 1; i <= rGetCount; i++)
{ {
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9);
result = GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition); result = GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition);
if (!result.Equals(-1)) if (!result.Equals(-1))
{ {
...@@ -504,6 +527,19 @@ namespace DeviceLib ...@@ -504,6 +527,19 @@ namespace DeviceLib
return GetCoilData(portName, reviceData, ACCMDManager.HOME_CMP_Status); return GetCoilData(portName, reviceData, ACCMDManager.HOME_CMP_Status);
} }
/// <summary> /// <summary>
/// 获取STB信号值,1=On,0=OFF
/// </summary>
/// <param name="portName"></param>
/// <param name="slvAddr"></param>
/// <returns></returns>
public static int GetSTBState(string portName, int slvAddr)
{
PreReadCoilAddr = ACCMDManager.STB_State;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.STB_State, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.STB_State);
}
/// <summary>
/// 获取原点信号值,1=原点亮 /// 获取原点信号值,1=原点亮
/// </summary> /// </summary>
/// <param name="portName"></param> /// <param name="portName"></param>
...@@ -524,10 +560,10 @@ namespace DeviceLib ...@@ -524,10 +560,10 @@ namespace DeviceLib
/// <returns></returns> /// <returns></returns>
public static int GetLimitNegativeSingle(string portName, int slvAddr) public static int GetLimitNegativeSingle(string portName, int slvAddr)
{ {
PreReadCoilAddr = ACCMDManager.Home_Single; PreReadCoilAddr = ACCMDManager.Limit_Negative_Single;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Negative_Single, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Negative_Single, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single); return GetCoilData(portName, reviceData, ACCMDManager.Limit_Negative_Single);
} }
/// <summary> /// <summary>
...@@ -538,10 +574,10 @@ namespace DeviceLib ...@@ -538,10 +574,10 @@ namespace DeviceLib
/// <returns></returns> /// <returns></returns>
public static int GetLimitPositiveSingle(string portName, int slvAddr) public static int GetLimitPositiveSingle(string portName, int slvAddr)
{ {
PreReadCoilAddr = ACCMDManager.Home_Single; PreReadCoilAddr = ACCMDManager.Limit_Positive_Single;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Positive_Single, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Positive_Single, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single); return GetCoilData(portName, reviceData, ACCMDManager.Limit_Positive_Single);
} }
private static int GetAddrValue(string portName, int slvAddr, string addr) private static int GetAddrValue(string portName, int slvAddr, string addr)
{ {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!