Commit 7176757f authored by leon.huang's avatar leon.huang

modify level parse

parent 02a4bc27
...@@ -7,6 +7,7 @@ using System.Collections; ...@@ -7,6 +7,7 @@ using System.Collections;
using MQTTnet; using MQTTnet;
using MQTTnet.Client; using MQTTnet.Client;
using Newtonsoft.Json; using Newtonsoft.Json;
using ModbusDemo.Modular;
namespace ModbusDemo.Common namespace ModbusDemo.Common
{ {
public static class ModualAlarm public static class ModualAlarm
...@@ -55,5 +56,137 @@ namespace ModbusDemo.Common ...@@ -55,5 +56,137 @@ namespace ModbusDemo.Common
.Build(); .Build();
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
} }
public static void vSet_Modual_Alarm(byte byModbusID,ushort usAlarmCodde,bool bSetAlarm,byte byCommFailTimes,params string[] strChannalList)
{
for (int i = 0; i < ModualPoll.byX14pNumber;i++)
{
if (byModbusID == ModualPoll.cx14P.byModbusID[i])
{
for (int j = 0; j < strChannalList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string strChannel = "d" + i.ToString();
if (strChannalList[k] == strChannel)
{
if (bSetAlarm == true)
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx14P.sX14PAlarmStruct[i].usCommFailTimes[k] += byCommFailTimes;
}
ModualPoll.cx14P.sX14PAlarmStruct[i].usNowAlarmCode[k] |= usAlarmCodde;
}
else
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx14P.sX14PAlarmStruct[i].usCommFailTimes[k] = 0;
}
ModualPoll.cx14P.sX14PAlarmStruct[i].usNowAlarmCode[k] &= usAlarmCodde;
}
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX18xNumber; i++)
{
if (byModbusID == ModualPoll.cx18x.byModbusID[i])
{
for (int j = 0; j < strChannalList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string strChannel = "d" + i.ToString();
if (strChannalList[k] == strChannel)
{
if (bSetAlarm == true)
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx18x.sX18xAlarmstruct[i].usCommFailTimes[k] += byCommFailTimes;
}
ModualPoll.cx18x.sX18xAlarmstruct[i].usNowAlarmCode[k] |= usAlarmCodde;
}
else
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx18x.sX18xAlarmstruct[i].usCommFailTimes[k] = 0;
}
ModualPoll.cx18x.sX18xAlarmstruct[i].usNowAlarmCode[k] &= usAlarmCodde;
}
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX78cNumber; i++)
{
if (byModbusID == ModualPoll.cx78c.byModbusID[i])
{
for (int j = 0; j < strChannalList.Count(); j++)
{
for (int k = 0; k < 16; k++)
{
string strChannel = "d" + i.ToString();
if (strChannalList[k] == strChannel)
{
if (bSetAlarm == true)
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx78c.sX78cAlarmStruct[i].usCommFailTimes[k] += byCommFailTimes;
}
ModualPoll.cx78c.sX78cAlarmStruct[i].usNowAlarmCode[k] |= usAlarmCodde;
}
else
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx78c.sX78cAlarmStruct[i].usCommFailTimes[k] = 0;
}
ModualPoll.cx78c.sX78cAlarmStruct[i].usNowAlarmCode[k] &= usAlarmCodde;
}
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX66cNumber; i++)
{
if (byModbusID == ModualPoll.cx66c.byModbusID[i])
{
for (int j = 0; j < strChannalList.Count(); j++)
{
for (int k = 0; k < ModualPoll.byX66cRelayRegNumber; k++)
{
string strChannel = "d" + i.ToString();
if (strChannalList[k] == strChannel)
{
if (bSetAlarm == true)
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx66c.sX66cAlarmStruct[i].usCommFailTimes[k] += byCommFailTimes;
}
ModualPoll.cx66c.sX66cAlarmStruct[i].usNowAlarmCode[k] |= usAlarmCodde;
}
else
{
if ((usAlarmCodde & (ushort)eAlarmCode.ChannelCommunError) == (ushort)eAlarmCode.ChannelCommunError)
{
ModualPoll.cx66c.sX66cAlarmStruct[i].usCommFailTimes[k] = 0;
}
ModualPoll.cx66c.sX66cAlarmStruct[i].usNowAlarmCode[k] &= usAlarmCodde;
}
}
}
}
}
}
}
} }
} }
...@@ -12,7 +12,6 @@ using ModbusDemo; ...@@ -12,7 +12,6 @@ using ModbusDemo;
using ModbusDemo.Modular; using ModbusDemo.Modular;
using ModbusDemo.Common; using ModbusDemo.Common;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
namespace ModbusDemo.MessageFormat namespace ModbusDemo.MessageFormat
{ {
public class ModualControl public class ModualControl
...@@ -54,6 +53,7 @@ namespace ModbusDemo.MessageFormat ...@@ -54,6 +53,7 @@ namespace ModbusDemo.MessageFormat
public byte d5 { get; set; } public byte d5 { get; set; }
public byte d6 { get; set; } public byte d6 { get; set; }
public byte d7 { get; set; } public byte d7 { get; set; }
public string name {get; set; }
public string down { get; set; } public string down { get; set; }
public string upper { get; set; } public string upper { get; set; }
public UInt64 ts { get; set; } public UInt64 ts { get; set; }
...@@ -76,6 +76,7 @@ namespace ModbusDemo.MessageFormat ...@@ -76,6 +76,7 @@ namespace ModbusDemo.MessageFormat
public string srcId { get; set; } public string srcId { get; set; }
public string srcType { get; set; } public string srcType { get; set; }
public string srcCh { get; set; } public string srcCh { get; set; }
public string opType {get; set; }
public string resId { get; set; } public string resId { get; set; }
public string resType { get; set; } public string resType { get; set; }
public string resCh { get; set; } public string resCh { get; set; }
...@@ -103,7 +104,8 @@ namespace ModbusDemo.MessageFormat ...@@ -103,7 +104,8 @@ namespace ModbusDemo.MessageFormat
public UInt64 ulStartTime; public UInt64 ulStartTime;
public bool[] bControlBit = new bool[8]; public bool[] bControlBit = new bool[8];
public modual.eModualType eModualType; public modual.eModualType eModualType;
public ModualRespControl[] xModualRespControl = new ModualRespControl[8]; public bool bOpenMachine;
public ModualRespControl xModualRespControl;
} }
public class pcLiquidLevelConfig public class pcLiquidLevelConfig
...@@ -117,30 +119,25 @@ namespace ModbusDemo.MessageFormat ...@@ -117,30 +119,25 @@ namespace ModbusDemo.MessageFormat
public static List<ModualCntrol> liModuualControl = new List<ModualCntrol>(); public static List<ModualCntrol> liModuualControl = new List<ModualCntrol>();
public const ushort usDefineControlTimes = 1; public const ushort usDefineControlTimes = 1;
private static pcControlMap cControlMap = new pcControlMap(); private static pcControlMap cControlMap = new pcControlMap();
private static object obLock = new object();
#if DEBUG_TEST #if DEBUG_TEST
public const string strMapCfg = "{chMap:[{ \"srcId\": \"31\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\",\"d2\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + public const string strMapCfg = "{chMap:[" +
"{ \"srcId\": \"31\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"31\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d1\", \"dstCh\":[\"d1\",\"d2\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"31\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"16\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"16\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"16\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"16\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"16\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"35\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"35\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"35\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"35\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"35\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"90\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"39\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"39\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"39\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + "{ \"srcId\": \"39\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"39\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + //"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d0\", \"dstCh\":[\"d0\",\"d1\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + //"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d2\", \"dstCh\":[\"d2\",\"d3\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d6\", \"dstCh\":[\"d6\",\"d7\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," + //"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d4\", \"dstCh\":[\"d4\",\"d5\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
//"{ \"srcId\": \"13\", \"srcType\": \"WTDR66C\", \"srcCh\":\"d6\", \"dstCh\":[\"d6\",\"d7\"],\"resId\":\"23\",\"resType\":\"WTDR78C\",\"resCh\":\"d0\"}," +
"]}"; "]}";
#endif #endif
public static void vGetaWay_Receive_Control(string sDataString, out string stResponseData) public static void vGetaWay_Receive_Control(string sDataString, out string stResponseData)
...@@ -164,7 +161,7 @@ namespace ModbusDemo.MessageFormat ...@@ -164,7 +161,7 @@ namespace ModbusDemo.MessageFormat
ModualCntrol cModualCntrol = new ModualCntrol ModualCntrol cModualCntrol = new ModualCntrol
{ {
sbModbusID = byte.Parse(cControl.ss[i].addr), sbModbusID = byte.Parse(cControl.ss[i].addr),
usDurationTime = cControl.ss[i].op.duration, usDurationTime = (ushort)(cControl.ss[i].op.duration * 60),
ulStartTime = cControl.ss[i].op.startTime ulStartTime = cControl.ss[i].op.startTime
}; };
cModualCntrol.eModualType = eModdusId_Find_ModualType(cControl.ss[i].addr); cModualCntrol.eModualType = eModdusId_Find_ModualType(cControl.ss[i].addr);
...@@ -240,6 +237,7 @@ namespace ModbusDemo.MessageFormat ...@@ -240,6 +237,7 @@ namespace ModbusDemo.MessageFormat
{ {
vFindChannelMap(cControl.ss[i].addr, "d7", Convert.ToBoolean(cControl.ss[i].op.d7), ref cModualCntrol); vFindChannelMap(cControl.ss[i].addr, "d7", Convert.ToBoolean(cControl.ss[i].op.d7), ref cModualCntrol);
} }
if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR && cModualCntrol.ulStartTime <= Form1.GetTimeStamp()) if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR && cModualCntrol.ulStartTime <= Form1.GetTimeStamp())
{ {
cModualCntrol.bStartControl = true; cModualCntrol.bStartControl = true;
...@@ -259,13 +257,17 @@ namespace ModbusDemo.MessageFormat ...@@ -259,13 +257,17 @@ namespace ModbusDemo.MessageFormat
} }
if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{ {
if (cModualCntrol.bStartControl == true && cModualCntrol.ulStartTime != 0 && cModualCntrol.bControlStatus == true) lock (obLock)
{
liModuualControl.Add(cModualCntrol);
}
else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0)
{ {
liModuualControl.Add(cModualCntrol); vDelete_Same_Control(cModualCntrol);
if (cModualCntrol.bStartControl == true && cModualCntrol.ulStartTime != 0 && cModualCntrol.bControlStatus == true)
{
liModuualControl.Add(cModualCntrol);
}
else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0)
{
liModuualControl.Add(cModualCntrol);
}
} }
} }
for (int k = 0; k < 8; k++) for (int k = 0; k < 8; k++)
...@@ -330,36 +332,130 @@ namespace ModbusDemo.MessageFormat ...@@ -330,36 +332,130 @@ namespace ModbusDemo.MessageFormat
cControlMap = JsonConvert.DeserializeObject<pcControlMap>(strMapCfg); cControlMap = JsonConvert.DeserializeObject<pcControlMap>(strMapCfg);
while (true) while (true)
{ {
for (sbyte i = 0; i < liModuualControl.Count; i++) lock (obLock)
{ {
if (liModuualControl[i].bStartControl == false) for (sbyte i = 0; i < liModuualControl.Count; i++)
{ {
if (liModuualControl[i].ulStartTime <= Form1.GetTimeStamp()) if (liModuualControl[i].bStartControl == false)
{ {
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR; if (liModuualControl[i].ulStartTime <= Form1.GetTimeStamp())
liModuualControl[i].bStartControl = true;
bool[] bControlData = new bool[6];
bool[] btReadTempData;
byte ChannelNumber = 0;
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{ {
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 6); ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
ChannelNumber = 6; liModuualControl[i].bStartControl = true;
} bool[] bControlData = new bool[6];
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C) bool[] btReadTempData;
{ byte ChannelNumber = 0;
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 8); if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
ChannelNumber = 8; {
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 6);
ChannelNumber = 6;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 8);
ChannelNumber = 8;
}
for (sbyte j = 0; j < ChannelNumber; j++)
{
if (liModuualControl[i].bControlBit[j] == true)
{
bControlData[j] = liModuualControl[i].bControlData[j];
}
else
{
liModuualControl[i].bControlData[j] = bControlData[j];
}
ModbusErrorCode |= ModbusComm.Modbus_WriteMultipleCoils(liModuualControl[i].sbModbusID, 16, bControlData);
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out btReadTempData, liModuualControl[i].sbModbusID, 16, ChannelNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte k = 0; k < ChannelNumber; k++)
{
if (liModuualControl[i].bControlBit[k] == true && liModuualControl[i].sbModualIndex != 0xFF)
{
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] += usDefineControlTimes;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] += usDefineControlTimes;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError;
}
}
}
}
else if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte k = 0; k < ChannelNumber; k++)
{
if (liModuualControl[i].bControlBit[k] == true && liModuualControl[i].sbModualIndex != 0xFF)
{
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] = 0;
if (Enumerable.SequenceEqual(bControlData, btReadTempData))
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] = 0;
if (Enumerable.SequenceEqual(bControlData, btReadTempData))
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError;
}
}
}
}
}
} }
for (sbyte j = 0; j < ChannelNumber; j++) }
else
{
if ((liModuualControl[i].usDurationTime + liModuualControl[i].ulStartTime) <= Form1.GetTimeStamp())
{ {
if (liModuualControl[i].bControlBit[j] == true) ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
bool[] bControlData = new bool[6];
bool[] btReadTempData;
byte ChannelNumber = 0;
byte byOperatinChannelNUmber = 0;
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{ {
bControlData[j] = liModuualControl[i].bControlData[j]; ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 6);
ChannelNumber = 6;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ChannelNumber = 8;
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 8);
}
for (sbyte k = 0; k < ChannelNumber; k++)
{
if (liModuualControl[i].bControlBit[k] == true)
{
byOperatinChannelNUmber++;
}
} }
else for (sbyte j = 0; j < ChannelNumber; j++)
{ {
liModuualControl[i].bControlData[j] = bControlData[j]; if (byOperatinChannelNUmber == 3)
{
if (liModuualControl[i].bControlBit[j] == true && j != 2)
{
bControlData[j] = !liModuualControl[i].bControlData[j];
}
}
else
{
if (liModuualControl[i].bControlBit[j] == true)
{
bControlData[j] = !liModuualControl[i].bControlData[j];
}
}
} }
ModbusErrorCode |= ModbusComm.Modbus_WriteMultipleCoils(liModuualControl[i].sbModbusID, 16, bControlData); ModbusErrorCode |= ModbusComm.Modbus_WriteMultipleCoils(liModuualControl[i].sbModbusID, 16, bControlData);
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out btReadTempData, liModuualControl[i].sbModbusID, 16, ChannelNumber); ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out btReadTempData, liModuualControl[i].sbModbusID, 16, ChannelNumber);
...@@ -377,9 +473,9 @@ namespace ModbusDemo.MessageFormat ...@@ -377,9 +473,9 @@ namespace ModbusDemo.MessageFormat
} }
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C) else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{ {
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] += usDefineControlTimes; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] += usDefineControlTimes;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError;
} }
} }
} }
...@@ -399,92 +495,19 @@ namespace ModbusDemo.MessageFormat ...@@ -399,92 +495,19 @@ namespace ModbusDemo.MessageFormat
} }
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C) else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{ {
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] = 0; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] = 0;
if (Enumerable.SequenceEqual(bControlData, btReadTempData)) if (Enumerable.SequenceEqual(bControlData, btReadTempData))
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError; ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k + 8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError;
} }
} }
} }
} }
liModuualControl.Remove(liModuualControl[i]);
break;
} }
} }
} }
else
{
if ((liModuualControl[i].usDurationTime + liModuualControl[i].ulStartTime) <= Form1.GetTimeStamp())
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
bool[] bControlData = new bool[6];
bool[] btReadTempData;
byte ChannelNumber = 0;
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 6);
ChannelNumber= 6;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ChannelNumber = 8;
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bControlData, liModuualControl[i].sbModbusID, 16, 8);
}
for (sbyte j = 0; j < ChannelNumber; j++)
{
if (liModuualControl[i].bControlBit[j] == true)
{
bControlData[j] = !liModuualControl[i].bControlData[j];
}
}
ModbusErrorCode |= ModbusComm.Modbus_WriteMultipleCoils(liModuualControl[i].sbModbusID, 16, bControlData);
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out btReadTempData, liModuualControl[i].sbModbusID, 16, ChannelNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte k = 0; k < ChannelNumber; k++)
{
if (liModuualControl[i].bControlBit[k] == true && liModuualControl[i].sbModualIndex != 0xFF)
{
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] += usDefineControlTimes;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] += usDefineControlTimes;
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] |= (ushort)ModualAlarm.eAlarmCode.ChannelControlError;
}
}
}
}
else if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte k = 0; k < ChannelNumber; k++)
{
if (liModuualControl[i].bControlBit[k] == true && liModuualControl[i].sbModualIndex != 0xFF)
{
if (liModuualControl[i].eModualType == modual.eModualType.WTDR66C)
{
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] = 0;
if (Enumerable.SequenceEqual(bControlData, btReadTempData))
ModualPoll.cx66c.sX66cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError;
}
else if (liModuualControl[i].eModualType == modual.eModualType.WTDR78C)
{
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] = 0;
if (Enumerable.SequenceEqual(bControlData, btReadTempData))
ModualPoll.cx78c.sX78cAlarmStruct[liModuualControl[i].sbModualIndex].usNowAlarmCode[k+8] &= (ushort)~ModualAlarm.eAlarmCode.ChannelControlError;
}
}
}
}
liModuualControl.Remove(liModuualControl[i]);
break;
}
}
} }
Thread.Sleep(100); Thread.Sleep(100);
} }
...@@ -492,31 +515,51 @@ namespace ModbusDemo.MessageFormat ...@@ -492,31 +515,51 @@ namespace ModbusDemo.MessageFormat
public static modual.eModualType eModdusId_Find_ModualType(string sModbusID) public static modual.eModualType eModdusId_Find_ModualType(string sModbusID)
{ {
for (int i = 0; i < cControlMap.chMap.Count; i++) for (int i = 0; i < ModualPoll.byX66cNumber; i++)
{ {
if (sModbusID == cControlMap.chMap[i].srcId) if (byte.Parse(sModbusID) == ModualPoll.cx66c.byModbusID[i])
{ {
if(cControlMap.chMap[i].srcType == "WTDR14P") return modual.eModualType.WTDR66C;
return modual.eModualType.WTDR14P;
else if(cControlMap.chMap[i].srcType == "WTDR18X")
return modual.eModualType.WTDR18X;
else if(cControlMap.chMap[i].srcType == "WTDR78C")
return modual.eModualType.WTDR78C;
else if(cControlMap.chMap[i].srcType == "WTDR66C")
return modual.eModualType.WTDR66C;
} }
} }
for (int i = 0; i < ModualPoll.byX18xNumber; i++)
{
if (byte.Parse(sModbusID) == ModualPoll.cx78c.byModbusID[i])
{
return modual.eModualType.WTDR78C;
}
}
//if(cControlMap.chMap[i].srcType == "WTDR14P")
// return modual.eModualType.WTDR14P;
//else if(cControlMap.chMap[i].srcType == "WTDR18X")
// return modual.eModualType.WTDR18X;
//else if(cControlMap.chMap[i].srcType == "WTDR78C")
// return modual.eModualType.WTDR78C;
//else if(cControlMap.chMap[i].srcType == "WTDR66C")
// return modual.eModualType.WTDR66C;
return modual.eModualType.IDLE; return modual.eModualType.IDLE;
} }
private static void vFindChannelMap(string stContrID, string stChannelName, bool bControlValue,ref ModualCntrol cModualCntrol) private static void vFindChannelMap(string stContrID, string stChannelName, bool bControlValue,ref ModualCntrol cModualCntrol)
{ {
bool bHadRef = false;
if (bControlValue == true)
{
cModualCntrol.bOpenMachine = true;
}
for (int i = 0; i < cControlMap.chMap.Count; i++) for (int i = 0; i < cControlMap.chMap.Count; i++)
{ {
if (cControlMap.chMap[i].srcId == stContrID) if (cControlMap.chMap[i].srcId == stContrID)
{ {
bHadRef = true;
if (cControlMap.chMap[i].srcCh == stChannelName && cControlMap.chMap[i].dstCh.Count != 0) if (cControlMap.chMap[i].srcCh == stChannelName && cControlMap.chMap[i].dstCh.Count != 0)
{ {
if (cControlMap.chMap[i].opType == "durOp")
{
cModualCntrol.usDurationTime = 1;
cModualCntrol.ulStartTime = 0xFF;
}
for (int j = 0; j < cControlMap.chMap[i].dstCh.Count; j++) for (int j = 0; j < cControlMap.chMap[i].dstCh.Count; j++)
{ {
for (int k = 0; k < 8; k++) for (int k = 0; k < 8; k++)
...@@ -524,14 +567,36 @@ namespace ModbusDemo.MessageFormat ...@@ -524,14 +567,36 @@ namespace ModbusDemo.MessageFormat
string str = "d" + k.ToString(); string str = "d" + k.ToString();
if (cControlMap.chMap[i].dstCh[j] == str) if (cControlMap.chMap[i].dstCh[j] == str)
{ {
cModualCntrol.bControlData[k] = bControlValue; if (cControlMap.chMap[i].dstCh.Count == 3)
{
if (j == 0)
{
cModualCntrol.bControlData[k] = bControlValue;
}
else if (j == 1)
{
cModualCntrol.bControlData[k] = true;
}
else if (j == 2)
{
cModualCntrol.bControlData[k] = !bControlValue;
}
else
{
cModualCntrol.bControlData[k] = bControlValue;
}
}
else if (cControlMap.chMap[i].dstCh.Count == 2)
{
cModualCntrol.bControlData[k] = bControlValue;
}
cModualCntrol.bControlBit[k] = true; cModualCntrol.bControlBit[k] = true;
cModualCntrol.xModualRespControl[k].byResModualID = byte.Parse(cControlMap.chMap[i].resId);
cModualCntrol.xModualRespControl[k].eModualType = eModdusId_Find_ModualType(cControlMap.chMap[i].resId);
cModualCntrol.xModualRespControl[k].stResChannel = cControlMap.chMap[i].resCh;
} }
} }
} }
cModualCntrol.xModualRespControl.byResModualID = byte.Parse(cControlMap.chMap[i].resId);
cModualCntrol.xModualRespControl.eModualType = eModdusId_Find_ModualType(cControlMap.chMap[i].resId);
cModualCntrol.xModualRespControl.stResChannel = cControlMap.chMap[i].resCh;
} }
else else
{ {
...@@ -547,38 +612,41 @@ namespace ModbusDemo.MessageFormat ...@@ -547,38 +612,41 @@ namespace ModbusDemo.MessageFormat
} }
} }
} }
if (bHadRef == false)
{
for (int k = 0; k < 8; k++)
{
string str = "d" + k.ToString();
if (stChannelName == str)
{
cModualCntrol.bControlData[k] = bControlValue;
cModualCntrol.bControlBit[k] = true;
}
}
}
} }
//public static ModbusComm.eModbusErrorCode eOperation_Machine(modual.eModualType eModualType, byte bMoualID, bool[] bControldata,bool[] bControlBit, out bool bControlStatus,ModualRespControl sModualRespControl) //public static ModbusComm.eModbusErrorCode eOperation_Machine(ModualCntrol cModualCntrol, out bool bControlStatus, ModualRespControl sModualRespControl)
//{ //{
// ushort[] usRegData,usRegType;
// ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
// if (sModualRespControl.eModualType == modual.eModualType.WTDR78C)
// {
// double[] dConvertData = new double[8];
// string[] strDoubleString;
// _418X c18xformulasormual = new _418X();
// if ((ModbusErrorCode |= ModbusComm.Modbus_WriteMultipleCoils(bMoualID, 16, bControldata)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
// {
// for (int i = 0; i < 8; i++)
// {
// ModualPoll.cx18x.sX18xAlarmstruct
// }
// }
// ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegData, bMoualID, 0, 8);
// ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegType, bMoualID, 10,8);
// strDoubleString = c18xformulasormual.Value(usRegData, usRegType);
// for (int i = 0; i < 8; i++)
// {
// dConvertData[i] = double.Parse(strDoubleString[i]);
// }
// }
//} //}
public static void vDelete_Same_Control(ModualCntrol cModualCntrol)
{
for (sbyte i = 0; i < liModuualControl.Count; i++)
{
if (liModuualControl[i].sbModbusID == cModualCntrol.sbModbusID)
{
if (Enumerable.SequenceEqual(liModuualControl[i].bControlBit, cModualCntrol.bControlBit))
{
liModuualControl.Remove(liModuualControl[i]);
}
}
}
}
public static void vPoolLevelParse(string stConfigString, out string stResponseStrign) public static void vPoolLevelParse(string stConfigString, out string stResponseStrign)
{ {
pcCfgRoot cCfgRoot = new pcCfgRoot(); pcCfgRoot cCfgRoot = new pcCfgRoot();
...@@ -589,23 +657,24 @@ namespace ModbusDemo.MessageFormat ...@@ -589,23 +657,24 @@ namespace ModbusDemo.MessageFormat
jsonObj = JObject.Parse(stConfigString); jsonObj = JObject.Parse(stConfigString);
for (int i = 0; i < cCfgRoot.ss.Count; i++) for (int i = 0; i < cCfgRoot.ss.Count; i++)
{ {
string strChannelString = "d" + i.ToString();
pcLiquidLevelConfig cLiquidLevelConfig = new pcLiquidLevelConfig pcLiquidLevelConfig cLiquidLevelConfig = new pcLiquidLevelConfig
{ {
byModbusID = byte.Parse(cCfgRoot.ss[i].addr), byModbusID = byte.Parse(cCfgRoot.ss[i].addr),
dUpLevel = double.Parse(cCfgRoot.ss[i].cfg.upper), dUpLevel = double.Parse(cCfgRoot.ss[i].cfg.upper),
dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down) dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down)
}; };
if (jsonObj["ss"][i]["cfg"][strChannelString] != null) string strChannelString = "d" + i.ToString();
{ for (int j = 0; j < 8; j++)
cLiquidLevelConfig.stChannelNumber = strChannelString;
jsonObj["ss"][i]["cfg"][strChannelString] = 1;
}
else
{ {
jsonObj["ss"][i]["cfg"][strChannelString] = 0;
continue; if (jsonObj["ss"][i]["cfg"].Value<string>("name") == strChannelString)
{
cLiquidLevelConfig.stChannelNumber = strChannelString;
jsonObj["ss"][i]["cfg"][strChannelString] = 1;
break;
}
} }
if (jsonObj["ss"][i]["cfg"]["ts"] != null) if (jsonObj["ss"][i]["cfg"]["ts"] != null)
{ {
jsonObj["ss"][i]["cfg"]["ts"] = Form1.GetTimeStamp(); jsonObj["ss"][i]["cfg"]["ts"] = Form1.GetTimeStamp();
......
...@@ -13,30 +13,30 @@ using ModbusDemo; ...@@ -13,30 +13,30 @@ using ModbusDemo;
namespace ModbusDemo.Modular namespace ModbusDemo.Modular
{ {
class ModualPoll class ModualPoll
{ {
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX14pNumber = 1; public const byte byX14pNumber = 1;
public static byte[] byX14pIdlist = {27}; public static byte[] byX14pIdlist = { 27 };
private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }}; private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null } };
#else #else
public const byte byX14pNumber = 2; public const byte byX14pNumber = 2;
public static byte[] byX14pIdlist = { 1,17}; public static byte[] byX14pIdlist = { 1,17};
private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }, { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }}; private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }, { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }};
#endif #endif
private const byte byX14pReadDataStartAddress = 0; private const byte byX14pReadDataStartAddress = 0;
public const byte byX14pReadDataNumber = 4; public const byte byX14pReadDataNumber = 4;
private const byte byX14pReadTypeStartAddress = 10; private const byte byX14pReadTypeStartAddress = 10;
private const byte byX14pReadTypeNumber = 4; private const byte byX14pReadTypeNumber = 4;
public const double dX14pMinCovertData = 0; public const double dX14pMinCovertData = 0;
public const double dx14pMaxConverData = 60; public const double dx14pMaxConverData = 60;
public const ushort us14pMaxJumTemper = 10; public const ushort us14pMaxJumTemper = 10;
public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist, sX14pChannelType); public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist, sX14pChannelType);
public static _414P c14formulasormual = new _414P(); public static _414P c14formulasormual = new _414P();
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX18xNumber = 1; public const byte byX18xNumber = 1;
public static byte[] byX18xIdlist = {13}; public static byte[] byX18xIdlist = { 13 };
private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null }}; private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { modual.eX18xSensorChannelType.Mike_6, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null, modual.eX18xSensorChannelType.Null } };
#else #else
public const byte byX18xNumber = 6; public const byte byX18xNumber = 6;
public static byte[] byX18xIdlist = {3,53,6,12,21,25}; public static byte[] byX18xIdlist = {3,53,6,12,21,25};
...@@ -47,46 +47,46 @@ namespace ModbusDemo.Modular ...@@ -47,46 +47,46 @@ namespace ModbusDemo.Modular
{modual.eX18xSensorChannelType.Mike_5,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //沉砂池 ID 12 {modual.eX18xSensorChannelType.Mike_5,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //沉砂池 ID 12
{modual.eX18xSensorChannelType.Mike_6,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}}; //匀浆池 ID 25 {modual.eX18xSensorChannelType.Mike_6,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}}; //匀浆池 ID 25
#endif #endif
private const byte byX18xReadDataStartAddress = 0; private const byte byX18xReadDataStartAddress = 0;
public const byte byX18xReadDataNumber = 8; public const byte byX18xReadDataNumber = 8;
private const byte byX18xReadTypeStartAddress = 10; private const byte byX18xReadTypeStartAddress = 10;
private const byte byX18xReadTypeNumber = 8; private const byte byX18xReadTypeNumber = 8;
public const double dX18xMinConvertData = 0; public const double dX18xMinConvertData = 0;
public const double dX18xMaxConvertData = 80; public const double dX18xMaxConvertData = 80;
private const ushort dX18xMaxJumpData = 2; private const ushort dX18xMaxJumpData = 2;
public static modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType); public static modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType);
private static _418X c18xformulasormual = new _418X(); private static _418X c18xformulasormual = new _418X();
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX78cNumber = 1; public const byte byX78cNumber = 1;
public static byte[] byX78cIdlist = {20}; public static byte[] byX78cIdlist = { 20 };
#else #else
public const byte byX78cNumber = 0; public const byte byX78cNumber = 0;
public static byte[] byX78cIdlist = {11,20,33,34,55,56}; public static byte[] byX78cIdlist = {11,20,33,34,55,56};
#endif #endif
private const byte byX78cInputRegStartAddress = 0; private const byte byX78cInputRegStartAddress = 0;
public const byte byX78cInputRegNumber = 8; public const byte byX78cInputRegNumber = 8;
private const byte byX78cOutputRegStartAddress = 16; private const byte byX78cOutputRegStartAddress = 16;
public const byte byX78cOutputRegNumber = 8; public const byte byX78cOutputRegNumber = 8;
public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist); public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist);
#if DEBUG_TEST #if DEBUG_TEST
public const byte byX66cNumber = 5; public const byte byX66cNumber = 5;
public static byte[] byX66cIdlist = {16,31,35,39,90}; public static byte[] byX66cIdlist = { 16, 31, 35, 39, 90 };
#else #else
public const byte byX66cNumber = 32; public const byte byX66cNumber = 32;
public static byte[] byX66cIdlist = {4,5,7,8,9,10,14,15,19,22,23,24,26,30,32,36,37,38,40,41,42,43,44,46,47,48,49,50,51,52,54,57}; public static byte[] byX66cIdlist = {4,5,7,8,9,10,14,15,19,22,23,24,26,30,32,36,37,38,40,41,42,43,44,46,47,48,49,50,51,52,54,57};
#endif #endif
private const byte byX66cRelayRegStartAddress = 16; private const byte byX66cRelayRegStartAddress = 16;
public const byte byX66cRelayRegNumber = 6; public const byte byX66cRelayRegNumber = 6;
public static modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist); public static modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist);
public const byte COMMFAILALARM = 3; public const byte COMMFAILALARM = 3;
public static void vAllNodePoll() public static void vAllNodePoll()
{ {
for (byte i = 0; i < byX14pNumber; i++) for (byte i = 0; i < byX14pNumber; i++)
{ {
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR; ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
string[][] sTempString = new string[byX14pNumber][]; string[][] sTempString = new string[byX14pNumber][];
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.byModbusID[i], byX14pReadDataStartAddress, byX14pReadDataNumber); ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.byModbusID[i], byX14pReadDataStartAddress, byX14pReadDataNumber);
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegType, cx14P.byModbusID[i], byX14pReadTypeStartAddress, byX14pReadTypeNumber); ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegType, cx14P.byModbusID[i], byX14pReadTypeStartAddress, byX14pReadTypeNumber);
...@@ -115,18 +115,18 @@ namespace ModbusDemo.Modular ...@@ -115,18 +115,18 @@ namespace ModbusDemo.Modular
switch (cx14P.eChannelType[i, j]) switch (cx14P.eChannelType[i, j])
{ {
case modual.eX14pSensorChannelType.Normal: case modual.eX14pSensorChannelType.Normal:
cx14P.sX14pDataStruct[i].dNowConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j]; cx14P.sX14pDataStruct[i].dNowConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j];
break; break;
case modual.eX14pSensorChannelType.Null: case modual.eX14pSensorChannelType.Null:
cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0; cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0;
break; break;
} }
} }
else else
{ {
cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0; cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0;
} }
if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true && sX14pChannelType[i,j] != modual.eX14pSensorChannelType.Null) if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true && sX14pChannelType[i, j] != modual.eX14pSensorChannelType.Null)
{ {
if (cx14P.sX14pDataStruct[i].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper || cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper) if (cx14P.sX14pDataStruct[i].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper || cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper)
{ {
...@@ -173,39 +173,39 @@ namespace ModbusDemo.Modular ...@@ -173,39 +173,39 @@ namespace ModbusDemo.Modular
cx18x.sX18xAlarmstruct[i].usCommFailTimes[j] = 0; cx18x.sX18xAlarmstruct[i].usCommFailTimes[j] = 0;
} }
} }
for (byte j = 0; j < byX18xReadTypeNumber ; j++) for (byte j = 0; j < byX18xReadTypeNumber; j++)
{ {
if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{ {
switch (cx18x.beChannelType[i, j]) switch (cx18x.beChannelType[i, j])
{ {
case modual.eX18xSensorChannelType.Weiertai: case modual.eX18xSensorChannelType.Weiertai:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 8 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 8); cx18x.sX18xDataStruct[i].dNowConvertData[j] = 8 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 8);
break; break;
case modual.eX18xSensorChannelType.Mike_5: case modual.eX18xSensorChannelType.Mike_5:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 5 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 5); cx18x.sX18xDataStruct[i].dNowConvertData[j] = 5 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 5);
break; break;
case modual.eX18xSensorChannelType.Mike_6: case modual.eX18xSensorChannelType.Mike_6:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 6 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 6); cx18x.sX18xDataStruct[i].dNowConvertData[j] = 6 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 6);
break; break;
case modual.eX18xSensorChannelType.Mike_7: case modual.eX18xSensorChannelType.Mike_7:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 7 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 7); cx18x.sX18xDataStruct[i].dNowConvertData[j] = 7 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 7);
break; break;
case modual.eX18xSensorChannelType.NormalCurrent: case modual.eX18xSensorChannelType.NormalCurrent:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]); cx18x.sX18xDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]);
break; break;
case modual.eX18xSensorChannelType.Null: case modual.eX18xSensorChannelType.Null:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0; cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0;
break; break;
default: default:
break; break;
} }
} }
else else
{ {
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0; cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0;
} }
if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true && sX18xChannelType[i,j] != modual.eX18xSensorChannelType.Null) if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true && sX18xChannelType[i, j] != modual.eX18xSensorChannelType.Null)
{ {
if (cx18x.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData) if (cx18x.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData)
{ {
...@@ -231,14 +231,14 @@ namespace ModbusDemo.Modular ...@@ -231,14 +231,14 @@ namespace ModbusDemo.Modular
for (byte i = 0; i < byX78cNumber; i++) for (byte i = 0; i < byX78cNumber; i++)
{ {
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR; ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out cx78c.sX78cRegStatusStruct[i].bInputRegStatus, cx78c.byModbusID[i], byX78cInputRegStartAddress, byX78cInputRegNumber); ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out cx78c.sX78cRegStatusStruct[i].bInputRegStatus, cx78c.byModbusID[i], byX78cInputRegStartAddress, byX78cInputRegNumber);
ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus, cx78c.byModbusID[i], byX78cOutputRegStartAddress, byX78cOutputRegNumber); ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus, cx78c.byModbusID[i], byX78cOutputRegStartAddress, byX78cOutputRegNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{ {
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++) for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{ {
cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError; cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
cx78c.sX78cAlarmStruct[i].usCommFailTimes[j] ++; cx78c.sX78cAlarmStruct[i].usCommFailTimes[j]++;
} }
} }
else else
...@@ -246,7 +246,7 @@ namespace ModbusDemo.Modular ...@@ -246,7 +246,7 @@ namespace ModbusDemo.Modular
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++) for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{ {
cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError; cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
cx78c.sX78cAlarmStruct[i].usCommFailTimes[j] = 0; cx78c.sX78cAlarmStruct[i].usCommFailTimes[j] = 0;
} }
} }
} }
...@@ -254,13 +254,13 @@ namespace ModbusDemo.Modular ...@@ -254,13 +254,13 @@ namespace ModbusDemo.Modular
for (byte i = 0; i < byX66cNumber; i++) for (byte i = 0; i < byX66cNumber; i++)
{ {
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR; ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
ModbusErrorCode = ModbusComm.Modbus_ReadCoilsTask(out cx66c.sX66cRegStatusStruct[i].bRegRelayStatus, cx66c.byModbusID[i], byX66cRelayRegStartAddress, byX66cRelayRegNumber); ModbusErrorCode = ModbusComm.Modbus_ReadCoilsTask(out cx66c.sX66cRegStatusStruct[i].bRegRelayStatus, cx66c.byModbusID[i], byX66cRelayRegStartAddress, byX66cRelayRegNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{ {
for (sbyte j = 0; j < byX66cRelayRegNumber; j++) for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{ {
cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError; cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
cx66c.sX66cAlarmStruct[i].usCommFailTimes[j] ++; cx66c.sX66cAlarmStruct[i].usCommFailTimes[j]++;
} }
} }
else else
...@@ -293,10 +293,10 @@ namespace ModbusDemo.Modular ...@@ -293,10 +293,10 @@ namespace ModbusDemo.Modular
{ {
string stIdString = cx78c.byModbusID[i].ToString(); string stIdString = cx78c.byModbusID[i].ToString();
_478C cBoolConvertInt = new _478C(); _478C cBoolConvertInt = new _478C();
int[] InputConvert,OutPutConver; int[] InputConvert, OutPutConver;
InputConvert = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bInputRegStatus); InputConvert = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bInputRegStatus);
OutPutConver = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus); OutPutConver = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bOutPutRegStatus);
WTDR78C OneNodeJsonPackage = new WTDR78C(stIdString, InputConvert[0], InputConvert[1],InputConvert[2], InputConvert[3], InputConvert[4], InputConvert[5],InputConvert[6], InputConvert[7], OutPutConver[0], OutPutConver[1], OutPutConver[2], OutPutConver[3], OutPutConver[4], OutPutConver[5], OutPutConver[6], OutPutConver[7],Form1.GetTimeStamp()); WTDR78C OneNodeJsonPackage = new WTDR78C(stIdString, InputConvert[0], InputConvert[1], InputConvert[2], InputConvert[3], InputConvert[4], InputConvert[5], InputConvert[6], InputConvert[7], OutPutConver[0], OutPutConver[1], OutPutConver[2], OutPutConver[3], OutPutConver[4], OutPutConver[5], OutPutConver[6], OutPutConver[7], Form1.GetTimeStamp());
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ","; stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ",";
} }
...@@ -307,7 +307,7 @@ namespace ModbusDemo.Modular ...@@ -307,7 +307,7 @@ namespace ModbusDemo.Modular
int[] sRelayConvert; int[] sRelayConvert;
sRelayConvert = cBoolConvertInt.IO(cx66c.sX66cRegStatusStruct[i].bRegRelayStatus); sRelayConvert = cBoolConvertInt.IO(cx66c.sX66cRegStatusStruct[i].bRegRelayStatus);
WTDR66C OneNodeJsonPackage = new WTDR66C(stIdString, sRelayConvert[0], sRelayConvert[1], sRelayConvert[2], sRelayConvert[3], sRelayConvert[4], sRelayConvert[5], Form1.GetTimeStamp()); WTDR66C OneNodeJsonPackage = new WTDR66C(stIdString, sRelayConvert[0], sRelayConvert[1], sRelayConvert[2], sRelayConvert[3], sRelayConvert[4], sRelayConvert[5], Form1.GetTimeStamp());
if (i >= byX66cNumber -1) if (i >= byX66cNumber - 1)
{ {
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + "]"; stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + "]";
return stPollString; return stPollString;
...@@ -324,7 +324,7 @@ namespace ModbusDemo.Modular ...@@ -324,7 +324,7 @@ namespace ModbusDemo.Modular
for (byte i = 0; i < byX14pNumber; i++) for (byte i = 0; i < byX14pNumber; i++)
{ {
bool bX14pError = false; bool bX14pError = false;
List<ushort> usChannelErrorlist = new List<ushort>(); List<ushort> usChannelErrorlist = new List<ushort>();
List<ushort> usChannelErrorCodeList = new List<ushort>(); List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX14pReadDataNumber; j++) for (byte j = 0; j < byX14pReadDataNumber; j++)
{ {
...@@ -344,7 +344,7 @@ namespace ModbusDemo.Modular ...@@ -344,7 +344,7 @@ namespace ModbusDemo.Modular
if (bX14pError == true) if (bX14pError == true)
{ {
ushort[] usChannelList = usChannelErrorlist.ToArray(); ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray(); ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSetAlarmList(cx14P.byModbusID[i], usChannelList, usCodeList); ModualAlarm.vSetAlarmList(cx14P.byModbusID[i], usChannelList, usCodeList);
} }
} }
...@@ -363,7 +363,7 @@ namespace ModbusDemo.Modular ...@@ -363,7 +363,7 @@ namespace ModbusDemo.Modular
{ {
bX18xError = true; bX18xError = true;
bOccurErrorChange = true; bOccurErrorChange = true;
usChannelErrorlist.Add (j); usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]); usChannelErrorCodeList.Add((ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]);
} }
cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]; cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j];
...@@ -418,7 +418,7 @@ namespace ModbusDemo.Modular ...@@ -418,7 +418,7 @@ namespace ModbusDemo.Modular
if (cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] != cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j]) if (cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] != cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j])
{ {
bOccurErrorChange = true; bOccurErrorChange = true;
bX66cError = true; bX66cError = true;
usChannelErrorlist.Add(j); usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j]); usChannelErrorCodeList.Add((ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j]);
} }
...@@ -437,5 +437,224 @@ namespace ModbusDemo.Modular ...@@ -437,5 +437,224 @@ namespace ModbusDemo.Modular
await ModualAlarm.vPublishAlarmPackageJson(mqttClient); await ModualAlarm.vPublishAlarmPackageJson(mqttClient);
} }
} }
public static ArrayList arryGet_channel_Value(byte byModbusID, out bool bGetStatus, params string[] strChannelList)
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
bGetStatus = true;
ArrayList arrayList = new ArrayList();
ushort[] usRegValue, usRegType;
string[] strCalculData;
for (int i = 0; i < strChannelList.Count(); i++)
{
arrayList.Add(0);
}
for (int i = 0; i < ModualPoll.byX18xNumber; i++)
{
if (byModbusID == ModualPoll.cx18x.byModbusID[i])
{
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegValue, byModbusID, byX18xReadDataStartAddress, byX18xReadDataNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegType, byModbusID, byX18xReadTypeStartAddress, byX18xReadTypeNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
strCalculData = c18xformulasormual.Value(usRegValue, usRegType);
for (int j = 0; j < strChannelList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string str = "d" + k.ToString();
if (str == strChannelList[j])
{
switch (cx18x.beChannelType[i, j])
{
case modual.eX18xSensorChannelType.Weiertai:
arrayList.Add(8 - ((double.Parse(strCalculData[k]) - 4) / 16 * 8));
break;
case modual.eX18xSensorChannelType.Mike_5:
arrayList.Add(5 - ((double.Parse(strCalculData[k]) - 4) / 16 * 5));
break;
case modual.eX18xSensorChannelType.Mike_6:
arrayList.Add(6 - ((double.Parse(strCalculData[k]) - 4) / 16 * 6));
break;
case modual.eX18xSensorChannelType.Mike_7:
arrayList.Add(7 - ((double.Parse(strCalculData[k]) - 4) / 16 * 7));
break;
case modual.eX18xSensorChannelType.NormalCurrent:
arrayList.Add(double.Parse(strCalculData[k]));
break;
case modual.eX18xSensorChannelType.Null:
arrayList.Add(0);
break;
default:
break;
}
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX14pNumber; i++)
{
if (byModbusID == ModualPoll.cx14P.byModbusID[i])
{
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegValue, byModbusID, byX14pReadDataStartAddress, byX14pReadDataNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out usRegType, byModbusID, byX14pReadTypeStartAddress, byX14pReadTypeNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
strCalculData = c14formulasormual.RtdValue(usRegValue, usRegType);
for (int j = 0; j < strChannelList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string str = "d" + k.ToString();
if (str == strChannelList[j])
{
arrayList.Add(double.Parse(strCalculData[k]));
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX78cNumber; i++)
{
bool[] bInputData, bOutPutData;
if (byModbusID == ModualPoll.cx78c.byModbusID[i])
{
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bInputData, byModbusID, byX78cInputRegStartAddress, byX78cInputRegNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bOutPutData, byModbusID, byX78cOutputRegStartAddress, byX78cOutputRegNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
for (int j = 0; j < strChannelList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string str = "d" + k.ToString();
if (str == strChannelList[j])
{
arrayList.Add(bInputData[j]);
}
}
for (int k = 8; k < 16; k++)
{
string str = "d" + k.ToString();
if (str == strChannelList[j])
{
arrayList.Add(bOutPutData[j]);
}
}
}
}
}
for (int i = 0; i < ModualPoll.byX66cNumber; i++)
{
if (byModbusID == ModualPoll.cx66c.byModbusID[i])
{
bool[] bRelayValue;
if ((ModbusErrorCode |= ModbusComm.Modbus_ReadCoilsTask(out bRelayValue, byModbusID, byX66cRelayRegStartAddress, byX66cRelayRegNumber)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bGetStatus = false;
}
for (int j = 0; j < strChannelList.Count(); j++)
{
for (int k = 0; k < 8; k++)
{
string str = "d" + k.ToString();
if (str == strChannelList[j])
{
arrayList.Add(bRelayValue[j]);
}
}
}
}
}
return arrayList;
}
public static void vSet_All_Channel_Value(byte byModbusID, bool[] bControlData,out bool bControlStatus)
{
bControlStatus = true;
for (int i = 0; i < ModualPoll.byX14pNumber; i++)
{
if (byModbusID == ModualPoll.cx14P.byModbusID[i])
{
if ((ModbusComm.Modbus_WriteMultipleCoils(byModbusID, byX66cRelayRegStartAddress, bControlData)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bControlStatus = false;
}
}
}
for (int i = 0; i < ModualPoll.byX78cNumber; i++)
{
if (byModbusID == ModualPoll.cx78c.byModbusID[i])
{
if ((ModbusComm.Modbus_WriteMultipleCoils(byModbusID, byX78cOutputRegStartAddress, bControlData)) == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, false, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
}
else
{
ModualAlarm.vSet_Modual_Alarm(byModbusID, (ushort)ModbusComm.eModbusErrorCode.MB_EMASTERNOERR, true, 1, "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7");
bControlStatus = false;
}
}
}
}
} }
} }
...@@ -152,7 +152,7 @@ namespace ModbusDemo ...@@ -152,7 +152,7 @@ namespace ModbusDemo
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(mqttBackTopic) .WithTopic(mqttBackTopic)
.WithPayload(mqttData_Back) .WithPayload(mqttData_Back)
.WithAtMostOnceQoS() .WithAtLeastOnceQoS()
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
...@@ -168,7 +168,6 @@ namespace ModbusDemo ...@@ -168,7 +168,6 @@ namespace ModbusDemo
.WithRetainFlag(false) .WithRetainFlag(false)
.Build(); .Build();
await mqttClient.PublishAsync(message); await mqttClient.PublishAsync(message);
totxt.Log("我在247,执行了Back");
} }
private async Task Subscribe() private async Task Subscribe()
{ {
...@@ -383,7 +382,7 @@ namespace ModbusDemo ...@@ -383,7 +382,7 @@ namespace ModbusDemo
private void Sendout() private void Sendout()
{ {
Control.CheckForIllegalCrossThreadCalls = false; Control.CheckForIllegalCrossThreadCalls = false;
MQTTTimer.Interval = 60000;//120500 MQTTTimer.Interval = 20000;//120500
MQTTTimer.Enabled = true; MQTTTimer.Enabled = true;
MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
MQTTTimer.Start(); MQTTTimer.Start();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment