Commit 99e950f7 authored by leon.huang's avatar leon.huang

add modual Alarm

parent 1dfb305f
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using MQTTnet;
using MQTTnet.Client;
using Newtonsoft.Json;
namespace ModbusDemo.Common
{
public class ModualAlarm
{
public const ushort usChannelNumber = 8;
private const string sAlarmTopic = "Witium/WTDS78X/20193261/Alarm";
public Hashtable hMqtttAlarmMap = new Hashtable();
public bool bErrorHasSend = false;
private string sAlarmJson;
private string sAlarmJsonPackage;
//private IMqttClient mqttClient = null;
public enum eAlarmCode : sbyte
{
ChannelNoError = 0,
ChannelCommunError = 1,
ChannelCollectDataError = 2,
ChannelDataRespError = 4,
ChannelDataChangeError = 8
}
public void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode)
{
ushort i = 0;
hMqtttAlarmMap.Add("addr", usAddress.ToString());
string sAlarm = "alm";
foreach (ushort usdata in usChannelAlarmcode)
{
hMqtttAlarmMap.Add(sAlarm + i, usChannelAlarmcode[i]);
i++;
}
hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp());
sAlarmJson = JsonConvert.SerializeObject(hMqtttAlarmMap);
}
public async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{
sAlarmJson = "[" + sAlarmJson + "]";
var message = new MqttApplicationMessageBuilder()
.WithTopic(sAlarmTopic)
.WithPayload(sAlarmJson)
.WithAtMostOnceQoS()
.WithRetainFlag(false)
.Build();
await mqttClient.PublishAsync(message);
}
}
}
......@@ -30,8 +30,9 @@ namespace ModbusDemo.MessageFormat
}
public static ModbusMaster Modbus;
public static ushort usCommunFailTimes = 0;
public static void Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out eModbusErrorCode ModbusErrorCode)
public static eModbusErrorCode Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
eModbusErrorCode ModbusErrorCode;
try
{
OutputValue = Modbus.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
......@@ -108,9 +109,11 @@ namespace ModbusDemo.MessageFormat
OutputValue = new ushort[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out eModbusErrorCode ModbusErrorCode)
public static eModbusErrorCode Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
eModbusErrorCode ModbusErrorCode;
try
{
OutputValue = Modbus.ReadCoils(slaveAddress, startAddress, numberOfPoints);
......@@ -187,9 +190,11 @@ namespace ModbusDemo.MessageFormat
OutputValue = new bool[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value, out eModbusErrorCode ModbusErrorCode)
public static eModbusErrorCode Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value)
{
eModbusErrorCode ModbusErrorCode;
try
{
Modbus.WriteMultipleCoils(slaveAddress, startAddress, value);
......@@ -263,9 +268,11 @@ namespace ModbusDemo.MessageFormat
}
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data, out eModbusErrorCode ModbusErrorCode)
public static eModbusErrorCode Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data)
{
eModbusErrorCode ModbusErrorCode;
try
{
Modbus.WriteMultipleCoils(slaveAddress, startAddress, data);
......@@ -339,6 +346,7 @@ namespace ModbusDemo.MessageFormat
}
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
//private void Init_Read_data()
//{
......
......@@ -225,46 +225,5 @@ namespace ModbusDemo
}
}
public class pcDeviceAlarm
{
public const ushort usChannelNumber = 8;
private const string sAlarmTopic = "Witium/WTDS78X/20193261/Alarm";
public Hashtable hMqtttAlarmMap = new Hashtable();
public bool bErrorHasSend = false;
private string sAlarmJson;
private string sAlarmJsonPackage;
//private IMqttClient mqttClient = null;
public enum eAlarmCode : sbyte
{
ChannelNoError = 0,
ChannelCommunError = 1,
ChannelCollectDataError = 2,
ChannelDataRespError = 4,
ChannelDataChangeError = 8
}
public void vSetAlarmList(ushort usAddress, ushort[] usChannel, eAlarmCode[] usChannelAlarmcode)
{
ushort i = 0;
hMqtttAlarmMap.Add("addr", usAddress.ToString());
string sAlarm = "alm";
foreach (ushort usdata in usChannelAlarmcode)
{
hMqtttAlarmMap.Add(sAlarm + i, usChannelAlarmcode[i]);
i++;
}
hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp());
sAlarmJson = JsonConvert.SerializeObject(hMqtttAlarmMap);
}
public async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{
sAlarmJson = "[" + sAlarmJson + "]";
var message = new MqttApplicationMessageBuilder()
.WithTopic(sAlarmTopic)
.WithPayload(sAlarmJson)
.WithAtMostOnceQoS()
.WithRetainFlag(false)
.Build();
await mqttClient.PublishAsync(message);
}
}
}
......@@ -74,9 +74,8 @@
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="nmodbuspc, Version=1.12.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>bin\Debug\nmodbuspc.dll</HintPath>
<Reference Include="NModbus4, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
......@@ -93,6 +92,7 @@
<Compile Include="application\PoolModbusSet.cs" />
<Compile Include="application\ModbusToPool.cs" />
<Compile Include="application\Pond.cs" />
<Compile Include="Common\ModualAlarm.cs" />
<Compile Include="MessageFormat\ModbusComm.cs" />
<Compile Include="Modular\414P.cs" />
<Compile Include="Modular\478C.cs" />
......@@ -164,20 +164,6 @@
</ItemGroup>
<ItemGroup />
<ItemGroup />
<ItemGroup Condition="$(VisualStudioVersion) == '15.0'">
<Reference Include="Microsoft.Data.Tools.Schema.Sql, Version=13.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>$(SSDTPath)\Microsoft.Data.Tools.Schema.Sql.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Tools.Schema.Sql.UnitTesting, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>$(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Tools.Schema.Sql.UnitTestingAdapter, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>$(SSDTUnitTestPath)\Microsoft.Data.Tools.Schema.Sql.UnitTestingAdapter.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<SsdtUnitTestVersion>3.1</SsdtUnitTestVersion>
......
......@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
namespace ModbusDemo.Modular
{
class ModualPoll
......@@ -13,6 +14,10 @@ namespace ModbusDemo.Modular
const byte byX14pReadDataNumber = 4;
const byte byX14pReadTypeStartAddress = 10;
const byte byX14pReadTypeNumber = 4;
const double dX14pMinCovertData = 0;
const double dx14pMaxConverData = 60;
const ushort us14pMaxJumTemper = 10;
static byte[] byX14pIdlist = {17,28,29};
modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist);
_414P c14formulasormual = new _414P();
......@@ -22,6 +27,9 @@ namespace ModbusDemo.Modular
const byte byX18xReadDataNumber = 8;
const byte byX18xReadTypeStartAddress = 10;
const byte byX18xReadTypeNumber = 8;
const double dX18xMinConvertData = 0;
const ushort dX18xMaxJumpData = 2;
static byte[] byX18xIdlist = {12,13,21,25,45,53};
static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber,byX18xReadDataNumber]{{modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal},
{modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal},
......@@ -52,39 +60,149 @@ namespace ModbusDemo.Modular
{
for (byte i = 0; i < byX14pNumber; i++)
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
string[][] sTempString = new string[byX14pNumber][];
ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.byModbusID[i], byX14pReadDataStartAddress, byX14pReadDataNumber, out cx14P.ModbusErrorCode[i]);
ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegType, cx14P.byModbusID[i], byX14pReadTypeStartAddress, byX14pReadTypeNumber, out cx14P.ModbusErrorCode[i]);
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);
sTempString[i] = c14formulasormual.RtdValue(cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.sX14pDataStruct[i].usX14pRegType);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (byte j = 0; j < byX14pReadTypeNumber; j++)
{
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (byte j = 0; j < byX14pReadTypeNumber; j++)
{
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
for (byte j = 0; j < byX14pReadTypeNumber; j++)
{
cx14P.sX14pDataStruct[i].dX14pConvertData[j] = double.Parse(sTempString[i][j]);
cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] = double.Parse(sTempString[i][j]);
//if (cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] <= dX14pMinCovertData || cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] >= dx14pMaxConverData )
//{
// cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCollectDataError;
//}
if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true)
{
if (cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] - cx14P.sX14pDataStruct[i].dX14pBeforeConvertData[j] >= us14pMaxJumTemper && cx14P.sX14pDataStruct[i].dX14pBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] >= us14pMaxJumTemper)
{
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
else
{
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
}
cx14P.sX14PAlarmStruct[i].eBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j];
}
cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true;
}
for (byte i = 0; i < byX18xNumber; i++)
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
string[][] sTempString = new string[byX18xNumber][];
ModbusComm.Modbus_ReadHoldingRegistersTask(out cx18x.sX18xDataStruct[i].usRegData, cx18x.byModbusID[i], byX18xReadDataStartAddress, byX18xReadDataNumber, out cx18x.ModbusErrorCode[i]);
ModbusComm.Modbus_ReadHoldingRegistersTask(out cx18x.sX18xDataStruct[i].usTypeData,cx18x.byModbusID[i], byX18xReadTypeStartAddress, byX18xReadTypeNumber, out cx18x.ModbusErrorCode[i]);
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx18x.sX18xDataStruct[i].usRegData, cx18x.byModbusID[i], byX18xReadDataStartAddress, byX18xReadDataNumber);
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx18x.sX18xDataStruct[i].usTypeData, cx18x.byModbusID[i], byX18xReadTypeStartAddress, byX18xReadTypeNumber);
sTempString[i] = c18xformulasormual.Value(cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.sX14pDataStruct[i].usX14pRegType);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] |= ~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
for (byte j = 0; j < byX18xReadTypeNumber; j++)
{
if(cx18x.sX18xDataStruct[i].eChannelType[j] == modual.eX18xSensorChannelType.Normal)
cx18x.sX18xDataStruct[i].dConvertData[j] = (double.Parse(sTempString[i][j])- 4)/ 16 * 6;
if (cx18x.sX18xDataStruct[i].eChannelType[j] == modual.eX18xSensorChannelType.Normal)
cx18x.sX18xDataStruct[i].dNowConvertData[j] = (double.Parse(sTempString[i][j]) - 4) / 16 * 6;
if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true)
{
if (cx18x.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData)
{
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
else
{
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
}
cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j];
}
cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease = true;
}
for (byte i = 0; i < byX78cNumber; i++)
{
ModbusComm.Modbus_ReadCoilsTask(out cx78c.sx78CRegDataStructStatus[i].bInputRegStatus, cx78c.byModbusID[i], byX78cInputRegStartAddress, byX78cInputRegNumber, out cx78c.ModbusErrorCode[i]);
ModbusComm.Modbus_ReadCoilsTask(out cx78c.sx78CRegDataStructStatus[i].bOutPutRegStatus, cx78c.byModbusID[i], byX78cOutputRegStartAddress, byX78cOutputRegNumber, out cx78c.ModbusErrorCode[i]);
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].bOutPutRegStatus, cx78c.byModbusID[i], byX78cOutputRegStartAddress, byX78cOutputRegNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{
cx78c.sX78cAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{
cx78c.sX78cAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
}
for (byte i = 0; i < byX66cNumber; i++)
{
ModbusComm.Modbus_ReadCoilsTask(out cx66c.sx78CDatastructStatus[i].bOutPutRegStatus, cx66c.byModbusID[i], byX66cRelayRegStartAddress, byX66cRelayRegNumber, out cx66c.ModbusErrorCode[i]);
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
ModbusErrorCode = ModbusComm.Modbus_ReadCoilsTask(out cx66c.sX66cRegStatusStruct[i].bOutPutRegStatus, cx66c.byModbusID[i], byX66cRelayRegStartAddress, byX66cRelayRegNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{
cx66c.sX66cAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{
cx66c.sX66cAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
}
}
void vCheckAlarm()
{
for (byte i = 0; i < byX14pNumber; i++)
{
for (byte j = 0; j < byX14pReadDataNumber; j++)
{
if (cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] != cx14P.sX14PAlarmStruct[i].eBeforeAlarmCode[j])
{
}
}
}
}
}
}
......@@ -4,20 +4,30 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
namespace ModbusDemo.Modular
{
class modual
{
public struct psx14p
public struct psx14pData
{
public ushort[] usX14pRegData;
public ushort[] usX14pRegType;
public double[] dX14pConvertData;
public double[] dX14pNowConvertData;
public double[] dX14pBeforeConvertData;
}
public struct psxModualAlarm
{
public bool bDataNotFirstIncreaseOrDecrease;
public ModualAlarm.eAlarmCode[] eNowAlarmCode;
public ModualAlarm.eAlarmCode[] eBeforeAlarmCode;
}
public class pcx14P
{
public byte[] byModbusID;
public psx14p[] sX14pDataStruct;
public psx14pData[] sX14pDataStruct;
public psxModualAlarm[] sX14PAlarmStruct;
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx14P(byte[] InitIDlist)
{
......@@ -30,17 +40,19 @@ namespace ModbusDemo.Modular
Level,
}
public struct psX18x
public struct psX18xData
{
public ushort[] usRegData;
public ushort[] usTypeData;
public eX18xSensorChannelType[] eChannelType;
public double[] dConvertData;
public double[] dNowConvertData;
public double[] dBeforeConvertData;
}
public class pcx18X
{
public byte[] byModbusID;
public psX18x[] sX18xDataStruct;
public psX18xData[] sX18xDataStruct;
public psxModualAlarm[] sX18xAlarmstruct;
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx18X(byte[] InitIDlist, eX18xSensorChannelType[,] eChannnelType)
{
......@@ -57,12 +69,14 @@ namespace ModbusDemo.Modular
public struct psx78C
{
public bool[] bInputRegStatus;
public bool[] bOutPutRegStatus;
public bool[] bOutPutRegStatus;
public bool bX78cAllChannelAlarm;
}
public class pcx78C
{
public byte[] byModbusID;
public psx78C[] sx78CRegDataStructStatus;
public psx78C[] sX78cRegStatusStruct;
public psxModualAlarm[] sX78cAlarmStruct;
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx78C(byte[] InitIDlist)
{
......@@ -72,11 +86,13 @@ namespace ModbusDemo.Modular
public struct psx66C
{
public bool[] bRegRelayStatus;
public bool[] bX66CAllChannelAlarm;
}
public class pcx66C
{
public byte[] byModbusID;
public psx78C[] sx78CDatastructStatus;
public byte[] byModbusID;
public psx78C[] sX66cRegStatusStruct;
public psxModualAlarm[] sX66cAlarmStruct;
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx66C(byte[] InitIDlist)
{
......
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