Commit be6916d5 authored by shaxuezheng's avatar shaxuezheng

合并线程池与数据轮询

parents 23d54b9c ea27c868
......@@ -233,7 +233,6 @@ namespace ModbusDemo.windows
public String GetVersion(Byte slaveid)
{
int ret;
String version = "0.0";
String ip = "127.0.0.1";
UInt16[] buf = new ushort[2];
......@@ -247,6 +246,5 @@ namespace ModbusDemo.windows
}
return version;
}
}
}
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 : ushort
{
ChannelNoError = 0,
ChannelCommunError = 1,
ChannelCollectDataError = 2,
ChannelDataRespError = 4,
ChannelDataChangeError = 8
}
public void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode,bool bStringIncrease)
{
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);
if (bStringIncrease == true)
{
sAlarmJson += ",";
}
}
public async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{
sAlarmJson = "[" + sAlarmJson + "]";
var message = new MqttApplicationMessageBuilder()
.WithTopic(sAlarmTopic)
.WithPayload(sAlarmJson)
.WithAtMostOnceQoS()
.WithRetainFlag(false)
.Build();
await mqttClient.PublishAsync(message);
}
}
}
......@@ -13,14 +13,30 @@ namespace ModbusDemo.MessageFormat
{
public static class ModbusComm
{
public enum eModbusErrorCode : byte
{
MB_ENOERR, /*!< no error. */
MB_ENOREG, /*!< illegal register address. */
MB_EINVAL, /*!< illegal argument. */
MB_EPORTERR, /*!< porting layer error. */
MB_ENORES, /*!< insufficient resources. */
MB_EIO, /*!< I/O error. */
MB_EILLSTATE, /*!< protocol stack in illegal state. */
MB_ETIMEDOUT, /*!< timeout error occurred. */
MB_EMASTERNOERR, /*!< master mode no error. */
MB_EMASTERERR, /*!< master mode error. */
MB_EMASTERSENT,
MB_RTUERNOERR
}
public static ModbusMaster Modbus;
public static void Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out bool bCommStatus)
public static ushort usCommunFailTimes = 0;
public static eModbusErrorCode Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
eModbusErrorCode ModbusErrorCode;
try
{
OutputValue = Modbus.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
bCommStatus = true;
ModbusErrorCode = eModbusErrorCode.MB_EMASTERNOERR;
}
catch (Exception exception)
{
......@@ -32,7 +48,8 @@ namespace ModbusDemo.MessageFormat
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
OutputValue = new ushort[numberOfPoints];
bCommStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -90,15 +107,17 @@ namespace ModbusDemo.MessageFormat
}
}
OutputValue = new ushort[numberOfPoints];
bCommStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out bool bComStatus)
public static eModbusErrorCode Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
eModbusErrorCode ModbusErrorCode;
try
{
OutputValue = Modbus.ReadCoils(slaveAddress, startAddress, numberOfPoints);
bComStatus = true;
ModbusErrorCode = eModbusErrorCode.MB_EMASTERNOERR;
}
catch (Exception exception)
{
......@@ -110,7 +129,8 @@ namespace ModbusDemo.MessageFormat
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
OutputValue = new bool[numberOfPoints];
bComStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -168,15 +188,17 @@ namespace ModbusDemo.MessageFormat
}
}
OutputValue = new bool[numberOfPoints];
bComStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value, out bool bComStatus)
public static eModbusErrorCode Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value)
{
eModbusErrorCode ModbusErrorCode;
try
{
Modbus.WriteMultipleCoils(slaveAddress, startAddress, value);
bComStatus = true;
ModbusErrorCode = eModbusErrorCode.MB_ENOERR;
}
catch (Exception exception)
{
......@@ -187,7 +209,7 @@ namespace ModbusDemo.MessageFormat
{
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
bComStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -244,86 +266,87 @@ namespace ModbusDemo.MessageFormat
break;
}
}
bComStatus = false;
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
public static void Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data, out bool bComStatus)
public static eModbusErrorCode Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data)
{
eModbusErrorCode ModbusErrorCode;
try
{
try
Modbus.WriteMultipleCoils(slaveAddress, startAddress, data);
ModbusErrorCode = eModbusErrorCode.MB_ENOERR;
}
catch (Exception exception)
{
//Connection exception
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
Modbus.WriteMultipleCoils(slaveAddress, startAddress, data);
bComStatus = true;
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
}
catch (Exception exception)
//The server return error code.
//You can get the function code and exception code.
if (exception.Source.Equals("nModbusPC"))
{
//Connection exception
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
bComStatus = false;
}
//The server return error code.
//You can get the function code and exception code.
if (exception.Source.Equals("nModbusPC"))
{
string str = exception.Message;
int FunctionCode;
string ExceptionCode;
string str = exception.Message;
int FunctionCode;
string ExceptionCode;
str = str.Remove(0, str.IndexOf("\r\n") + 17);
FunctionCode = Convert.ToInt16(str.Remove(str.IndexOf("\r\n")));
Console.WriteLine("Function Code: " + FunctionCode.ToString("X"));
Form1.totxt.Log("Function Code: " + FunctionCode.ToString("X"));
str = str.Remove(0, str.IndexOf("\r\n") + 17);
FunctionCode = Convert.ToInt16(str.Remove(str.IndexOf("\r\n")));
Console.WriteLine("Function Code: " + FunctionCode.ToString("X"));
Form1.totxt.Log("Function Code: " + FunctionCode.ToString("X"));
str = str.Remove(0, str.IndexOf("\r\n") + 17);
ExceptionCode = str.Remove(str.IndexOf("-"));
switch (ExceptionCode.Trim())
{
case "1":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
break;
case "2":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
break;
case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
break;
case "4":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
break;
case "6":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
break;
case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
break;
case "A":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
break;
case "B":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
break;
}
str = str.Remove(0, str.IndexOf("\r\n") + 17);
ExceptionCode = str.Remove(str.IndexOf("-"));
switch (ExceptionCode.Trim())
{
case "1":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
break;
case "2":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data address!");
break;
case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
break;
case "4":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Slave device failure!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
break;
case "6":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> SLAVE DEVICE BUSY !");
break;
case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
break;
case "A":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> GATEWAY PATH UNAVAILABLE !");
break;
case "B":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
Form1.totxt.Log("Exception Code: " + ExceptionCode.Trim() + "---->GATEWAY TARGET DEVICE FAILED TO RESPOND!");
break;
}
bComStatus = false;
}
ModbusErrorCode = eModbusErrorCode.MB_EMASTERERR;
}
return ModbusErrorCode;
}
//private void Init_Read_data()
//{
......
......@@ -21,15 +21,15 @@ namespace ModbusDemo
{
public string addr { get; set; }
public double 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 double d1 { get; set; }
public double d2 { get; set; }
public double d3 { get; set; }
public double d4 { get; set; }
public double d5 { get; set; }
public double d6 { get; set; }
public double d7 { 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.d0 = d0;
......@@ -47,11 +47,11 @@ namespace ModbusDemo
{
public string addr { get; set; }
public double d0 { get; set; }
public int d1 { get; set; }
public int d2 { get; set; }
public int d3 { get; set; }
public double d1 { get; set; }
public double d2 { get; set; }
public double d3 { 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.d0 = d0;
......@@ -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
{
......@@ -225,46 +270,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" />
......@@ -94,11 +93,14 @@
<Compile Include="application\ModbusToPool.cs" />
<Compile Include="application\Pond.cs" />
<Compile Include="application\UsThread.cs" />
<Compile Include="Common\ModualAlarm.cs" />
<Compile Include="MessageFormat\ModbusComm.cs" />
<Compile Include="Modular\414P.cs" />
<Compile Include="Modular\478C.cs" />
<Compile Include="Modular\418X.cs" />
<Compile Include="Common\Modbuslib.cs" />
<Compile Include="Modular\ModualPoll.cs" />
<Compile Include="Modular\modual.cs" />
<Compile Include="windows\Form1.cs">
<SubType>Form</SubType>
</Compile>
......@@ -163,20 +165,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>
......
......@@ -60,7 +60,7 @@ namespace ModbusDemo
users.UserCompany = Strcom[Inputtype[0]];//通道类型
users.UserModel = Inputtype[0];//确定计算公式
/********************/
users1.UserId = 1;//通道
users1.UserId = 1;//通道;
users1.Data = typeData[1];//数据
users1.UserCompany = Strcom[Inputtype[1]];//通道类型
users1.UserModel = Inputtype[1];//确定计算公式
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
using System.Collections;
using MQTTnet;
using MQTTnet.Client;
using Newtonsoft.Json;
namespace ModbusDemo.Modular
{
class ModualPoll
{
public const byte byX14pNumber = 4;
private const byte byX14pReadDataStartAddress = 0;
public const byte byX14pReadDataNumber = 4;
private const byte byX14pReadTypeStartAddress = 10;
private const byte byX14pReadTypeNumber = 4;
public const double dX14pMinCovertData = 0;
public const double dx14pMaxConverData = 60;
public const ushort us14pMaxJumTemper = 10;
public static byte[] byX14pIdlist = { 1,17, 28, 29 };
public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist);
public static _414P c14formulasormual = new _414P();
public const byte byX18xNumber = 8;
private const byte byX18xReadDataStartAddress = 0;
public const byte byX18xReadDataNumber = 8;
private const byte byX18xReadTypeStartAddress = 10;
private const byte byX18xReadTypeNumber = 8;
public const double dX18xMinConvertData = 0;
private const ushort dX18xMaxJumpData = 2;
public static byte[] byX18xIdlist = {3,6,12,13,21,25,45,53};
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.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.Mike_5,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //沉砂池 ID 12
{modual.eX18xSensorChannelType.Mike_7,modual.eX18xSensorChannelType.Weiertai,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null},
{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.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.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}};
public static modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType);
private static _418X c18xformulasormual = new _418X();
public const byte byX78cNumber = 6;
private const byte byX78cInputRegStartAddress = 0;
public const byte byX78cInputRegNumber = 8;
private const byte byX78cOutputRegStartAddress = 16;
public const byte byX78cOutputRegNumber = 8;
public static byte[] byX78cIdlist = {11,20,33,34,55,56};
public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist);
public const byte byX66cNumber = 32;
private const byte byX66cRelayRegStartAddress = 16;
public const byte byX66cRelayRegNumber = 6;
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};
public static modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist);
public static ModualAlarm cModualAlarm = new ModualAlarm();
public static void vAllNodePoll()
{
for (byte i = 0; i < byX14pNumber; i++)
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
string[][] sTempString = new string[byX14pNumber][];
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].usX14pRegData, cx14P.byModbusID[i], byX14pReadDataStartAddress, byX14pReadDataNumber);
ModbusErrorCode |= ModbusComm.Modbus_ReadHoldingRegistersTask(out cx14P.sX14pDataStruct[i].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].usNowAlarmCode[j] = (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (byte j = 0; j < byX14pReadTypeNumber; j++)
{
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
for (byte j = 0; j < byX14pReadTypeNumber; j++)
{
cx14P.sX14pDataStruct[i].dNowConvertData[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].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper && cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper)
{
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
else
{
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
}
cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[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][];
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(cx18x.sX18xDataStruct[i].usRegData, cx18x.sX18xDataStruct[i].usTypeData);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
for (byte j = 0; j < byX18xReadTypeNumber; j++)
{
switch (cx18x.beChannelType[i, j])
{
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.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData)
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError;
}
else
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~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.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].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX78cInputRegNumber + byX78cOutputRegNumber; j++)
{
cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
}
for (byte i = 0; i < byX66cNumber; i++)
{
ModbusComm.eModbusErrorCode ModbusErrorCode = ModbusComm.eModbusErrorCode.MB_EMASTERNOERR;
ModbusErrorCode = ModbusComm.Modbus_ReadCoilsTask(out cx66c.sX66cRegStatusStruct[i].bRegRelayStatus, cx66c.byModbusID[i], byX66cRelayRegStartAddress, byX66cRelayRegNumber);
if (ModbusErrorCode != ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
{
for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{
cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
else
{
for (sbyte j = 0; j < byX66cRelayRegNumber; j++)
{
cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
}
}
}
}
public static string stAll_Poll_Package()
{
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++)
{
ushort[] usChannelErrorlist = { };
ushort[] usChannelErrorCodeList = { };
byte k = 0;
for (byte j = 0; j < byX14pReadDataNumber; 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);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModbusDemo.MessageFormat;
using ModbusDemo.Common;
namespace ModbusDemo.Modular
{
public class modual
{
public struct psx14pData
{
public ushort[] usX14pRegData;
public ushort[] usX14pRegType;
public double[] dNowConvertData;
public double[] dBeforeConvertData;
}
public struct psxModualAlarm
{
public bool bDataNotFirstIncreaseOrDecrease;
public ushort[] usNowAlarmCode;
public ushort[] usBeforeAlarmCode;
}
public class pcx14P
{
public byte[] byModbusID;
public psx14pData[] sX14pDataStruct = new psx14pData[ModualPoll.byX14pNumber];
public psxModualAlarm[] sX14PAlarmStruct = new psxModualAlarm[ModualPoll.byX14pNumber];
public pcx14P(byte[] 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
{
Null = 0,
Weiertai,
Mike_5,
Mike_6,
Mike_7,
Level,
}
public struct psX18xData
{
public ushort[] usRegData;
public ushort[] usTypeData;
public double[] dNowConvertData;
public double[] dBeforeConvertData;
}
public class pcx18X
{
public byte[] byModbusID;
public psX18xData[] sX18xDataStruct = new psX18xData[ModualPoll.byX18xNumber];
public psxModualAlarm[] sX18xAlarmstruct = new psxModualAlarm[ModualPoll.byX18xNumber];
public eX18xSensorChannelType[,] beChannelType;
public pcx18X(byte[] InitIDlist, eX18xSensorChannelType[,] eChannnelType)
{
this.byModbusID = InitIDlist;
this.beChannelType = eChannnelType;
for (byte i = 0; i < ModualPoll.byX18xNumber; i++)
{
this.sX18xDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX18xReadDataNumber];
this.sX18xDataStruct[i].dNowConvertData = new double[ModualPoll.byX18xReadDataNumber];
//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];
}
}
}
public struct psx78C
{
public bool[] bInputRegStatus;
public bool[] bOutPutRegStatus;
}
public class pcx78C
{
public byte[] byModbusID;
public psx78C[] sX78cRegStatusStruct = new psx78C[ModualPoll.byX78cNumber];
public psxModualAlarm[] sX78cAlarmStruct = new psxModualAlarm[ModualPoll.byX78cNumber];
public pcx78C(byte[] 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 bool[] bRegRelayStatus;
}
public class pcx66C
{
public byte[] byModbusID;
public psx66C[] sX66cRegStatusStruct = new psx66C[ModualPoll.byX66cNumber];
public psxModualAlarm[] sX66cAlarmStruct = new psxModualAlarm[ModualPoll.byX66cNumber];
public pcx66C(byte[] 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.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ModbusDemo.windows;
using ModbusDemo;
using ModbusDemo.MessageFormat;
namespace ModbusDemo.application
{
class ModbusToPool
{
public class pcModbusOperationPumb
{
public byte byModbusID;
public ushort[] usRegAddList;
public bool[] bGetStatus;
public bool[] bSetStatus;
public bool[] bOpenStatus;
public bool bCommunicationStatus;
public pcModbusOperationPumb(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{
this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++)
{
this.usRegAddList[i] = usInitRegAddressInit[i];
this.bOpenStatus[i] = bInitOPen[i];
}
}
public bool[] vGet_Module_Channel_Status()
{
ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.bGetStatus;
}
public void vSet_Module_Channel_Status()
{
ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
}
}
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using ModbusDemo.windows;
//using ModbusDemo;
//using ModbusDemo.MessageFormat;
//namespace ModbusDemo.application
//{
// class ModbusToPool
// {
// public class pcModbusOperationPumb
// {
// public byte byModbusID;
// public ushort[] usRegAddList;
// public bool[] bGetStatus;
// public bool[] bSetStatus;
// public bool[] bOpenStatus;
// public bool bCommunicationStatus;
// public pcModbusOperationPumb(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
// {
// this.byModbusID = byInitModbusID;
// for (int i = 0; i < usInitRegAddressInit.Length; i++)
// {
// this.usRegAddList[i] = usInitRegAddressInit[i];
// this.bOpenStatus[i] = bInitOPen[i];
// }
// }
// public bool[] vGet_Module_Channel_Status()
// {
// ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
// return this.bGetStatus;
// }
// public void vSet_Module_Channel_Status()
// {
// ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
// }
// }
public class pcReadPumbOtherData
{
public byte byModbusID;
public ushort[] usRegAddList;
public ushort[] usReadData;
public bool bCommunicationStatus;
public pcReadPumbOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{
this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++)
{
this.usRegAddList[i] = usInitRegAddressInit[i];
}
}
// public class pcReadPumbOtherData
// {
// public byte byModbusID;
// public ushort[] usRegAddList;
// public ushort[] usReadData;
// public bool bCommunicationStatus;
// public pcReadPumbOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
// {
// this.byModbusID = byInitModbusID;
// for (int i = 0; i < usInitRegAddressInit.Length; i++)
// {
// this.usRegAddList[i] = usInitRegAddressInit[i];
// }
// }
public double vRead_Pumb_Data()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.usReadData[0];
}
}
// public double vRead_Pumb_Data()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
// return this.usReadData[0];
// }
// }
public class pcModbusOperationAgitator
{
public byte byModbusID;
public ushort[] usRegAddList;
public bool[] bGetStatus;
public bool[] bSetStatus;
public bool[] bOpenStatus;
public bool bCommunicationStatus;
public pcModbusOperationAgitator(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{
this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++)
{
this.usRegAddList[i] = usInitRegAddressInit[i];
this.bOpenStatus[i] = bInitOPen[i];
}
}
public bool[] vGet_Module_Channel_Status()
{
ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.bGetStatus;
}
public void vSet_Module_Channel_Status()
{
ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
}
}
// public class pcModbusOperationAgitator
// {
// public byte byModbusID;
// public ushort[] usRegAddList;
// public bool[] bGetStatus;
// public bool[] bSetStatus;
// public bool[] bOpenStatus;
// public bool bCommunicationStatus;
// public pcModbusOperationAgitator(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
// {
// this.byModbusID = byInitModbusID;
// for (int i = 0; i < usInitRegAddressInit.Length; i++)
// {
// this.usRegAddList[i] = usInitRegAddressInit[i];
// this.bOpenStatus[i] = bInitOPen[i];
// }
// }
// public bool[] vGet_Module_Channel_Status()
// {
// ModbusComm.Modbus_ReadCoilsTask(out this.bGetStatus, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
// return this.bGetStatus;
// }
// public void vSet_Module_Channel_Status()
// {
// ModbusComm.Modbus_WriteMultipleCoils(this.byModbusID, this.usRegAddList[0], this.bSetStatus, out this.bCommunicationStatus);
// }
// }
public class pcReadAgitatorOtherData
{
public byte byModbusID;
public ushort[] usRegAddList;
public ushort[] usReadData;
public bool bCommunicationStatus;
public pcReadAgitatorOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{
this.byModbusID = byInitModbusID;
for (int i = 0; i < usInitRegAddressInit.Length; i++)
{
this.usRegAddList[i] = usInitRegAddressInit[i];
}
}
// public class pcReadAgitatorOtherData
// {
// public byte byModbusID;
// public ushort[] usRegAddList;
// public ushort[] usReadData;
// public bool bCommunicationStatus;
// public pcReadAgitatorOtherData(byte byInitModbusID, ushort[] usInitRegAddressInit)
// {
// this.byModbusID = byInitModbusID;
// for (int i = 0; i < usInitRegAddressInit.Length; i++)
// {
// this.usRegAddList[i] = usInitRegAddressInit[i];
// }
// }
public double vRead_Agitator_Data()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
return this.usReadData[0];
}
}
// public double vRead_Agitator_Data()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usRegAddList[0], (ushort)this.usRegAddList.Length, out this.bCommunicationStatus);
// return this.usReadData[0];
// }
// }
public class pcPoolTemperature
{
public byte byModbusID;
public ushort usTemperRegAddress;
public ushort usTypeRegAddress;
public ushort[] usReadData;
public ushort[] usReadType;
public bool bCommunicationStatus;
public pcPoolTemperature(byte byInitModbusID, ushort usDataRegAddress, ushort usTypeAddress)
{
this.byModbusID = byInitModbusID;
this.usTemperRegAddress = usDataRegAddress;
this.usTypeRegAddress = usTypeAddress;
}
// public class pcPoolTemperature
// {
// public byte byModbusID;
// public ushort usTemperRegAddress;
// public ushort usTypeRegAddress;
// public ushort[] usReadData;
// public ushort[] usReadType;
// public bool bCommunicationStatus;
// public pcPoolTemperature(byte byInitModbusID, ushort usDataRegAddress, ushort usTypeAddress)
// {
// this.byModbusID = byInitModbusID;
// this.usTemperRegAddress = usDataRegAddress;
// this.usTypeRegAddress = usTypeAddress;
// }
public void vRead_Pumb_Data()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress, 1, out this.bCommunicationStatus);
}
// public void vRead_Pumb_Data()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress, 1, out this.bCommunicationStatus);
// }
public void vRead_Pumb_Type()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress, 1, out this.bCommunicationStatus);
}
}
// public void vRead_Pumb_Type()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress, 1, out this.bCommunicationStatus);
// }
// }
public class pcPoolLevel
{
public byte byModbusID;
public ushort[] usTemperRegAddress;
public ushort[] usTypeRegAddress;
public ushort[] usReadData;
public ushort[] usReadType;
public bool bCommunicationStatus;
public pcPoolLevel(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
{
this.byModbusID = byInitModbusID;
for (int i = 0; i < usDataRegAddress.Length; i++)
{
this.usTemperRegAddress[i] = usDataRegAddress[i];
this.usTypeRegAddress[i] = usDataTypeRegAddress[i];
}
}
// public class pcPoolLevel
// {
// public byte byModbusID;
// public ushort[] usTemperRegAddress;
// public ushort[] usTypeRegAddress;
// public ushort[] usReadData;
// public ushort[] usReadType;
// public bool bCommunicationStatus;
// public pcPoolLevel(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
// {
// this.byModbusID = byInitModbusID;
// for (int i = 0; i < usDataRegAddress.Length; i++)
// {
// this.usTemperRegAddress[i] = usDataRegAddress[i];
// this.usTypeRegAddress[i] = usDataTypeRegAddress[i];
// }
// }
public void vRead_Level_Data()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress[0], (ushort)this.usTemperRegAddress.Length, out this.bCommunicationStatus);
}
// public void vRead_Level_Data()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadData, this.byModbusID, this.usTemperRegAddress[0], (ushort)this.usTemperRegAddress.Length, out this.bCommunicationStatus);
// }
public void vRead_Level_Type()
{
ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress[0], (ushort)this.usTypeRegAddress.Length, out this.bCommunicationStatus);
}
}
// public void vRead_Level_Type()
// {
// ModbusComm.Modbus_ReadHoldingRegistersTask(out this.usReadType, this.byModbusID, this.usTypeRegAddress[0], (ushort)this.usTypeRegAddress.Length, out this.bCommunicationStatus);
// }
// }
}
}
// }
//}
......@@ -77,26 +77,26 @@ namespace ModbusDemo.application
// }
//}
public class pcPump
{
public double dPumpCurrent;
public double dPumpVoltage;
public bool bPumpStatus;
public bool bPumpHasOpen;
public void vOpen_Pump()
{
//public class pcPump
//{
// public double dPumpCurrent;
// public double dPumpVoltage;
// public bool bPumpStatus;
// public bool bPumpHasOpen;
// public void vOpen_Pump()
// {
}
public void vClose_Pump()
{
// }
// public void vClose_Pump()
// {
}
public void vGet_Pump_Status()
{
// }
// public void vGet_Pump_Status()
// {
}
// }
}
//}
public class pcTemperatureData
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
////using System;
////using System.Collections.Generic;
////using System.Linq;
////using System.Text;
////using System.Threading.Tasks;
namespace ModbusDemo.application
{
public struct psTemperData
{
public byte byModbusID;
public ushort usTemperRegAddress;
public ushort usTypeRegAddress;
public psTemperData(byte bySetModbusID, ushort usSetTempRegAddress, ushort usSetRegAddress)
{
this.byModbusID = bySetModbusID;
this.usTemperRegAddress = usSetTempRegAddress;
this.usTypeRegAddress = usSetRegAddress;
}
}
////namespace ModbusDemo.application
////{
//// public struct psTemperData
//// {
//// public byte byModbusID;
//// public ushort usTemperRegAddress;
//// public ushort usTypeRegAddress;
//// public psTemperData(byte bySetModbusID, ushort usSetTempRegAddress, ushort usSetRegAddress)
//// {
//// this.byModbusID = bySetModbusID;
//// this.usTemperRegAddress = usSetTempRegAddress;
//// this.usTypeRegAddress = usSetRegAddress;
//// }
//// }
//// public struct psLevelData
//// {
//// public byte byModbusID;
//// public ushort[] usDataAddressList;
//// public ushort[] usTypeAddressList;
//// public psLevelData(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usDataAddressList = usDataRegAddress;
//// this.usTypeAddressList = usDataTypeRegAddress;
//// }
//// }
//// public struct psBumpOperation
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public bool[] bOpenStatus;
//// public psBumpOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// this.bOpenStatus = bInitOPen;
//// }
//// }
//// public struct psPumbData
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public psPumbData(byte byInitModbusID, ushort[] usInitRegAddressInit)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// }
//// }
//// public struct psAgitatorOperation
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public bool[] bOpenStatus;
//// public psAgitatorOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// this.bOpenStatus = bInitOPen;
//// }
//// }
//// public struct psAgitatorData
//// {
//// public byte byModbusID;
//// public ushort[] usRegAddList;
//// public psAgitatorData(byte byInitModbusID, ushort[] usInitRegAddressInit)
//// {
//// this.byModbusID = byInitModbusID;
//// this.usRegAddList = usInitRegAddressInit;
//// }
//// }
//// static class pcPoolInit
//// {
//// private static psTemperData sTemper = new psTemperData(1, 1, 10);
//// private static ModbusToPool.pcPoolTemperature cPoolTemperature = new ModbusToPool.pcPoolTemperature(sTemper.byModbusID, sTemper.usTemperRegAddress, sTemper.usTypeRegAddress);
//// public static double Get_Current_temper()
//// {
//// cPoolTemperature.vRead_Pumb_Data();
//// cPoolTemperature.vRead_Pumb_Type();
//// return cPoolTemperature.usReadData[0];
//// }
public struct psLevelData
{
public byte byModbusID;
public ushort[] usDataAddressList;
public ushort[] usTypeAddressList;
public psLevelData(byte byInitModbusID, ushort[] usDataRegAddress, ushort[] usDataTypeRegAddress)
{
this.byModbusID = byInitModbusID;
this.usDataAddressList = usDataRegAddress;
this.usTypeAddressList = usDataTypeRegAddress;
}
}
//// public const sbyte PoolLevelNumber = 1;
//// static ushort[] usLevelDataReg = { 1};
//// static ushort[] usLevelTypeReg = { 16 };
//// 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) };
//// public static double Get_Current_Level()
//// {
//// ushort usPoolLevel = 0;
//// sbyte NormalDataNumber = 0;
//// for (short i = 0; i < cPoolLevel.Length; i++)
//// {
//// cPoolLevel[i].vRead_Level_Data();
//// 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)
//// {
//// usPoolLevel += cPoolLevel[i].usReadData[0];
//// NormalDataNumber++;
//// }
//// }
//// return usPoolLevel/ NormalDataNumber;
//// }
public struct psBumpOperation
{
public byte byModbusID;
public ushort[] usRegAddList;
public bool[] bOpenStatus;
public psBumpOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{
this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit;
this.bOpenStatus = bInitOPen;
}
}
//// public const sbyte PoolBumpOperatNumber = 1;
//// static ushort[] usBumpOperatReg = { 16, 17 };
//// static bool[] usBumpOpenStatus = { true, false };
//// 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 struct psPumbData
{
public byte byModbusID;
public ushort[] usRegAddList;
public psPumbData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{
this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit;
}
}
//// public const sbyte PoolBumpCurrentNumber = 1;
//// static ushort[] usBumpCurrentDataReg = { 1 };
//// 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 struct psAgitatorOperation
{
public byte byModbusID;
public ushort[] usRegAddList;
public bool[] bOpenStatus;
public psAgitatorOperation(byte byInitModbusID, ushort[] usInitRegAddressInit, bool[] bInitOPen)
{
this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit;
this.bOpenStatus = bInitOPen;
}
}
//// public const sbyte PoolBumpVoltageNumber = 1;
//// static ushort[] usBumpVoltageReg = { 1 };
//// 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 struct psAgitatorData
{
public byte byModbusID;
public ushort[] usRegAddList;
public psAgitatorData(byte byInitModbusID, ushort[] usInitRegAddressInit)
{
this.byModbusID = byInitModbusID;
this.usRegAddList = usInitRegAddressInit;
}
}
static class pcPoolInit
{
private static psTemperData sTemper = new psTemperData(1, 1, 10);
private static ModbusToPool.pcPoolTemperature cPoolTemperature = new ModbusToPool.pcPoolTemperature(sTemper.byModbusID, sTemper.usTemperRegAddress, sTemper.usTypeRegAddress);
public static double Get_Current_temper()
{
cPoolTemperature.vRead_Pumb_Data();
cPoolTemperature.vRead_Pumb_Type();
return cPoolTemperature.usReadData[0];
}
public const sbyte PoolLevelNumber = 1;
static ushort[] usLevelDataReg = { 1};
static ushort[] usLevelTypeReg = { 16 };
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) };
public static double Get_Current_Level()
{
ushort usPoolLevel = 0;
sbyte NormalDataNumber = 0;
for (short i = 0; i < cPoolLevel.Length; i++)
{
cPoolLevel[i].vRead_Level_Data();
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)
{
usPoolLevel += cPoolLevel[i].usReadData[0];
NormalDataNumber++;
}
}
return usPoolLevel/ NormalDataNumber;
}
//// public const sbyte PoolAgitatorOperatNumber = 1;
//// static ushort[] usAgitatorOperatReg = { 16,17 };
//// static bool[] usAgitatorOpenStatus = { true, true };
//// 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 const sbyte PoolBumpOperatNumber = 1;
static ushort[] usBumpOperatReg = { 16, 17 };
static bool[] usBumpOpenStatus = { true, false };
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 const sbyte PoolAgitatorCurrentNumber = 1;
//// static ushort[] usAgitatorCurrentDataReg = {1};
//// 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 const sbyte PoolBumpCurrentNumber = 1;
static ushort[] usBumpCurrentDataReg = { 1 };
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 const sbyte PoolAgitatorVoltageNumber = 1;
//// static ushort[] usAgitatorVoltageReg = { 1 };
//// 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 class pcBump
//// {
//// 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 bool[] bBumpStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public bool[] bpcBumpHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
public const sbyte PoolBumpVoltageNumber = 1;
static ushort[] usBumpVoltageReg = { 1 };
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 void vOpen_Bump(ushort usPumbNumber)
//// {
//// try
//// {
//// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
//// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
//// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
//// this.bpcBumpHasOpen[usPumbNumber] = true;
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Open Operation Error");
//// throw;
//// }
//// }
//// public void vClose_Bump(ushort usPumbNumber)
//// {
//// try
//// {
//// for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
//// {
//// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
//// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
//// this.bpcBumpHasOpen[usPumbNumber] = false;
//// }
//// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Close Operation Error");
//// throw;
//// }
//// }
public const sbyte PoolAgitatorOperatNumber = 1;
static ushort[] usAgitatorOperatReg = { 16,17 };
static bool[] usAgitatorOpenStatus = { true, true };
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 bool[] vGet_Pumb_Status(ushort usPumbNumber)
//// {
//// try
//// {
//// return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Bump Read Status Error");
//// throw;
//// }
//// }
//// }
//// public class pcAgitator
//// {
//// 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 bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
public const sbyte PoolAgitatorCurrentNumber = 1;
static ushort[] usAgitatorCurrentDataReg = {1};
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 void vOpen_Agitator(ushort usAgitatorNumber)
//// {
//// try
//// {
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
//// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
//// this.bAgitatorHasOpen[usAgitatorNumber] = true;
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Open Operation Error");
//// throw;
//// }
//// }
//// public void vClose_Agitator(ushort usAgitatorNumber)
//// {
//// try
//// {
//// for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
//// {
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
//// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
//// this.bAgitatorHasOpen[usAgitatorNumber] = false;
//// }
//// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
//// }
//// catch(Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Close Operation Error");
//// throw;
//// }
//// }
public const sbyte PoolAgitatorVoltageNumber = 1;
static ushort[] usAgitatorVoltageReg = { 1 };
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 class pcBump
{
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 bool[] bBumpStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
public bool[] bpcBumpHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
//// public bool[] vGet_Agitator_Status(ushort usAgitatorNumber)
//// {
//// try
//// {
//// return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
//// }
//// catch (Exception exception)
//// {
//// Form1.totxt.Log(exception + "Agitator Read Status Error");
//// throw;
//// }
//// }
//// }
//// public class pcPool
//// {
//// public string ePondName;
//// public double dMaxlevel;//液位最低水位
//// public double dMinlevel;//液位最高水位
public void vOpen_Bump(ushort usPumbNumber)
{
try
{
pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
this.bpcBumpHasOpen[usPumbNumber] = true;
}
catch (Exception exception)
{
Form1.totxt.Log(exception+"Bump Open Operation Error");
throw;
}
}
public void vClose_Bump(ushort usPumbNumber)
{
try
{
for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
{
pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
this.bpcBumpHasOpen[usPumbNumber] = false;
}
pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
}
catch (Exception exception)
{
Form1.totxt.Log(exception+"Bump Close Operation Error");
throw;
}
}
//<<<<<<< HEAD
// public void vOpen_Bump(ushort usPumbNumber)
// {
// try
// {
// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus = pcPoolInit.cPumbOperat[usPumbNumber].bOpenStatus;
// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
// this.bpcBumpHasOpen[usPumbNumber] = true;
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Open Operation Error");
// throw;
// }
// }
// public void vClose_Bump(ushort usPumbNumber)
// {
// try
// {
// for (short i = 0; i < pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus.Length; i++)
// {
// pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i] = !pcPoolInit.cPumbOperat[usPumbNumber].bSetStatus[i];
// this.bBumpStatus[usPumbNumber] = pcPoolInit.cPumbOperat[usPumbNumber].bCommunicationStatus;
// this.bpcBumpHasOpen[usPumbNumber] = false;
// }
// pcPoolInit.cPumbOperat[usPumbNumber].vSet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Close Operation Error");
// throw;
// }
// }
public bool[] vGet_Pumb_Status(ushort usPumbNumber)
{
try
{
return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
}
catch (Exception exception)
{
Form1.totxt.Log(exception+"Bump Read Status Error");
throw;
}
}
}
// public bool[] vGet_Pumb_Status(ushort usPumbNumber)
// {
// try
// {
// return pcPoolInit.cPumbOperat[usPumbNumber].vGet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Bump Read Status Error");
// throw;
// }
// }
// }
public class pcAgitator
{
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 bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
// public class pcAgitator
// {
// 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 bool[] bAgitatorStatus = new bool[pcPoolInit.PoolBumpOperatNumber];
// public bool[] bAgitatorHasOpen = new bool[pcPoolInit.PoolBumpOperatNumber];
public void vOpen_Bump(ushort usAgitatorNumber)
{
try
{
pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
this.bAgitatorHasOpen[usAgitatorNumber] = true;
}
catch (Exception exception)
{
Form1.totxt.Log(exception +"Agitator Open Operation Error");
throw;
}
}
public void vClose_Bump(ushort usAgitatorNumber)
{
try
{
for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
{
pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
this.bAgitatorHasOpen[usAgitatorNumber] = false;
}
pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
}
catch(Exception exception)
{
Form1.totxt.Log(exception+"Agitator Close Operation Error");
throw;
}
}
// public void vOpen_Bump(ushort usAgitatorNumber)
// {
// try
// {
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bOpenStatus;
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
// this.bAgitatorHasOpen[usAgitatorNumber] = true;
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception +"Agitator Open Operation Error");
// throw;
// }
// }
// public void vClose_Bump(ushort usAgitatorNumber)
// {
// try
// {
// for (short i = 0; i < pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus.Length; i++)
// {
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i] = !pcPoolInit.cAgitatorOperat[usAgitatorNumber].bSetStatus[i];
// this.bAgitatorStatus[usAgitatorNumber] = pcPoolInit.cAgitatorOperat[usAgitatorNumber].bCommunicationStatus;
// this.bAgitatorHasOpen[usAgitatorNumber] = false;
// }
// pcPoolInit.cAgitatorOperat[usAgitatorNumber].vSet_Module_Channel_Status();
// }
// catch(Exception exception)
// {
// Form1.totxt.Log(exception+"Agitator Close Operation Error");
// throw;
// }
// }
public bool[] vGet_Pumb_Status(ushort usAgitatorNumber)
{
try
{
return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
}
catch (Exception exception)
{
Form1.totxt.Log(exception+"Agitator Read Status Error");
throw;
}
}
}
// public bool[] vGet_Pumb_Status(ushort usAgitatorNumber)
// {
// try
// {
// return pcPoolInit.cAgitatorOperat[usAgitatorNumber].vGet_Module_Channel_Status();
// }
// catch (Exception exception)
// {
// Form1.totxt.Log(exception+"Agitator Read Status Error");
// throw;
// }
// }
// }
public class pcPool
{
public string ePondName;
// public class pcPool
// {
// public string ePondName;
public double dMaxlevel;//液位最低水位
public double dMinlevel;//液位最高水位
// public double dMaxlevel;//液位最低水位
// public double dMinlevel;//液位最高水位
public double dMaxTemper;
public double dMinTemper;
// public double dMaxTemper;
// public double dMinTemper;
public pcPump cPump;
public pcAgitator cAgitator;
public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
public pcPool(string eInitPondName)
{
this.ePondName = eInitPondName;
// public pcPump cPump;
// public pcAgitator cAgitator;
// public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
// public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
// public pcPool(string eInitPondName)
// {
// this.ePondName = eInitPondName;
}
}
}
// }
// }
//}
//=======
//// public double dMaxTemper;
//// public double dMinTemper;
//// public pcBump cBump;
//// public pcAgitator cAgitator;
//// public double dPondCurrentLevel { get => pcPoolInit.Get_Current_Level(); }
//// public double dPondCurentTemper { get => pcPoolInit.Get_Current_temper(); }
//// public pcPool(string eInitPondName)
//// {
//// this.ePondName = eInitPondName;
//// }
//// }
////}
//>>>>>>> origin/master
......@@ -59,6 +59,8 @@
this.label4 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
this.SubscribeBut = new System.Windows.Forms.Button();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.updateops.SuspendLayout();
this.SuspendLayout();
//
......@@ -323,7 +325,7 @@
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(44, 492);
this.label2.Location = new System.Drawing.Point(44, 487);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(69, 20);
......@@ -343,7 +345,7 @@
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(108, 498);
this.label4.Location = new System.Drawing.Point(108, 492);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(55, 15);
......@@ -372,11 +374,31 @@
this.SubscribeBut.UseVisualStyleBackColor = true;
this.SubscribeBut.Click += new System.EventHandler(this.SubscribeBut_Click);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(111, 528);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(55, 15);
this.label5.TabIndex = 99;
this.label5.Text = "label5";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(23, 528);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(82, 15);
this.label6.TabIndex = 100;
this.label6.Text = "超时次数:";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1184, 672);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.SubscribeBut);
this.Controls.Add(this.button2);
this.Controls.Add(this.label4);
......@@ -441,5 +463,7 @@
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button SubscribeBut;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
}
}
\ No newline at end of file
......@@ -20,7 +20,7 @@ using ModbusDemo;
using System.Timers;
using ModbusDemo.application;
using System.Collections;
using ModbusDemo.Modular;
namespace ModbusDemo
{
public partial class Form1 : Form
......@@ -539,7 +539,7 @@ namespace ModbusDemo
private void GetData()
{
timer.Interval = 5000;
timer.Interval = 9000;
timer.Enabled = true;
timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
timer.Start();
......@@ -588,8 +588,16 @@ namespace ModbusDemo
}
}
#region PoolTest
//pcPool cPool1 = new pcPool("East_transfer_pond");
//double PoolTemper = 0;
#endregion
//声明委托
public static ushort usCommunFailTimes = 0;
private delegate void ShowMessageDelegate(string message);
private void ShowMessage(string message)
{
......@@ -606,6 +614,7 @@ namespace ModbusDemo
}
public void Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out int Caution)
{
label5.Text= usCommunFailTimes.ToString();
try
{
OutputValue = master.ReadHoldingRegisters(slaveAddress, startAddress, numberOfPoints);
......@@ -623,6 +632,7 @@ namespace ModbusDemo
totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
OutputValue = new ushort[numberOfPoints];
Caution = -1;
usCommunFailTimes++;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -685,6 +695,7 @@ namespace ModbusDemo
}
public void Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints, out int Caution)
{
label5.Text = usCommunFailTimes.ToString();
try
{
OutputValue = master.ReadCoils(slaveAddress, startAddress, numberOfPoints);
......@@ -702,6 +713,7 @@ namespace ModbusDemo
totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
OutputValue = new bool [numberOfPoints];
Caution = -1;
usCommunFailTimes++;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -764,6 +776,7 @@ namespace ModbusDemo
}
public void Modbus_WriteSingleCoil(out bool OutputValue, byte slaveAddress, ushort startAddress, bool value, out int Caution)
{
label5.Text = usCommunFailTimes.ToString();
try
{
master.WriteSingleCoil(slaveAddress, startAddress, value);
......@@ -782,6 +795,7 @@ namespace ModbusDemo
totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
OutputValue = false;
Caution = -1;
usCommunFailTimes++;
}
//The server return error code.
//You can get the function code and exception code.
......@@ -865,36 +879,33 @@ namespace ModbusDemo
int[] EOnOff = { 0 };
int[] SOnOff = { 0 };
int[] WOnOff = { 0 };
Modbus_ReadHoldingRegistersTask(out temperature, 1, 0, 4, out int signT);
Modbus_ReadHoldingRegistersTask(out type, 1, 10, 4, out sign);
Modbus_ReadHoldingRegistersTask(out temperature, 27, 0, 4, out int signT);
Modbus_ReadHoldingRegistersTask(out type, 27, 10, 4, out sign);
UInt64 time_1 = GetTimeStamp();
Modbus_ReadHoldingRegistersTask(out register, 3, 0, 8, out int signr);
Modbus_ReadHoldingRegistersTask(out Inputtype, 3, 10, 8, out int signI);
Modbus_ReadHoldingRegistersTask(out register, 21, 0, 8, out int signr);
Modbus_ReadHoldingRegistersTask(out Inputtype, 21, 10, 8, out int signI);
UInt64 time_2 = GetTimeStamp();
Modbus_ReadHoldingRegistersTask(out registerN, 6, 0, 8, out int signre);
Modbus_ReadHoldingRegistersTask(out InputtypeN, 6, 10, 8, out int signIn);
Modbus_ReadHoldingRegistersTask(out registerN, 53, 0, 8, out int signre);
Modbus_ReadHoldingRegistersTask(out InputtypeN, 53, 10, 8, out int signIn);
UInt64 time_3 = GetTimeStamp();
Modbus_ReadCoilsTask(out EIO, 5, 16, 6, out int signE);
Modbus_ReadCoilsTask(out EIO, 40, 16, 6, out int signE);
Modbus_ReadCoilsTask(out SIO, 8, 16, 6, out int signS);
Modbus_ReadCoilsTask(out SIO, 19, 16, 6, out int signS);
Modbus_ReadCoilsTask(out WIO, 4, 16, 6, out int signW);
Modbus_ReadCoilsTask(out WIO, 41, 16, 6, out int signW);
if (sign == -1)
{
//if (sign == -1 || signT ==-1|| signW ==-1 || signr == -1 || signI == -1 || signre == -1 || signIn == -1 || signE == -1 || signS == -1)
//{
// vs = null;
// type = null;
// EastTemperature = 0;
// Easternwaterlevel = 0;
// WestWaterLevel = 0;
//}
}
//else
//{
vs = rtd.RtdValue(temperature, type);
EastTemperature = float.Parse(vs[0]);
s = Analog.Value(register, Inputtype);
//(实时电流值 - 设定电流最小值) /(20Ma - 设定电流最小值) *设定测量最大值
//(实时电流值 - 4ma) /(20ma - 4ma) *设定测量最大值(也就是设定的满量程)
Easternwaterlevel = (float.Parse(s[0]) - 4) / 16 * 6;
s6 = Analog.Value(registerN, InputtypeN);
WestWaterLevel = (float.Parse(s6[0]) - 4) / 16 * 6;
......@@ -905,18 +916,16 @@ namespace ModbusDemo
WOnOff = state.IO(WIO); ////东南北水
//}
WTDR14P x = new WTDR14P("1", EastTemperature, 0, 0, 0, time_1);
WTDR18X p = new WTDR18X("3", Easternwaterlevel, 0, 0, 0, 0, 0, 0, 0, time_2);
WTDR18X q = new WTDR18X("6", WestWaterLevel, 0, 0, 0, 0, 0, 0, 0, time_3);
WTDR14P x = new WTDR14P("27", EastTemperature, 0, 0, 0, time_1);
WTDR18X p = new WTDR18X("21", Easternwaterlevel, 0, 0, 0, 0, 0, 0, 0, time_2);
WTDR18X q = new WTDR18X("53", WestWaterLevel, 0, 0, 0, 0, 0, 0, 0, time_3);
//东搅拌
WTDR66C EastStir = new WTDR66C("5", EOnOff[0], EOnOff[1], EOnOff[2], EOnOff[3], EOnOff[4], EOnOff[5], GetTimeStamp());
WTDR66C EastStir = new WTDR66C("40", EOnOff[0], EOnOff[1], EOnOff[2], EOnOff[3], EOnOff[4], EOnOff[5], GetTimeStamp());
//东南北水
WTDR66C WestStir = new WTDR66C("4", WOnOff[0], WOnOff[1], WOnOff[2], WOnOff[3], WOnOff[4], WOnOff[5], GetTimeStamp());
WTDR66C WestStir = new WTDR66C("41", WOnOff[0], WOnOff[1], WOnOff[2], WOnOff[3], WOnOff[4], WOnOff[5], GetTimeStamp());
//西搅拌
WTDR66C SouthWater = new WTDR66C("8", SOnOff[0], SOnOff[1], SOnOff[2], SOnOff[3], SOnOff[4], SOnOff[5], GetTimeStamp());
WTDR66C SouthWater = new WTDR66C("19", SOnOff[0], SOnOff[1], SOnOff[2], SOnOff[3], SOnOff[4], SOnOff[5], GetTimeStamp());
mqttData = "[" +
JsonConvert.SerializeObject(x) + "," +
......@@ -926,10 +935,63 @@ namespace ModbusDemo
JsonConvert.SerializeObject(WestStir) + "," +
JsonConvert.SerializeObject(SouthWater)
+ "]";
}
// Modbus_ReadHoldingRegistersTask(out temperature, 1, 0, 4, out int signT);
// Modbus_ReadHoldingRegistersTask(out type, 1, 10, 4, out sign);
// UInt64 time_1 = GetTimeStamp();
// Modbus_ReadHoldingRegistersTask(out register, 3, 0, 8, out int signr);
// Modbus_ReadHoldingRegistersTask(out Inputtype, 3, 10, 8, out int signI);
// UInt64 time_2 = GetTimeStamp();
// Modbus_ReadHoldingRegistersTask(out registerN, 6, 0, 8, out int signre);
// Modbus_ReadHoldingRegistersTask(out InputtypeN, 6, 10, 8, out int signIn);
// UInt64 time_3 = GetTimeStamp();
// Modbus_ReadCoilsTask(out EIO, 5, 16, 6, out int signE);
// Modbus_ReadCoilsTask(out SIO, 8, 16, 6, out int signS);
// Modbus_ReadCoilsTask(out WIO, 4, 16, 6, out int signW);
// if (sign == -1)
// {
// }
// //else
// //{
// vs = rtd.RtdValue(temperature, type);
// EastTemperature = float.Parse(vs[0]);
// s = Analog.Value(register, Inputtype);
// Easternwaterlevel = (float.Parse(s[0]) - 4) / 16 * 6;
// s6 = Analog.Value(registerN, InputtypeN);
// WestWaterLevel = (float.Parse(s6[0]) - 4) / 16 * 6;
// label3.Text = EastTemperature.ToString();
// label4.Text = Easternwaterlevel.ToString();
// EOnOff = state.IO(EIO);////东中转池
// SOnOff = state.IO(SIO);////西中转池
// WOnOff = state.IO(WIO); ////东南北水
// //}
// WTDR14P x = new WTDR14P("1", EastTemperature, 0, 0, 0, time_1);
// WTDR18X p = new WTDR18X("3", Easternwaterlevel, 0, 0, 0, 0, 0, 0, 0, time_2);
// WTDR18X q = new WTDR18X("6", WestWaterLevel, 0, 0, 0, 0, 0, 0, 0, time_3);
// //东搅拌
// WTDR66C EastStir = new WTDR66C("5", EOnOff[0], EOnOff[1], EOnOff[2], EOnOff[3], EOnOff[4], EOnOff[5], GetTimeStamp());
// //东南北水
// WTDR66C WestStir = new WTDR66C("4", WOnOff[0], WOnOff[1], WOnOff[2], WOnOff[3], WOnOff[4], WOnOff[5], GetTimeStamp());
// //西搅拌
// WTDR66C SouthWater = new WTDR66C("8", SOnOff[0], SOnOff[1], SOnOff[2], SOnOff[3], SOnOff[4], SOnOff[5], GetTimeStamp());
// mqttData = "[" +
// JsonConvert.SerializeObject(x) + "," +
// JsonConvert.SerializeObject(p) + "," +
// JsonConvert.SerializeObject(q) + "," +
// JsonConvert.SerializeObject(EastStir) + "," +
// JsonConvert.SerializeObject(WestStir) + "," +
// JsonConvert.SerializeObject(SouthWater)
// + "]";
//}
catch (Exception exception)
{
//Connection exception
......@@ -961,123 +1023,56 @@ namespace ModbusDemo
switch (ExceptionCode.Trim())
{
case "1":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
break;
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> Illegal function!");
break;
case "2":
Console.WriteLine("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!");
break;
Console.WriteLine("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!");
break;
case "3":
Console.WriteLine("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!");
break;
Console.WriteLine("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!");
break;
case "4":
Console.WriteLine("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!");
break;
Console.WriteLine("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!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
break;
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
//MessageBox.Show("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
break;
case "6":
Console.WriteLine("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 !");
break;
Console.WriteLine("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 !");
break;
case "8":
Console.WriteLine("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 !");
break;
Console.WriteLine("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 !");
break;
case "A":
Console.WriteLine("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 !");
break;
Console.WriteLine("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 !");
break;
case "B":
Console.WriteLine("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!");
break;
Console.WriteLine("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!");
break;
}
return;
}
}
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;
......@@ -1631,7 +1626,9 @@ namespace ModbusDemo
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)
......
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