Commit ea27c868 authored by leon.huang's avatar leon.huang

modify x18x Convert data

parent 99e950f7
...@@ -18,7 +18,7 @@ namespace ModbusDemo.Common ...@@ -18,7 +18,7 @@ namespace ModbusDemo.Common
private string sAlarmJson; private string sAlarmJson;
private string sAlarmJsonPackage; private string sAlarmJsonPackage;
//private IMqttClient mqttClient = null; //private IMqttClient mqttClient = null;
public enum eAlarmCode : sbyte public enum eAlarmCode : ushort
{ {
ChannelNoError = 0, ChannelNoError = 0,
ChannelCommunError = 1, ChannelCommunError = 1,
...@@ -26,7 +26,7 @@ namespace ModbusDemo.Common ...@@ -26,7 +26,7 @@ namespace ModbusDemo.Common
ChannelDataRespError = 4, ChannelDataRespError = 4,
ChannelDataChangeError = 8 ChannelDataChangeError = 8
} }
public void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode) public void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode,bool bStringIncrease)
{ {
ushort i = 0; ushort i = 0;
hMqtttAlarmMap.Add("addr", usAddress.ToString()); hMqtttAlarmMap.Add("addr", usAddress.ToString());
...@@ -37,11 +37,15 @@ namespace ModbusDemo.Common ...@@ -37,11 +37,15 @@ namespace ModbusDemo.Common
i++; i++;
} }
hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp()); hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp());
sAlarmJson = JsonConvert.SerializeObject(hMqtttAlarmMap); sAlarmJson += JsonConvert.SerializeObject(hMqtttAlarmMap);
if (bStringIncrease == true)
{
sAlarmJson += ",";
}
} }
public async Task vPublishAlarmPackageJson(IMqttClient mqttClient) public async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{ {
sAlarmJson = "[" + sAlarmJson + "]"; sAlarmJson = "[" + sAlarmJson + "]";
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(sAlarmTopic) .WithTopic(sAlarmTopic)
.WithPayload(sAlarmJson) .WithPayload(sAlarmJson)
......
...@@ -21,15 +21,15 @@ namespace ModbusDemo ...@@ -21,15 +21,15 @@ namespace ModbusDemo
{ {
public string addr { get; set; } public string addr { get; set; }
public double d0 { get; set; } public double d0 { get; set; }
public int d1 { get; set; } public double d1 { get; set; }
public int d2 { get; set; } public double d2 { get; set; }
public int d3 { get; set; } public double d3 { get; set; }
public int d4 { get; set; } public double d4 { get; set; }
public int d5 { get; set; } public double d5 { get; set; }
public int d6 { get; set; } public double d6 { get; set; }
public int d7 { get; set; } public double d7 { get; set; }
public UInt64 ts { get; set; } public UInt64 ts { get; set; }
public WTDR18X(string addr, double d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7, UInt64 ts) public WTDR18X(string addr, double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, UInt64 ts)
{ {
this.addr = addr; this.addr = addr;
this.d0 = d0; this.d0 = d0;
...@@ -47,11 +47,11 @@ namespace ModbusDemo ...@@ -47,11 +47,11 @@ namespace ModbusDemo
{ {
public string addr { get; set; } public string addr { get; set; }
public double d0 { get; set; } public double d0 { get; set; }
public int d1 { get; set; } public double d1 { get; set; }
public int d2 { get; set; } public double d2 { get; set; }
public int d3 { get; set; } public double d3 { get; set; }
public UInt64 ts { get; set; } public UInt64 ts { get; set; }
public WTDR14P(string addr, double d0, int d1, int d2, int d3, UInt64 ts) public WTDR14P(string addr, double d0, double d1, double d2, double d3, UInt64 ts)
{ {
this.addr = addr; this.addr = addr;
this.d0 = d0; this.d0 = d0;
...@@ -85,6 +85,51 @@ namespace ModbusDemo ...@@ -85,6 +85,51 @@ namespace ModbusDemo
} }
} }
class WTDR78C
{
public string addr { get; set; }
public int d0 { get; set; }
public int d1 { get; set; }
public int d2 { get; set; }
public int d3 { get; set; }
public int d4 { get; set; }
public int d5 { get; set; }
public int d6 { get; set; }
public int d7 { get; set; }
public int d8 { get; set; }
public int d9 { get; set; }
public int d10{ get; set; }
public int d11 { get; set; }
public int d12 { get; set; }
public int d13 { get; set; }
public int d14 { get; set; }
public int d15 { get; set; }
public UInt64 ts { get; set; }
public WTDR78C(string addr, int d0, int d1, int d2, int d3, int d4, int d5,int d6,int d7,int d8,int d9,int d10,int d11,int d12,int d13,int d14,int d15, UInt64 ts)
{
this.addr = addr;
this.d0 = d0;
this.d1 = d1;
this.d2 = d2;
this.d3 = d3;
this.d4 = d4;
this.d5 = d5;
this.d6 = d6;
this.d7 = d7;
this.d8 = d8;
this.d9 = d9;
this.d10 = d10;
this.d11 = d11;
this.d12 = d12;
this.d13 = d13;
this.d14 = d14;
this.d15 = d15;
this.ts = ts;
}
}
public class Ctrl public class Ctrl
{ {
......
...@@ -60,7 +60,7 @@ namespace ModbusDemo ...@@ -60,7 +60,7 @@ namespace ModbusDemo
users.UserCompany = Strcom[Inputtype[0]];//通道类型 users.UserCompany = Strcom[Inputtype[0]];//通道类型
users.UserModel = Inputtype[0];//确定计算公式 users.UserModel = Inputtype[0];//确定计算公式
/********************/ /********************/
users1.UserId = 1;//通道 users1.UserId = 1;//通道;
users1.Data = typeData[1];//数据 users1.Data = typeData[1];//数据
users1.UserCompany = Strcom[Inputtype[1]];//通道类型 users1.UserCompany = Strcom[Inputtype[1]];//通道类型
users1.UserModel = Inputtype[1];//确定计算公式 users1.UserModel = Inputtype[1];//确定计算公式
......
...@@ -5,58 +5,67 @@ using System.Text; ...@@ -5,58 +5,67 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ModbusDemo.MessageFormat; using ModbusDemo.MessageFormat;
using ModbusDemo.Common; using ModbusDemo.Common;
using System.Collections;
using MQTTnet;
using MQTTnet.Client;
using Newtonsoft.Json;
namespace ModbusDemo.Modular namespace ModbusDemo.Modular
{ {
class ModualPoll class ModualPoll
{ {
const byte byX14pNumber = 3; public const byte byX14pNumber = 4;
const byte byX14pReadDataStartAddress = 0; private const byte byX14pReadDataStartAddress = 0;
const byte byX14pReadDataNumber = 4; public const byte byX14pReadDataNumber = 4;
const byte byX14pReadTypeStartAddress = 10; private const byte byX14pReadTypeStartAddress = 10;
const byte byX14pReadTypeNumber = 4; private const byte byX14pReadTypeNumber = 4;
const double dX14pMinCovertData = 0; public const double dX14pMinCovertData = 0;
const double dx14pMaxConverData = 60; public const double dx14pMaxConverData = 60;
const ushort us14pMaxJumTemper = 10; public const ushort us14pMaxJumTemper = 10;
static byte[] byX14pIdlist = {17,28,29}; public static byte[] byX14pIdlist = { 1,17, 28, 29 };
modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist); public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist);
_414P c14formulasormual = new _414P(); public static _414P c14formulasormual = new _414P();
const byte byX18xNumber = 6; public const byte byX18xNumber = 8;
const byte byX18xReadDataStartAddress = 0; private const byte byX18xReadDataStartAddress = 0;
const byte byX18xReadDataNumber = 8; public const byte byX18xReadDataNumber = 8;
const byte byX18xReadTypeStartAddress = 10; private const byte byX18xReadTypeStartAddress = 10;
const byte byX18xReadTypeNumber = 8; private const byte byX18xReadTypeNumber = 8;
const double dX18xMinConvertData = 0; public const double dX18xMinConvertData = 0;
const ushort dX18xMaxJumpData = 2; private const ushort dX18xMaxJumpData = 2;
static byte[] byX18xIdlist = {12,13,21,25,45,53}; public static byte[] byX18xIdlist = {3,6,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}, private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber,byX18xReadDataNumber]{{modual.eX18xSensorChannelType.Weiertai,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Mike_7,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null},//东中转池 ID 3
{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.Mike_7,modual.eX18xSensorChannelType.Weiertai,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //西西中转池 ID 6
{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.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.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal,modual.eX18xSensorChannelType.Normal}, {modual.eX18xSensorChannelType.Mike_7,modual.eX18xSensorChannelType.Weiertai,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null},
{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.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //八角池 ID 21
{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.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_5,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //出料池 ID 45
modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType); {modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}};
_418X c18xformulasormual= new _418X();
public static modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType);
private static _418X c18xformulasormual = new _418X();
const byte byX78cNumber = 6;
const byte byX78cInputRegStartAddress = 0;
const byte byX78cInputRegNumber = 8; public const byte byX78cNumber = 6;
const byte byX78cOutputRegStartAddress = 16; private const byte byX78cInputRegStartAddress = 0;
const byte byX78cOutputRegNumber = 8; public const byte byX78cInputRegNumber = 8;
static byte[] byX78cIdlist = {11,20,33,34,55,56}; private const byte byX78cOutputRegStartAddress = 16;
modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist); public const byte byX78cOutputRegNumber = 8;
public static byte[] byX78cIdlist = {11,20,33,34,55,56};
public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist);
const byte byX66cNumber = 32; public const byte byX66cNumber = 32;
const byte byX66cRelayRegStartAddress = 16; private const byte byX66cRelayRegStartAddress = 16;
const byte byX66cRelayRegNumber = 6; public const byte byX66cRelayRegNumber = 6;
static byte[] byX66cIdlist = {9,10,14,15,16,19,22,23,24,26,30,31,32,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,54,57}; public static byte[] byX66cIdlist = {9,10,14,15,16,19,22,23,24,26,30,31,32,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,54,57};
modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist); public static modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist);
void vAllNodePoll()
public static ModualAlarm cModualAlarm = new ModualAlarm();
public static void vAllNodePoll()
{ {
for (byte i = 0; i < byX14pNumber; i++) for (byte i = 0; i < byX14pNumber; i++)
{ {
...@@ -69,38 +78,36 @@ namespace ModbusDemo.Modular ...@@ -69,38 +78,36 @@ namespace ModbusDemo.Modular
{ {
for (byte j = 0; j < byX14pReadTypeNumber; j++) for (byte j = 0; j < byX14pReadTypeNumber; j++)
{ {
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] = (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
else else
{ {
for (byte j = 0; j < byX14pReadTypeNumber; j++) for (byte j = 0; j < byX14pReadTypeNumber; j++)
{ {
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
for (byte j = 0; j < byX14pReadTypeNumber; j++) for (byte j = 0; j < byX14pReadTypeNumber; j++)
{ {
cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] = double.Parse(sTempString[i][j]); cx14P.sX14pDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]);
//if (cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] <= dX14pMinCovertData || cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] >= dx14pMaxConverData ) //if (cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] <= dX14pMinCovertData || cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] >= dx14pMaxConverData )
//{ //{
// cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCollectDataError; // cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCollectDataError;
//} //}
if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true) 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) if (cx14P.sX14pDataStruct[i].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper && cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper)
{ {
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelDataChangeError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
else else
{ {
cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelDataChangeError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
} }
cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j];
cx14P.sX14PAlarmStruct[i].eBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j];
} }
cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true; cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true;
} }
...@@ -111,35 +118,53 @@ namespace ModbusDemo.Modular ...@@ -111,35 +118,53 @@ namespace ModbusDemo.Modular
string[][] sTempString = new string[byX18xNumber][]; string[][] sTempString = new string[byX18xNumber][];
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx18x.sX18xDataStruct[i].usRegData, cx18x.byModbusID[i], byX18xReadDataStartAddress, byX18xReadDataNumber); 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); 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); sTempString[i] = c18xformulasormual.Value(cx18x.sX18xDataStruct[i].usRegData, cx18x.sX18xDataStruct[i].usTypeData);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{ {
for (sbyte j = 0; j < byX18xReadTypeNumber; j++) for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{ {
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
else else
{ {
for (sbyte j = 0; j < byX18xReadTypeNumber; j++) for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{ {
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] |= ~ModualAlarm.eAlarmCode.ChannelCommunError; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
for (byte j = 0; j < byX18xReadTypeNumber; j++) for (byte j = 0; j < byX18xReadTypeNumber; j++)
{ {
if (cx18x.sX18xDataStruct[i].eChannelType[j] == modual.eX18xSensorChannelType.Normal) switch (cx18x.beChannelType[i, j])
cx18x.sX18xDataStruct[i].dNowConvertData[j] = (double.Parse(sTempString[i][j]) - 4) / 16 * 6; {
case modual.eX18xSensorChannelType.Weiertai:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 8- ((double.Parse(sTempString[i][j]) - 4) / 16 * 8);
break;
case modual.eX18xSensorChannelType.Mike_5:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 5 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 5);
break;
case modual.eX18xSensorChannelType.Mike_6:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 6 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 6);
break;
case modual.eX18xSensorChannelType.Mike_7:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 7 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 7);
break;
case modual.eX18xSensorChannelType.Null:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0;
break;
default:
break;
}
if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true) 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) 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; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
else else
{ {
cx18x.sX18xAlarmstruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelDataChangeError; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
} }
cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j]; cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j];
...@@ -155,14 +180,14 @@ namespace ModbusDemo.Modular ...@@ -155,14 +180,14 @@ namespace ModbusDemo.Modular
{ {
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++) for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{ {
cx78c.sX78cAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError; cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
else else
{ {
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++) for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{ {
cx78c.sX78cAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError; cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
} }
...@@ -170,39 +195,144 @@ namespace ModbusDemo.Modular ...@@ -170,39 +195,144 @@ 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].bOutPutRegStatus, 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].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCommunError; cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
else else
{ {
for (sbyte j = 0; j < byX66cRelayRegNumber; j++) for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{ {
cx66c.sX66cAlarmStruct[i].eNowAlarmCode[j] &= ~ModualAlarm.eAlarmCode.ChannelCommunError; cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
} }
} }
public static string stAll_Poll_Package()
void vCheckAlarm() {
string stPollString;
stPollString = "[";
for (sbyte i = 0; i < byX14pNumber; i++)
{
string stIdString = cx14P.byModbusID[i].ToString();
WTDR14P OneNodeJsonPackage = new WTDR14P(stIdString, cx14P.sX14pDataStruct[i].dNowConvertData[0], cx14P.sX14pDataStruct[i].dNowConvertData[1], cx14P.sX14pDataStruct[i].dNowConvertData[2], cx14P.sX14pDataStruct[i].dNowConvertData[3], Form1.GetTimeStamp());
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ",";
}
for (sbyte i = 0; i < byX18xNumber; i++)
{
string stIdString = cx18x.byModbusID[i].ToString();
WTDR18X OneNodeJsonPackage = new WTDR18X(stIdString, cx18x.sX18xDataStruct[i].dNowConvertData[0], cx18x.sX18xDataStruct[i].dNowConvertData[1], cx18x.sX18xDataStruct[i].dNowConvertData[2], cx18x.sX18xDataStruct[i].dNowConvertData[3], cx18x.sX18xDataStruct[i].dNowConvertData[4], cx18x.sX18xDataStruct[i].dNowConvertData[5], cx18x.sX18xDataStruct[i].dNowConvertData[6], cx18x.sX18xDataStruct[i].dNowConvertData[7], Form1.GetTimeStamp());
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ",";
}
for (sbyte i = 0; i < byX78cNumber; i++)
{
string stIdString = cx78c.byModbusID[i].ToString();
_478C cBoolConvertInt = new _478C();
int[] InputConvert,OutPutConver;
InputConvert = cBoolConvertInt.IO(cx78c.sX78cRegStatusStruct[i].bInputRegStatus);
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());
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ",";
}
for (sbyte i = 0; i < byX66cNumber; i++)
{
string stIdString = cx66c.byModbusID[i].ToString();
_478C cBoolConvertInt = new _478C();
int[] sRelayConvert;
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());
if (i >= byX66cNumber)
{
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + "]";
return stPollString;
}
else
stPollString += JsonConvert.SerializeObject(OneNodeJsonPackage) + ",";
}
return stPollString;
}
public static async void vCheckAlarm_And_Send(IMqttClient mqttClient)
{ {
bool bOccurErrorChange = false;
for (byte i = 0; i < byX14pNumber; i++) for (byte i = 0; i < byX14pNumber; i++)
{ {
ushort[] usChannelErrorlist = { };
ushort[] usChannelErrorCodeList = { };
byte k = 0;
for (byte j = 0; j < byX14pReadDataNumber; j++) for (byte j = 0; j < byX14pReadDataNumber; j++)
{ {
if (cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] != cx14P.sX14PAlarmStruct[i].eBeforeAlarmCode[j]) if (cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] != cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j])
{ {
bOccurErrorChange = true;
usChannelErrorlist[k++] = j;
usChannelErrorCodeList[k++] = (ushort)cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j];
} }
cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j];
} }
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList,true);
} }
for (byte i = 0; i < byX18xNumber; i++)
{
ushort[] usChannelErrorlist = { };
ushort[] usChannelErrorCodeList = { };
byte k = 0;
for (byte j = 0; j < byX18xReadTypeNumber; j++)
{
if (cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] != cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j])
{
bOccurErrorChange = true;
usChannelErrorlist[k++] = j;
usChannelErrorCodeList[k++] = (ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j];
}
cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j];
}
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList,true);
}
for (byte i = 0; i < byX78cNumber; i++)
{
ushort[] usChannelErrorlist = { };
ushort[] usChannelErrorCodeList = { };
byte k = 0;
for (byte j = 0; j < byX78cOutputRegNumber + byX78cInputRegNumber; j++)
{
if (cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] != cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j])
{
bOccurErrorChange = true;
usChannelErrorlist[k++] = j;
usChannelErrorCodeList[k++] = (ushort)cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j];
}
cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j] = cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j];
}
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList, true);
}
for (byte i = 0; i < byX66cNumber; i++)
{
ushort[] usChannelErrorlist = { };
ushort[] usChannelErrorCodeList = { };
byte k = 0;
for (byte j = 0; j < byX66cRelayRegNumber; j++)
{
if (cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] != cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j])
{
bOccurErrorChange = true;
usChannelErrorlist[k++] = j;
usChannelErrorCodeList[k++] = (ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j];
}
cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j] = cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j];
}
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList,i == byX66cNumber ? true:false);
}
if (bOccurErrorChange == true)
{
await cModualAlarm.vPublishAlarmPackageJson(mqttClient);
}
} }
} }
} }
...@@ -7,36 +7,48 @@ using ModbusDemo.MessageFormat; ...@@ -7,36 +7,48 @@ using ModbusDemo.MessageFormat;
using ModbusDemo.Common; using ModbusDemo.Common;
namespace ModbusDemo.Modular namespace ModbusDemo.Modular
{ {
class modual public class modual
{ {
public struct psx14pData public struct psx14pData
{ {
public ushort[] usX14pRegData; public ushort[] usX14pRegData;
public ushort[] usX14pRegType; public ushort[] usX14pRegType;
public double[] dX14pNowConvertData; public double[] dNowConvertData;
public double[] dX14pBeforeConvertData; public double[] dBeforeConvertData;
} }
public struct psxModualAlarm public struct psxModualAlarm
{ {
public bool bDataNotFirstIncreaseOrDecrease; public bool bDataNotFirstIncreaseOrDecrease;
public ModualAlarm.eAlarmCode[] eNowAlarmCode; public ushort[] usNowAlarmCode;
public ModualAlarm.eAlarmCode[] eBeforeAlarmCode; public ushort[] usBeforeAlarmCode;
} }
public class pcx14P public class pcx14P
{ {
public byte[] byModbusID; public byte[] byModbusID;
public psx14pData[] sX14pDataStruct; public psx14pData[] sX14pDataStruct = new psx14pData[ModualPoll.byX14pNumber];
public psxModualAlarm[] sX14PAlarmStruct; public psxModualAlarm[] sX14PAlarmStruct = new psxModualAlarm[ModualPoll.byX14pNumber];
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx14P(byte[] InitIDlist) public pcx14P(byte[] InitIDlist)
{ {
this.byModbusID = InitIDlist; this.byModbusID = InitIDlist;
for (byte i = 0; i < ModualPoll.byX14pNumber; i++)
{
this.sX14pDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX14pReadDataNumber];
this.sX14pDataStruct[i].dNowConvertData = new double[ModualPoll.byX14pReadDataNumber];
//this.sX14pDataStruct[i].usX14pRegType = new ushort[ModualPoll.byX14pReadDataNumber];
//this.sX14pDataStruct[i].usX14pRegData = new ushort[ModualPoll.byX14pReadDataNumber];
this.sX14PAlarmStruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX14pReadDataNumber];
this.sX14PAlarmStruct[i].usNowAlarmCode = new ushort[ModualPoll.byX14pReadDataNumber];
}
} }
} }
public enum eX18xSensorChannelType : byte public enum eX18xSensorChannelType : byte
{ {
Normal = 0, Null = 0,
Weiertai,
Mike_5,
Mike_6,
Mike_7,
Level, Level,
} }
...@@ -44,25 +56,27 @@ namespace ModbusDemo.Modular ...@@ -44,25 +56,27 @@ namespace ModbusDemo.Modular
{ {
public ushort[] usRegData; public ushort[] usRegData;
public ushort[] usTypeData; public ushort[] usTypeData;
public eX18xSensorChannelType[] eChannelType;
public double[] dNowConvertData; public double[] dNowConvertData;
public double[] dBeforeConvertData; public double[] dBeforeConvertData;
} }
public class pcx18X public class pcx18X
{ {
public byte[] byModbusID; public byte[] byModbusID;
public psX18xData[] sX18xDataStruct; public psX18xData[] sX18xDataStruct = new psX18xData[ModualPoll.byX18xNumber];
public psxModualAlarm[] sX18xAlarmstruct; public psxModualAlarm[] sX18xAlarmstruct = new psxModualAlarm[ModualPoll.byX18xNumber];
public ModbusComm.eModbusErrorCode[] ModbusErrorCode; public eX18xSensorChannelType[,] beChannelType;
public pcx18X(byte[] InitIDlist, eX18xSensorChannelType[,] eChannnelType) public pcx18X(byte[] InitIDlist, eX18xSensorChannelType[,] eChannnelType)
{ {
this.byModbusID = InitIDlist; this.byModbusID = InitIDlist;
for (ushort i = 0; i < eChannnelType.GetLength(0); i++) this.beChannelType = eChannnelType;
for (byte i = 0; i < ModualPoll.byX18xNumber; i++)
{ {
for (ushort j = 0; j < eChannnelType.GetLength(1); j++) this.sX18xDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX18xReadDataNumber];
{ this.sX18xDataStruct[i].dNowConvertData = new double[ModualPoll.byX18xReadDataNumber];
this.sX18xDataStruct[i].eChannelType[j] = eChannnelType[i,j]; //this.sX18xDataStruct[i].usRegData = new ushort[ModualPoll.byX18xReadDataNumber];
} //this.sX18xDataStruct[i].usTypeData = new ushort[ModualPoll.byX18xReadDataNumber];
this.sX18xAlarmstruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber];
this.sX18xAlarmstruct[i].usNowAlarmCode = new ushort[ModualPoll.byX18xReadDataNumber];
} }
} }
} }
...@@ -70,33 +84,42 @@ namespace ModbusDemo.Modular ...@@ -70,33 +84,42 @@ namespace ModbusDemo.Modular
{ {
public bool[] bInputRegStatus; public bool[] bInputRegStatus;
public bool[] bOutPutRegStatus; public bool[] bOutPutRegStatus;
public bool bX78cAllChannelAlarm;
} }
public class pcx78C public class pcx78C
{ {
public byte[] byModbusID; public byte[] byModbusID;
public psx78C[] sX78cRegStatusStruct; public psx78C[] sX78cRegStatusStruct = new psx78C[ModualPoll.byX78cNumber];
public psxModualAlarm[] sX78cAlarmStruct; public psxModualAlarm[] sX78cAlarmStruct = new psxModualAlarm[ModualPoll.byX78cNumber];
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx78C(byte[] InitIDlist) public pcx78C(byte[] InitIDlist)
{ {
this.byModbusID = InitIDlist; this.byModbusID = InitIDlist;
for (byte i = 0; i < ModualPoll.byX78cNumber; i++)
{
this.sX78cRegStatusStruct[i].bInputRegStatus = new bool[ModualPoll.byX78cInputRegNumber];
this.sX78cRegStatusStruct[i].bOutPutRegStatus = new bool[ModualPoll.byX78cOutputRegNumber];
this.sX78cAlarmStruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX78cInputRegNumber + ModualPoll.byX78cOutputRegNumber];
this.sX78cAlarmStruct[i].usNowAlarmCode = new ushort[ModualPoll.byX78cInputRegNumber + ModualPoll.byX78cOutputRegNumber];
}
} }
} }
public struct psx66C public struct psx66C
{ {
public bool[] bRegRelayStatus; public bool[] bRegRelayStatus;
public bool[] bX66CAllChannelAlarm;
} }
public class pcx66C public class pcx66C
{ {
public byte[] byModbusID; public byte[] byModbusID;
public psx78C[] sX66cRegStatusStruct; public psx66C[] sX66cRegStatusStruct = new psx66C[ModualPoll.byX66cNumber];
public psxModualAlarm[] sX66cAlarmStruct; public psxModualAlarm[] sX66cAlarmStruct = new psxModualAlarm[ModualPoll.byX66cNumber];
public ModbusComm.eModbusErrorCode[] ModbusErrorCode;
public pcx66C(byte[] InitIDlist) public pcx66C(byte[] InitIDlist)
{ {
this.byModbusID = InitIDlist; this.byModbusID = InitIDlist;
for (byte i = 0; i < ModualPoll.byX66cNumber; i++)
{
this.sX66cRegStatusStruct[i].bRegRelayStatus = new bool[ModualPoll.byX66cRelayRegNumber];
this.sX66cAlarmStruct[i].usBeforeAlarmCode = new ushort[ModualPoll.byX66cRelayRegNumber];
this.sX66cAlarmStruct[i].usNowAlarmCode = new ushort[ModualPoll.byX66cRelayRegNumber];
}
} }
} }
} }
......
using System; //using System;
using System.Collections.Generic; //using System.Collections.Generic;
using System.Linq; //using System.Linq;
using System.Text; //using System.Text;
using System.Threading.Tasks; //using System.Threading.Tasks;
using ModbusDemo.windows; //using ModbusDemo.windows;
using ModbusDemo; //using ModbusDemo;
using ModbusDemo.MessageFormat; //using ModbusDemo.MessageFormat;
namespace ModbusDemo.application //namespace ModbusDemo.application
{ //{
class ModbusToPool // class ModbusToPool
{ // {
public class pcModbusOperationPumb // public class pcModbusOperationPumb
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public bool[] bGetStatus; // public bool[] bGetStatus;
public bool[] bSetStatus; // public bool[] bSetStatus;
public bool[] bOpenStatus; // public bool[] bOpenStatus;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcModbusOperationPumb(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen) // public pcModbusOperationPumb(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++) // for (int i = 0; i < usInitRegAddressInit.Length; i++)
{ // {
this.usRegAddList[i] = usInitRegAddressInit[i]; // this.usRegAddList[i] = usInitRegAddressInit[i];
this.bOpenStatus[i] = bInitOPen[i]; // this.bOpenStatus[i] = bInitOPen[i];
} // }
} // }
public bool[] vGet_Module_Channel_Status() // public bool[] vGet_Module_Channel_Status()
{ // {
ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.bGetStatus; // return this.bGetStatus;
} // }
public void vSet_Module_Channel_Status() // public void vSet_Module_Channel_Status()
{ // {
ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus); // ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
} // }
} // }
public class pcReadPumbOtherData // public class pcReadPumbOtherData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public ushort[] usReadData; // public ushort[] usReadData;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcReadPumbOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit) // public pcReadPumbOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++) // for (int i = 0; i < usInitRegAddressInit.Length; i++)
{ // {
this.usRegAddList[i] = usInitRegAddressInit[i]; // this.usRegAddList[i] = usInitRegAddressInit[i];
} // }
} // }
public double vRead_Pumb_Data() // public double vRead_Pumb_Data()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.usReadData[0]; // return this.usReadData[0];
} // }
} // }
public class pcModbusOperationAgitator // public class pcModbusOperationAgitator
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public bool[] bGetStatus; // public bool[] bGetStatus;
public bool[] bSetStatus; // public bool[] bSetStatus;
public bool[] bOpenStatus; // public bool[] bOpenStatus;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcModbusOperationAgitator(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen) // public pcModbusOperationAgitator(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++) // for (int i = 0; i < usInitRegAddressInit.Length; i++)
{ // {
this.usRegAddList[i] = usInitRegAddressInit[i]; // this.usRegAddList[i] = usInitRegAddressInit[i];
this.bOpenStatus[i] = bInitOPen[i]; // this.bOpenStatus[i] = bInitOPen[i];
} // }
} // }
public bool[] vGet_Module_Channel_Status() // public bool[] vGet_Module_Channel_Status()
{ // {
ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.bGetStatus; // return this.bGetStatus;
} // }
public void vSet_Module_Channel_Status() // public void vSet_Module_Channel_Status()
{ // {
ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus); // ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
} // }
} // }
public class pcReadAgitatorOtherData // public class pcReadAgitatorOtherData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public ushort[] usReadData; // public ushort[] usReadData;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcReadAgitatorOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit) // public pcReadAgitatorOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++) // for (int i = 0; i < usInitRegAddressInit.Length; i++)
{ // {
this.usRegAddList[i] = usInitRegAddressInit[i]; // this.usRegAddList[i] = usInitRegAddressInit[i];
} // }
} // }
public double vRead_Agitator_Data() // public double vRead_Agitator_Data()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.usReadData[0]; // return this.usReadData[0];
} // }
} // }
public class pcPoolTemperature // public class pcPoolTemperature
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort usTemperRegAddress; // public ushort usTemperRegAddress;
public ushort usTypeRegAddress; // public ushort usTypeRegAddress;
public ushort[] usReadData; // public ushort[] usReadData;
public ushort[] usReadType; // public ushort[] usReadType;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcPoolTemperature(byte byInitModbusID, ushort usDataRegAddress, ushort usTypeAddress) // public pcPoolTemperature(byte byInitModbusID, ushort usDataRegAddress, ushort usTypeAddress)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usTemperRegAddress = usDataRegAddress; // this.usTemperRegAddress = usDataRegAddress;
this.usTypeRegAddress = usTypeAddress; // this.usTypeRegAddress = usTypeAddress;
} // }
public void vRead_Pumb_Data() // public void vRead_Pumb_Data()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress, 1, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress, 1, out this.bCommunicationStatus);
} // }
public void vRead_Pumb_Type() // public void vRead_Pumb_Type()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress, 1, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress, 1, out this.bCommunicationStatus);
} // }
} // }
public class pcPoolLevel // public class pcPoolLevel
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usTemperRegAddress; // public ushort[] usTemperRegAddress;
public ushort[] usTypeRegAddress; // public ushort[] usTypeRegAddress;
public ushort[] usReadData; // public ushort[] usReadData;
public ushort[] usReadType; // public ushort[] usReadType;
public bool bCommunicationStatus; // public bool bCommunicationStatus;
public pcPoolLevel(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress) // public pcPoolLevel(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
for (int i = 0; i < usDataRegAddress.Length; i++) // for (int i = 0; i < usDataRegAddress.Length; i++)
{ // {
this.usTemperRegAddress[i] = usDataRegAddress[i]; // this.usTemperRegAddress[i] = usDataRegAddress[i];
this.usTypeRegAddress[i] = usDataTypeRegAddress[i]; // this.usTypeRegAddress[i] = usDataTypeRegAddress[i];
} // }
} // }
public void vRead_Level_Data() // public void vRead_Level_Data()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress[0], (ushort)this.usTemperRegAddress.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress[0], (ushort)this.usTemperRegAddress.Length, out this.bCommunicationStatus);
} // }
public void vRead_Level_Type() // public void vRead_Level_Type()
{ // {
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress[0], (ushort)this.usTypeRegAddress.Length, out this.bCommunicationStatus); // ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress[0], (ushort)this.usTypeRegAddress.Length, out this.bCommunicationStatus);
} // }
} // }
} // }
} //}
using System; //using System;
using System.Collections.Generic; //using System.Collections.Generic;
using System.Linq; //using System.Linq;
using System.Text; //using System.Text;
using System.Threading.Tasks; //using System.Threading.Tasks;
namespace ModbusDemo.application //namespace ModbusDemo.application
{ //{
public struct psTemperData // public struct psTemperData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort usTemperRegAddress; // public ushort usTemperRegAddress;
public ushort usTypeRegAddress; // public ushort usTypeRegAddress;
public psTemperData(byte bySetModbusID, ushort usSetTempRegAddress, ushort usSetRegAddress) // public psTemperData(byte bySetModbusID, ushort usSetTempRegAddress, ushort usSetRegAddress)
{ // {
this.byModbusID = bySetModbusID; // this.byModbusID = bySetModbusID;
this.usTemperRegAddress = usSetTempRegAddress; // this.usTemperRegAddress = usSetTempRegAddress;
this.usTypeRegAddress = usSetRegAddress; // this.usTypeRegAddress = usSetRegAddress;
} // }
} // }
public struct psLevelData // public struct psLevelData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usDataAddressList; // public ushort[] usDataAddressList;
public ushort[] usTypeAddressList; // public ushort[] usTypeAddressList;
public psLevelData(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress) // public psLevelData(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usDataAddressList = usDataRegAddress; // this.usDataAddressList = usDataRegAddress;
this.usTypeAddressList = usDataTypeRegAddress; // this.usTypeAddressList = usDataTypeRegAddress;
} // }
} // }
public struct psBumpOperation // public struct psBumpOperation
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public bool[] bOpenStatus; // public bool[] bOpenStatus;
public psBumpOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen) // public psBumpOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit; // this.usRegAddList = usInitRegAddressInit;
this.bOpenStatus = bInitOPen; // this.bOpenStatus = bInitOPen;
} // }
} // }
public struct psPumbData // public struct psPumbData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public psPumbData(byte byInitModbusID, ushort[] usInitRegAddressInit) // public psPumbData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit; // this.usRegAddList = usInitRegAddressInit;
} // }
} // }
public struct psAgitatorOperation // public struct psAgitatorOperation
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public bool[] bOpenStatus; // public bool[] bOpenStatus;
public psAgitatorOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen) // public psAgitatorOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit; // this.usRegAddList = usInitRegAddressInit;
this.bOpenStatus = bInitOPen; // this.bOpenStatus = bInitOPen;
} // }
} // }
public struct psAgitatorData // public struct psAgitatorData
{ // {
public byte byModbusID; // public byte byModbusID;
public ushort[] usRegAddList; // public ushort[] usRegAddList;
public psAgitatorData(byte byInitModbusID, ushort[] usInitRegAddressInit) // public psAgitatorData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{ // {
this.byModbusID = byInitModbusID; // this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit; // this.usRegAddList = usInitRegAddressInit;
} // }
} // }
static class pcPoolInit // static class pcPoolInit
{ // {
private static psTemperData sTemper = new psTemperData(1, 1, 10); // private static psTemperData sTemper = new psTemperData(1, 1, 10);
private static ModbusToPool.pcPoolTemperature cPoolTemperature = new ModbusToPool.pcPoolTemperature(sTemper.byModbusID, sTemper.usTemperRegAddress, sTemper.usTypeRegAddress); // private static ModbusToPool.pcPoolTemperature cPoolTemperature = new ModbusToPool.pcPoolTemperature(sTemper.byModbusID, sTemper.usTemperRegAddress, sTemper.usTypeRegAddress);
public static double Get_Current_temper() // public static double Get_Current_temper()
{ // {
cPoolTemperature.vRead_Pumb_Data(); // cPoolTemperature.vRead_Pumb_Data();
cPoolTemperature.vRead_Pumb_Type(); // cPoolTemperature.vRead_Pumb_Type();
return cPoolTemperature.usReadData[0]; // return cPoolTemperature.usReadData[0];
} // }
public const sbyte PoolLevelNumber = 1; // public const sbyte PoolLevelNumber = 1;
static ushort[] usLevelDataReg = { 1}; // static ushort[] usLevelDataReg = { 1};
static ushort[] usLevelTypeReg = { 16 }; // static ushort[] usLevelTypeReg = { 16 };
private static psLevelData sLevelData = new psLevelData(1, usLevelDataReg, usLevelTypeReg); // private static psLevelData sLevelData = new psLevelData(1, usLevelDataReg, usLevelTypeReg);
private static ModbusToPool.pcPoolLevel[] cPoolLevel= new ModbusToPool.pcPoolLevel[] { new ModbusToPool.pcPoolLevel(sLevelData.byModbusID, sLevelData.usDataAddressList, sLevelData.usTypeAddressList) }; // private static ModbusToPool.pcPoolLevel[] cPoolLevel= new ModbusToPool.pcPoolLevel[] { new ModbusToPool.pcPoolLevel(sLevelData.byModbusID, sLevelData.usDataAddressList, sLevelData.usTypeAddressList) };
public static double Get_Current_Level() // public static double Get_Current_Level()
{ // {
ushort usPoolLevel = 0; // ushort usPoolLevel = 0;
sbyte NormalDataNumber = 0; // sbyte NormalDataNumber = 0;
for (short i = 0; i < cPoolLevel.Length; i++) // for (short i = 0; i < cPoolLevel.Length; i++)
{ // {
cPoolLevel[i].vRead_Level_Data(); // cPoolLevel[i].vRead_Level_Data();
cPoolLevel[i].vRead_Level_Type(); // cPoolLevel[i].vRead_Level_Type();
if (cPoolLevel[i].bCommunicationStatus = true && (cPoolLevel[i].usReadData[0] >= 1 && cPoolLevel[i].usReadData[0] >= 7) && cPoolLevel[i].usReadType[0] == 1) // if (cPoolLevel[i].bCommunicationStatus = true && (cPoolLevel[i].usReadData[0] >= 1 && cPoolLevel[i].usReadData[0] >= 7) && cPoolLevel[i].usReadType[0] == 1)
{ // {
usPoolLevel += cPoolLevel[i].usReadData[0]; // usPoolLevel += cPoolLevel[i].usReadData[0];
NormalDataNumber++; // NormalDataNumber++;
} // }
} // }
return usPoolLevel/ NormalDataNumber; // return usPoolLevel/ NormalDataNumber;
} // }
public const sbyte PoolBumpOperatNumber = 1; // public const sbyte PoolBumpOperatNumber = 1;
static ushort[] usBumpOperatReg = { 16, 17 }; // static ushort[] usBumpOperatReg = { 16, 17 };
static bool[] usBumpOpenStatus = { true, false }; // static bool[] usBumpOpenStatus = { true, false };
private static psBumpOperation psBumpData = new psBumpOperation(2, usBumpOperatReg, usBumpOpenStatus); // private static psBumpOperation psBumpData = new psBumpOperation(2, usBumpOperatReg, usBumpOpenStatus);
public static ModbusToPool.pcModbusOperationPumb[] cPumbOperat = new ModbusToPool.pcModbusOperationPumb[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationPumb(psBumpData.byModbusID, psBumpData.usRegAddList, psBumpData.bOpenStatus) }; // public static ModbusToPool.pcModbusOperationPumb[] cPumbOperat = new ModbusToPool.pcModbusOperationPumb[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationPumb(psBumpData.byModbusID, psBumpData.usRegAddList, psBumpData.bOpenStatus) };
public const sbyte PoolBumpCurrentNumber = 1; // public const sbyte PoolBumpCurrentNumber = 1;
static ushort[] usBumpCurrentDataReg = { 1 }; // static ushort[] usBumpCurrentDataReg = { 1 };
private static psPumbData psBumpReadCurrentData = new psPumbData(3, usBumpCurrentDataReg); // private static psPumbData psBumpReadCurrentData = new psPumbData(3, usBumpCurrentDataReg);
public static ModbusToPool.pcReadPumbOtherData[] cPumbCurrent = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadCurrentData.byModbusID, psBumpReadCurrentData.usRegAddList) }; // public static ModbusToPool.pcReadPumbOtherData[] cPumbCurrent = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadCurrentData.byModbusID, psBumpReadCurrentData.usRegAddList) };
public const sbyte PoolBumpVoltageNumber = 1; // public const sbyte PoolBumpVoltageNumber = 1;
static ushort[] usBumpVoltageReg = { 1 }; // static ushort[] usBumpVoltageReg = { 1 };
private static psPumbData psBumpReadVoltageData = new psPumbData(4, usBumpVoltageReg); // private static psPumbData psBumpReadVoltageData = new psPumbData(4, usBumpVoltageReg);
public static ModbusToPool.pcReadPumbOtherData[] cPumbVoltage = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadVoltageData.byModbusID, psBumpReadVoltageData.usRegAddList) }; // public static ModbusToPool.pcReadPumbOtherData[] cPumbVoltage = new ModbusToPool.pcReadPumbOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadPumbOtherData(psBumpReadVoltageData.byModbusID, psBumpReadVoltageData.usRegAddList) };
public const sbyte PoolAgitatorOperatNumber = 1; // public const sbyte PoolAgitatorOperatNumber = 1;
static ushort[] usAgitatorOperatReg = { 16,17 }; // static ushort[] usAgitatorOperatReg = { 16,17 };
static bool[] usAgitatorOpenStatus = { true, true }; // static bool[] usAgitatorOpenStatus = { true, true };
private static psAgitatorOperation psAgitatorData = new psAgitatorOperation(5, usAgitatorOperatReg, usAgitatorOpenStatus); // private static psAgitatorOperation psAgitatorData = new psAgitatorOperation(5, usAgitatorOperatReg, usAgitatorOpenStatus);
public static ModbusToPool.pcModbusOperationAgitator[] cAgitatorOperat = new ModbusToPool.pcModbusOperationAgitator[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationAgitator(psBumpData.byModbusID, psAgitatorData.usRegAddList, psAgitatorData.bOpenStatus) }; // public static ModbusToPool.pcModbusOperationAgitator[] cAgitatorOperat = new ModbusToPool.pcModbusOperationAgitator[PoolBumpOperatNumber] { new ModbusToPool.pcModbusOperationAgitator(psBumpData.byModbusID, psAgitatorData.usRegAddList, psAgitatorData.bOpenStatus) };
public const sbyte PoolAgitatorCurrentNumber = 1; // public const sbyte PoolAgitatorCurrentNumber = 1;
static ushort[] usAgitatorCurrentDataReg = {1}; // static ushort[] usAgitatorCurrentDataReg = {1};
private static psAgitatorData psAgitatorReadCurrentData = new psAgitatorData(6, usAgitatorCurrentDataReg); // private static psAgitatorData psAgitatorReadCurrentData = new psAgitatorData(6, usAgitatorCurrentDataReg);
public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorCurrent = new ModbusToPool.pcReadAgitatorOtherData[PoolAgitatorCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadCurrentData.byModbusID, psAgitatorReadCurrentData.usRegAddList) }; // public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorCurrent = new ModbusToPool.pcReadAgitatorOtherData[PoolAgitatorCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadCurrentData.byModbusID, psAgitatorReadCurrentData.usRegAddList) };
public const sbyte PoolAgitatorVoltageNumber = 1; // public const sbyte PoolAgitatorVoltageNumber = 1;
static ushort[] usAgitatorVoltageReg = { 1 }; // static ushort[] usAgitatorVoltageReg = { 1 };
private static psAgitatorData psAgitatorReadVoltageData = new psAgitatorData(7, usAgitatorVoltageReg); // private static psAgitatorData psAgitatorReadVoltageData = new psAgitatorData(7, usAgitatorVoltageReg);
public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorVoltage = new ModbusToPool.pcReadAgitatorOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadVoltageData.byModbusID, psAgitatorReadVoltageData.usRegAddList) }; // public static ModbusToPool.pcReadAgitatorOtherData[] cAgitatorVoltage = new ModbusToPool.pcReadAgitatorOtherData[PoolBumpCurrentNumber] { new ModbusToPool.pcReadAgitatorOtherData(psAgitatorReadVoltageData.byModbusID, psAgitatorReadVoltageData.usRegAddList) };
} // }
public class pcBump // public class pcBump
{ // {
private double[] dBumpCurrent = new double[pcPoolInit.PoolBumpCurrentNumber] { pcPoolInit.cPumbCurrent[0].vRead_Pumb_Data()}; // private double[] dBumpCurrent = new double[pcPoolInit.PoolBumpCurrentNumber] { pcPoolInit.cPumbCurrent[0].vRead_Pumb_Data()};
public double[] dBumpVoltage = new double[pcPoolInit.PoolBumpVoltageNumber] { pcPoolInit.cPumbVoltage[0].vRead_Pumb_Data()} ; // public double[] dBumpVoltage = new double[pcPoolInit.PoolBumpVoltageNumber] { pcPoolInit.cPumbVoltage[0].vRead_Pumb_Data()} ;
public bool[] bBumpStatus = new bool[pcPoolInit.PoolBumpOperatNumber]; // public bool[] bBumpStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
public bool[] bpcBumpHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber]; // public bool[] bpcBumpHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
public void vOpen_Bump(ushort usPumbNumber) // public void vOpen_Bump(ushort usPumbNumber)
{ // {
try // try
{ // {
pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus; // pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status(); // pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus; // this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
this.bpcBumpHasOpen[usPumbNumber] = true; // this.bpcBumpHasOpen[usPumbNumber] = true;
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
Form1.totxt.Log(exception + "Bump Open Operation Error"); // Form1.totxt.Log(exception + "Bump Open Operation Error");
throw; // throw;
} // }
} // }
public void vClose_Bump(ushort usPumbNumber) // public void vClose_Bump(ushort usPumbNumber)
{ // {
try // try
{ // {
for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++) // for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
{ // {
pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i]; // pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus; // this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
this.bpcBumpHasOpen[usPumbNumber] = false; // this.bpcBumpHasOpen[usPumbNumber] = false;
} // }
pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status(); // pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
Form1.totxt.Log(exception + "Bump Close Operation Error"); // Form1.totxt.Log(exception + "Bump Close Operation Error");
throw; // throw;
} // }
} // }
public bool[] vGet_Pumb_Status(ushort usPumbNumber) // public bool[] vGet_Pumb_Status(ushort usPumbNumber)
{ // {
try // try
{ // {
return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status(); // return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
Form1.totxt.Log(exception + "Bump Read Status Error"); // Form1.totxt.Log(exception + "Bump Read Status Error");
throw; // throw;
} // }
} // }
} // }
public class pcAgitator // public class pcAgitator
{ // {
private double[] dAgitatorCurrent = new double[pcPoolInit.PoolAgitatorCurrentNumber] { pcPoolInit.cAgitatorCurrent[0].vRead_Agitator_Data() }; // private double[] dAgitatorCurrent = new double[pcPoolInit.PoolAgitatorCurrentNumber] { pcPoolInit.cAgitatorCurrent[0].vRead_Agitator_Data() };
public double[] dAgitatorVoltage = new double[pcPoolInit.PoolAgitatorVoltageNumber] { pcPoolInit.cAgitatorVoltage[0].vRead_Agitator_Data() }; // public double[] dAgitatorVoltage = new double[pcPoolInit.PoolAgitatorVoltageNumber] { pcPoolInit.cAgitatorVoltage[0].vRead_Agitator_Data() };
public bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber]; // public bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber]; // public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
public void vOpen_Agitator(ushort usAgitatorNumber) // public void vOpen_Agitator(ushort usAgitatorNumber)
{ // {
try // try
{ // {
pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus; // pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status(); // pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus; // this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
this.bAgitatorHasOpen[usAgitatorNumber] = true; // this.bAgitatorHasOpen[usAgitatorNumber] = true;
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
Form1.totxt.Log(exception + "Agitator Open Operation Error"); // Form1.totxt.Log(exception + "Agitator Open Operation Error");
throw; // throw;
} // }
} // }
public void vClose_Agitator(ushort usAgitatorNumber) // public void vClose_Agitator(ushort usAgitatorNumber)
{ // {
try // try
{ // {
for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++) // for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
{ // {
pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i]; // pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus; // this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
this.bAgitatorHasOpen[usAgitatorNumber] = false; // this.bAgitatorHasOpen[usAgitatorNumber] = false;
} // }
pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status(); // pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
} // }
catch(Exception exception) // catch(Exception exception)
{ // {
Form1.totxt.Log(exception + "Agitator Close Operation Error"); // Form1.totxt.Log(exception + "Agitator Close Operation Error");
throw; // throw;
} // }
} // }
public bool[] vGet_Agitator_Status(ushort usAgitatorNumber) // public bool[] vGet_Agitator_Status(ushort usAgitatorNumber)
{ // {
try // try
{ // {
return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status(); // return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
} // }
catch (Exception exception) // catch (Exception exception)
{ // {
Form1.totxt.Log(exception + "Agitator Read Status Error"); // Form1.totxt.Log(exception + "Agitator Read Status Error");
throw; // throw;
} // }
} // }
} // }
public class pcPool // public class pcPool
{ // {
public string ePondName; // public string ePondName;
public double dMaxlevel;//液位最低水位 // public double dMaxlevel;//液位最低水位
public double dMinlevel;//液位最高水位 // public double dMinlevel;//液位最高水位
public double dMaxTemper; // public double dMaxTemper;
public double dMinTemper; // public double dMinTemper;
public pcBump cBump; // public pcBump cBump;
public pcAgitator cAgitator; // public pcAgitator cAgitator;
public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); } // public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); } // public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
public pcPool(string eInitPondName) // public pcPool(string eInitPondName)
{ // {
this.ePondName = eInitPondName; // this.ePondName = eInitPondName;
} // }
} // }
} //}
...@@ -20,7 +20,7 @@ using ModbusDemo; ...@@ -20,7 +20,7 @@ using ModbusDemo;
using System.Timers; using System.Timers;
using ModbusDemo.application; using ModbusDemo.application;
using System.Collections; using System.Collections;
using ModbusDemo.Modular;
namespace ModbusDemo namespace ModbusDemo
{ {
public partial class Form1 : Form public partial class Form1 : Form
...@@ -880,7 +880,7 @@ namespace ModbusDemo ...@@ -880,7 +880,7 @@ namespace ModbusDemo
UInt64 time_3 = GetTimeStamp(); UInt64 time_3 = GetTimeStamp();
Modbus_ReadCoilsTask(out EIO, 40, 16, 6, out int signE); Modbus_ReadCoilsTask(out EIO, 40, 16, 6, out int signE);
Modbus_ReadCoilsTask(out SIO,19, 16, 6, out int signS); Modbus_ReadCoilsTask(out SIO, 19, 16, 6, out int signS);
Modbus_ReadCoilsTask(out WIO, 41, 16, 6, out int signW); Modbus_ReadCoilsTask(out WIO, 41, 16, 6, out int signW);
...@@ -1013,123 +1013,56 @@ namespace ModbusDemo ...@@ -1013,123 +1013,56 @@ namespace ModbusDemo
switch (ExceptionCode.Trim()) switch (ExceptionCode.Trim())
{ {
case "1": case "1":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
break; break;
case "2": case "2":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
break; break;
case "3": case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
break; break;
case "4": case "4":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
break; break;
case "5": case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
break; break;
case "6": case "6":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
break; break;
case "8": case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
break; break;
case "A": case "A":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
break; break;
case "B": case "B":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!"); Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!"); totxt.Log("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY TARGET DEVICE FAILED TO RESPOND!"); //MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY TARGET DEVICE FAILED TO RESPOND!");
break; break;
} }
return; return;
} }
} }
finally finally
{ {
if (sign == -1)
{
pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
ushort bAddress = 8;
ushort[] bChannel = new ushort[pcDeviceAlarm.usChannelNumber];
pcDeviceAlarm.eAlarmCode[] eAlarmCode = new pcDeviceAlarm.eAlarmCode[pcDeviceAlarm.usChannelNumber];
for (ushort i = 0; i < pcDeviceAlarm.usChannelNumber; i++)
{
eAlarmCode[i] = pcDeviceAlarm.eAlarmCode.ChannelCommunError;
}
pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
}
if (sign == -1)
{
pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
ushort bAddress = 8;
ushort[] bChannel = new ushort[pcDeviceAlarm.usChannelNumber];
pcDeviceAlarm.eAlarmCode[] eAlarmCode = new pcDeviceAlarm.eAlarmCode[pcDeviceAlarm.usChannelNumber];
for (ushort i = 0; i < pcDeviceAlarm.usChannelNumber; i++)
{
eAlarmCode[i] = pcDeviceAlarm.eAlarmCode.ChannelCollectDataError;
}
pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
}
if (sign == -1)
{
pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
ushort bAddress = 8;
ushort[] bChannel = new ushort[pcDeviceAlarm.usChannelNumber];
pcDeviceAlarm.eAlarmCode[] eAlarmCode = new pcDeviceAlarm.eAlarmCode[pcDeviceAlarm.usChannelNumber];
for (ushort i = 0; i < pcDeviceAlarm.usChannelNumber; i++)
{
eAlarmCode[i] = pcDeviceAlarm.eAlarmCode.ChannelDataRespError;
}
pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
}
if (sign == -1)
{
pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
ushort bAddress = 8;
ushort[] bChannel = new ushort[pcDeviceAlarm.usChannelNumber];
pcDeviceAlarm.eAlarmCode[] eAlarmCode = new pcDeviceAlarm.eAlarmCode[pcDeviceAlarm.usChannelNumber];
for (ushort i = 0; i < pcDeviceAlarm.usChannelNumber; i++)
{
eAlarmCode[i] = pcDeviceAlarm.eAlarmCode.ChannelDataChangeError;
}
pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
}
if (sign == -1)
{
pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
ushort bAddress = 8;
ushort[] bChannel = new ushort[pcDeviceAlarm.usChannelNumber];
pcDeviceAlarm.eAlarmCode[] eAlarmCode = new pcDeviceAlarm.eAlarmCode[pcDeviceAlarm.usChannelNumber];
for (ushort i = 0; i < pcDeviceAlarm.usChannelNumber; i++)
{
eAlarmCode[i] = pcDeviceAlarm.eAlarmCode.ChannelNoError;
}
pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
}
} }
return; return;
...@@ -1683,7 +1616,9 @@ namespace ModbusDemo ...@@ -1683,7 +1616,9 @@ namespace ModbusDemo
private void button2_Click(object sender, EventArgs e) private void button2_Click(object sender, EventArgs e)
{ {
Modbus_polling(); //Modbus_polling();
ModualPoll.vAllNodePoll();
ModualPoll.stAll_Poll_Package();
} }
private async void SubscribeBut_Click(object sender, EventArgs e) private async void SubscribeBut_Click(object sender, EventArgs e)
......
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