Commit c60c7f7f authored by shaxuezheng's avatar shaxuezheng

Modify Form1.cs

parents 4559c01e ae9d62a8
...@@ -9,14 +9,12 @@ using MQTTnet.Client; ...@@ -9,14 +9,12 @@ using MQTTnet.Client;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace ModbusDemo.Common namespace ModbusDemo.Common
{ {
public class ModualAlarm public static class ModualAlarm
{ {
public const ushort usChannelNumber = 8; public const ushort usChannelNumber = 8;
private const string sAlarmTopic = "Witium/WTDS78X/20193261/Alarm"; private const string sAlarmTopic = "Witium/WTDS78X/66666666/Alarm";
public Hashtable hMqtttAlarmMap = new Hashtable(); public static string sAlarmJson;
public bool bErrorHasSend = false; public static string sAlarmJsonPackage;
private string sAlarmJson;
private string sAlarmJsonPackage;
//private IMqttClient mqttClient = null; //private IMqttClient mqttClient = null;
public enum eAlarmCode : ushort public enum eAlarmCode : ushort
{ {
...@@ -26,9 +24,10 @@ namespace ModbusDemo.Common ...@@ -26,9 +24,10 @@ namespace ModbusDemo.Common
ChannelDataRespError = 4, ChannelDataRespError = 4,
ChannelDataChangeError = 8 ChannelDataChangeError = 8
} }
public void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode,bool bStringIncrease) public static void vSetAlarmList(ushort usAddress, ushort[] usChannel, ushort[] usChannelAlarmcode)
{ {
ushort i = 0; ushort i = 0;
Hashtable hMqtttAlarmMap = new Hashtable();
hMqtttAlarmMap.Add("addr", usAddress.ToString()); hMqtttAlarmMap.Add("addr", usAddress.ToString());
string sAlarm = "alm"; string sAlarm = "alm";
foreach (ushort usdata in usChannelAlarmcode) foreach (ushort usdata in usChannelAlarmcode)
...@@ -37,15 +36,15 @@ namespace ModbusDemo.Common ...@@ -37,15 +36,15 @@ namespace ModbusDemo.Common
i++; i++;
} }
hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp()); hMqtttAlarmMap.Add("ts", Form1.GetTimeStamp());
sAlarmJson += JsonConvert.SerializeObject(hMqtttAlarmMap); if (sAlarmJson != "[")
if (bStringIncrease == true)
{ {
sAlarmJson += ","; sAlarmJson += ",";
} }
sAlarmJson += JsonConvert.SerializeObject(hMqtttAlarmMap);
} }
public async Task vPublishAlarmPackageJson(IMqttClient mqttClient) public static async Task vPublishAlarmPackageJson(IMqttClient mqttClient)
{ {
sAlarmJson = "[" + sAlarmJson + "]";
var message = new MqttApplicationMessageBuilder() var message = new MqttApplicationMessageBuilder()
.WithTopic(sAlarmTopic) .WithTopic(sAlarmTopic)
.WithPayload(sAlarmJson) .WithPayload(sAlarmJson)
......
...@@ -13,6 +13,7 @@ namespace ModbusDemo.windows ...@@ -13,6 +13,7 @@ namespace ModbusDemo.windows
private string logFile; private string logFile;
private StreamWriter writer; private StreamWriter writer;
private FileStream fileStream = null; private FileStream fileStream = null;
private static object oTxtLock = new object();
public Totxt(string fileName) public Totxt(string fileName)
{ {
logFile = fileName; logFile = fileName;
...@@ -20,6 +21,8 @@ namespace ModbusDemo.windows ...@@ -20,6 +21,8 @@ namespace ModbusDemo.windows
} }
public void Log(string info) public void Log(string info)
{
lock (oTxtLock)
{ {
try try
{ {
...@@ -36,17 +39,6 @@ namespace ModbusDemo.windows ...@@ -36,17 +39,6 @@ namespace ModbusDemo.windows
} }
writer.WriteLine(DateTime.Now + ": " + info); writer.WriteLine(DateTime.Now + ": " + info);
} }
catch (Exception e)
{
if (writer != null)
{
writer.Close();
writer.Dispose();
fileStream.Close();
fileStream.Dispose();
}
throw;
}
finally finally
{ {
if (writer != null) if (writer != null)
...@@ -58,7 +50,7 @@ namespace ModbusDemo.windows ...@@ -58,7 +50,7 @@ namespace ModbusDemo.windows
} }
} }
} }
}
public void CreateDirectory(string infoPath) public void CreateDirectory(string infoPath)
{ {
DirectoryInfo directoryInfo = Directory.GetParent(infoPath); DirectoryInfo directoryInfo = Directory.GetParent(infoPath);
......
...@@ -31,6 +31,9 @@ namespace ModbusDemo.MessageFormat ...@@ -31,6 +31,9 @@ namespace ModbusDemo.MessageFormat
public static ModbusMaster Modbus; public static ModbusMaster Modbus;
public static ushort usCommunFailTimes = 0; public static ushort usCommunFailTimes = 0;
public static eModbusErrorCode Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints) public static eModbusErrorCode Modbus_ReadHoldingRegistersTask(out ushort[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
object oLock = new object();
lock (oLock)
{ {
eModbusErrorCode ModbusErrorCode; eModbusErrorCode ModbusErrorCode;
try try
...@@ -46,7 +49,7 @@ namespace ModbusDemo.MessageFormat ...@@ -46,7 +49,7 @@ namespace ModbusDemo.MessageFormat
if (exception.Source.Equals("System")) if (exception.Source.Equals("System"))
{ {
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message); Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_ReadHoldingRegistersTask");
OutputValue = new ushort[numberOfPoints]; OutputValue = new ushort[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
...@@ -111,7 +114,11 @@ namespace ModbusDemo.MessageFormat ...@@ -111,7 +114,11 @@ namespace ModbusDemo.MessageFormat
} }
return ModbusErrorCode; return ModbusErrorCode;
} }
}
public static eModbusErrorCode Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints) public static eModbusErrorCode Modbus_ReadCoilsTask(out bool[] OutputValue, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
{
object oLock = new object();
lock (oLock)
{ {
eModbusErrorCode ModbusErrorCode; eModbusErrorCode ModbusErrorCode;
try try
...@@ -127,7 +134,7 @@ namespace ModbusDemo.MessageFormat ...@@ -127,7 +134,7 @@ namespace ModbusDemo.MessageFormat
if (exception.Source.Equals("System")) if (exception.Source.Equals("System"))
{ {
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message); Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_ReadCoilsTask");
OutputValue = new bool[numberOfPoints]; OutputValue = new bool[numberOfPoints];
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++; usCommunFailTimes++;
...@@ -192,7 +199,11 @@ namespace ModbusDemo.MessageFormat ...@@ -192,7 +199,11 @@ namespace ModbusDemo.MessageFormat
} }
return ModbusErrorCode; return ModbusErrorCode;
} }
}
public static eModbusErrorCode Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value) public static eModbusErrorCode Modbus_WriteSingleCoil(byte slaveAddress, ushort startAddress, bool[] value)
{
object oLock = new object();
lock (oLock)
{ {
eModbusErrorCode ModbusErrorCode; eModbusErrorCode ModbusErrorCode;
try try
...@@ -208,8 +219,9 @@ namespace ModbusDemo.MessageFormat ...@@ -208,8 +219,9 @@ namespace ModbusDemo.MessageFormat
if (exception.Source.Equals("System")) if (exception.Source.Equals("System"))
{ {
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message); Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteSingleCoil");
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++;
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
...@@ -270,7 +282,11 @@ namespace ModbusDemo.MessageFormat ...@@ -270,7 +282,11 @@ namespace ModbusDemo.MessageFormat
} }
return ModbusErrorCode; return ModbusErrorCode;
} }
}
public static eModbusErrorCode Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data) public static eModbusErrorCode Modbus_WriteMultipleCoils(byte slaveAddress, ushort startAddress, bool[] data)
{
object oLock = new object();
lock (oLock)
{ {
eModbusErrorCode ModbusErrorCode; eModbusErrorCode ModbusErrorCode;
try try
...@@ -286,8 +302,9 @@ namespace ModbusDemo.MessageFormat ...@@ -286,8 +302,9 @@ namespace ModbusDemo.MessageFormat
if (exception.Source.Equals("System")) if (exception.Source.Equals("System"))
{ {
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message); Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message); Form1.totxt.Log(DateTime.Now.ToString() + " " + exception.Message + "Modbus_WriteMultipleCoils");
ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT; ModbusErrorCode = eModbusErrorCode.MB_ETIMEDOUT;
usCommunFailTimes++;
} }
//The server return error code. //The server return error code.
//You can get the function code and exception code. //You can get the function code and exception code.
...@@ -348,103 +365,6 @@ namespace ModbusDemo.MessageFormat ...@@ -348,103 +365,6 @@ namespace ModbusDemo.MessageFormat
} }
return ModbusErrorCode; return ModbusErrorCode;
} }
//private void Init_Read_data() }
//{
//}
//private async void Modbus_polling()
//{
// float EastTemperature = 0;
// float Easternwaterlevel = 0;
// float WestWaterLevel = 0;
//ushort[] temperature = { };
//ushort[] type = { };
//string[] vs = { };
//string[] s = { };
//string[] s6 = { };
//ushort[] register = { };
//ushort[] Inputtype = { };
//ushort[] registerN = { };
//ushort[] InputtypeN = { };
//bool[] EIO = { };
//bool[] SIO = { };
//bool[] WIO = { };
//int[] EOnOff = { 0 };
//int[] SOnOff = { 0 };
//int[] WOnOff = { 0 };
//pcDeviceAlarm pcDeviceAlarmdata = new pcDeviceAlarm();
//Modbus_ReadHoldingRegistersTask(out temperature, 1, 0, 4, out int signT);
//Modbus_ReadHoldingRegistersTask(out type, 1, 10, 4, out int sign);
//UInt64 time_1 = Form1.GetTimeStamp();
//Modbus_ReadHoldingRegistersTask(out register, 3, 0, 8, out int signr);
//Modbus_ReadHoldingRegistersTask(out Inputtype, 3, 10, 8, out int signI);
//UInt64 time_2 = Form1.GetTimeStamp();
//Modbus_ReadHoldingRegistersTask(out registerN, 6, 0, 8, out int signre);
//Modbus_ReadHoldingRegistersTask(out InputtypeN, 6, 10, 8, out int signIn);
//UInt64 time_3 = Form1.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)
//{
// ushort bAddress = 1;
// 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.CommunError;
// }
// pcDeviceAlarmdata.vSetAlarmList(bAddress, bChannel, eAlarmCode);
// await pcDeviceAlarmdata.vPublishAlarmPackageJson(mqttClient);
//}
//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);
//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], Form1.GetTimeStamp());
////东南北水
//WTDR66C WestStir = new WTDR66C("4", WOnOff[0], WOnOff[1], WOnOff[2], WOnOff[3], WOnOff[4], WOnOff[5], Form1.GetTimeStamp());
////西搅拌
//WTDR66C SouthWater = new WTDR66C("8", SOnOff[0], SOnOff[1], SOnOff[2], SOnOff[3], SOnOff[4], SOnOff[5], Form1.GetTimeStamp());
// mqttData = "[" +
// JsonConvert.SerializeObject(x) + "," +
// JsonConvert.SerializeObject(p) + "," +
// JsonConvert.SerializeObject(q) + "," +
// JsonConvert.SerializeObject(EastStir) + "," +
// JsonConvert.SerializeObject(WestStir) + "," +
// JsonConvert.SerializeObject(SouthWater)
// + "]";
//}
} }
} }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using Newtonsoft.Json;
namespace ModbusDemo.MessageFormat
{
public class ModualControl
{
public class Op
{
public UInt64 duration { get; set; }
public UInt64 startTime { 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 UInt64 ts { get; set; }
}
public class SsItem
{
public string addr { get; set; }
public Op op { get; set; }
}
public class MqttRoot
{
public string taskId { get; set; }
public List<SsItem> ss { get; set; }
}
public static List<MqttRoot> liModuualControl = new List<MqttRoot>();
public static void vGetaWay_Receive_Control(string sDataString)
{
MqttRoot cControl = JsonConvert.DeserializeObject<MqttRoot>(sDataString);
}
}
}
...@@ -132,7 +132,6 @@ namespace ModbusDemo ...@@ -132,7 +132,6 @@ namespace ModbusDemo
} }
public class Ctrl public class Ctrl
{ {
public string taskId; public string taskId;
public void settaskId(string taskId) public void settaskId(string taskId)
{ {
......
...@@ -2,6 +2,20 @@ ...@@ -2,6 +2,20 @@
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<SSDTUnitTestPath Condition="'$(SSDTUnitTestPath)' == ''">$(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB</SSDTUnitTestPath> <SSDTUnitTestPath Condition="'$(SSDTUnitTestPath)' == ''">$(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB</SSDTUnitTestPath>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<SSDTPath Condition="'$(SSDTPath)' == ''">$(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130</SSDTPath> <SSDTPath Condition="'$(SSDTPath)' == ''">$(VsInstallRoot)\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130</SSDTPath>
...@@ -22,20 +36,6 @@ ...@@ -22,20 +36,6 @@
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<IsWebBootstrapper>false</IsWebBootstrapper> <IsWebBootstrapper>false</IsWebBootstrapper>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>TRACE;DEBUG;DEBUG_TEST</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
...@@ -78,7 +78,6 @@ ...@@ -78,7 +78,6 @@
<HintPath>..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll</HintPath> <HintPath>..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
...@@ -94,6 +93,7 @@ ...@@ -94,6 +93,7 @@
<Compile Include="application\Pond.cs" /> <Compile Include="application\Pond.cs" />
<Compile Include="application\UsThread.cs" /> <Compile Include="application\UsThread.cs" />
<Compile Include="Common\ModualAlarm.cs" /> <Compile Include="Common\ModualAlarm.cs" />
<Compile Include="MessageFormat\ModualControl.cs" />
<Compile Include="MessageFormat\ModbusComm.cs" /> <Compile Include="MessageFormat\ModbusComm.cs" />
<Compile Include="Modular\414P.cs" /> <Compile Include="Modular\414P.cs" />
<Compile Include="Modular\478C.cs" /> <Compile Include="Modular\478C.cs" />
...@@ -167,11 +167,11 @@ ...@@ -167,11 +167,11 @@
<ItemGroup /> <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<SsdtUnitTestVersion>3.1</SsdtUnitTestVersion> <!-- <SsdtUnitTestVersion>3.1</SsdtUnitTestVersion> -->
</PropertyGroup> <!-- </PropertyGroup> -->
<Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" /> <!-- <Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" /> -->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' == ''" /> <!-- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' == ''" /> -->
<PropertyGroup> <!-- <PropertyGroup> -->
<SsdtUnitTestVersion>3.1</SsdtUnitTestVersion> <SsdtUnitTestVersion>3.1</SsdtUnitTestVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" /> <Import Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.Sql.UnitTesting.targets" Condition="$(VisualStudioVersion) != '15.0' And '$(SQLDBExtensionsRefPath)' != ''" />
......
...@@ -9,61 +9,77 @@ using System.Collections; ...@@ -9,61 +9,77 @@ using System.Collections;
using MQTTnet; using MQTTnet;
using MQTTnet.Client; using MQTTnet.Client;
using Newtonsoft.Json; using Newtonsoft.Json;
using ModbusDemo;
namespace ModbusDemo.Modular namespace ModbusDemo.Modular
{ {
class ModualPoll class ModualPoll
{ {
public const byte byX14pNumber = 4; #if DEBUG_TEST
public const byte byX14pNumber = 1;
public static byte[] byX14pIdlist = {27};
private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }};
#else
public const byte byX14pNumber = 2;
public static byte[] byX14pIdlist = { 1,17};
private static modual.eX14pSensorChannelType[,] sX14pChannelType = new modual.eX14pSensorChannelType[byX14pNumber, byX14pReadTypeNumber] { { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }, { modual.eX14pSensorChannelType.Normal, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null, modual.eX14pSensorChannelType.Null }};
#endif
private const byte byX14pReadDataStartAddress = 0; private const byte byX14pReadDataStartAddress = 0;
public const byte byX14pReadDataNumber = 4; public const byte byX14pReadDataNumber = 4;
private const byte byX14pReadTypeStartAddress = 10; private const byte byX14pReadTypeStartAddress = 10;
private const byte byX14pReadTypeNumber = 4; private const byte byX14pReadTypeNumber = 4;
public const double dX14pMinCovertData = 0; public const double dX14pMinCovertData = 0;
public const double dx14pMaxConverData = 60; public const double dx14pMaxConverData = 60;
public const ushort us14pMaxJumTemper = 10; public const ushort us14pMaxJumTemper = 10;
public static byte[] byX14pIdlist = { 1,17, 28, 29 }; public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist, sX14pChannelType);
public static modual.pcx14P cx14P = new modual.pcx14P(byX14pIdlist);
public static _414P c14formulasormual = new _414P(); public static _414P c14formulasormual = new _414P();
#if DEBUG_TEST
public const byte byX18xNumber = 8; public const byte byX18xNumber = 1;
public static byte[] byX18xIdlist = {13};
private static modual.eX18xSensorChannelType[,] sX18xChannelType = new modual.eX18xSensorChannelType[byX18xNumber, byX18xReadDataNumber] { { 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 }};
#else
public const byte byX18xNumber = 6;
public static byte[] byX18xIdlist = {3,53,6,12,21,25};
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.NormalCurrent,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //东中转池 ID 53
{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_6,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_5,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}, //沉砂池 ID 12
{modual.eX18xSensorChannelType.Mike_6,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null,modual.eX18xSensorChannelType.Null}}; //匀浆池 ID 25
#endif
private const byte byX18xReadDataStartAddress = 0; private const byte byX18xReadDataStartAddress = 0;
public const byte byX18xReadDataNumber = 8; public const byte byX18xReadDataNumber = 8;
private const byte byX18xReadTypeStartAddress = 10; private const byte byX18xReadTypeStartAddress = 10;
private const byte byX18xReadTypeNumber = 8; private const byte byX18xReadTypeNumber = 8;
public const double dX18xMinConvertData = 0; public const double dX18xMinConvertData = 0;
public const double dX18xMaxConvertData = 80;
private const ushort dX18xMaxJumpData = 2; 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); public static modual.pcx18X cx18x = new modual.pcx18X(byX18xIdlist, sX18xChannelType);
private static _418X c18xformulasormual = new _418X(); private static _418X c18xformulasormual = new _418X();
#if DEBUG_TEST
public const byte byX78cNumber = 6; public const byte byX78cNumber = 1;
public static byte[] byX78cIdlist = {20};
#else
public const byte byX78cNumber = 0;
public static byte[] byX78cIdlist = {11,20,33,34,55,56};
#endif
private const byte byX78cInputRegStartAddress = 0; private const byte byX78cInputRegStartAddress = 0;
public const byte byX78cInputRegNumber = 8; public const byte byX78cInputRegNumber = 8;
private const byte byX78cOutputRegStartAddress = 16; private const byte byX78cOutputRegStartAddress = 16;
public const byte byX78cOutputRegNumber = 8; public const byte byX78cOutputRegNumber = 8;
public static byte[] byX78cIdlist = {11,20,33,34,55,56};
public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist); public static modual.pcx78C cx78c = new modual.pcx78C(byX78cIdlist);
#if DEBUG_TEST
public const byte byX66cNumber = 2;
public static byte[] byX66cIdlist = {16,31};
#else
public const byte byX66cNumber = 32; public const byte byX66cNumber = 32;
public static byte[] byX66cIdlist = {4,5,7,8,9,10,14,15,19,22,23,24,26,30,32,36,37,38,40,41,42,43,44,46,47,48,49,50,51,52,54,57};
#endif
private const byte byX66cRelayRegStartAddress = 16; private const byte byX66cRelayRegStartAddress = 16;
public const byte byX66cRelayRegNumber = 6; 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 modual.pcx66C cx66c = new modual.pcx66C(byX66cIdlist);
public static ModualAlarm cModualAlarm = new ModualAlarm();
public static void vAllNodePoll() public static void vAllNodePoll()
{ {
...@@ -88,17 +104,28 @@ namespace ModbusDemo.Modular ...@@ -88,17 +104,28 @@ namespace ModbusDemo.Modular
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
for (byte j = 0; j < byX14pReadTypeNumber; j++) for (byte j = 0; j < byX14pReadTypeNumber; j++)
{ {
cx14P.sX14pDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]); cx14P.sX14pDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]);
//if (cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] <= dX14pMinCovertData || cx14P.sX14pDataStruct[i].dX14pNowConvertData[j] >= dx14pMaxConverData ) if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
//{ {
// cx14P.sX14PAlarmStruct[i].eNowAlarmCode[j] |= ModualAlarm.eAlarmCode.ChannelCollectDataError; switch (cx14P.eChannelType[i, j])
//} {
if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true) case modual.eX14pSensorChannelType.Normal:
cx14P.sX14pDataStruct[i].dNowConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j];
break;
case modual.eX14pSensorChannelType.Null:
cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0;
break;
}
}
else
{
cx14P.sX14pDataStruct[i].dNowConvertData[j] = 0;
}
if (cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease == true && sX14pChannelType[i,j] != modual.eX14pSensorChannelType.Null)
{ {
if (cx14P.sX14pDataStruct[i].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper && cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper) if (cx14P.sX14pDataStruct[i].dNowConvertData[j] - cx14P.sX14pDataStruct[i].dBeforeConvertData[j] >= us14pMaxJumTemper || cx14P.sX14pDataStruct[i].dBeforeConvertData[j] - cx14P.sX14pDataStruct[i].dNowConvertData[j] >= us14pMaxJumTemper)
{ {
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
...@@ -107,6 +134,14 @@ namespace ModbusDemo.Modular ...@@ -107,6 +134,14 @@ namespace ModbusDemo.Modular
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError; cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
} }
if (cx14P.sX14pDataStruct[i].dNowConvertData[j] >= dx14pMaxConverData && sX14pChannelType[i, j] != modual.eX14pSensorChannelType.Null)
{
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCollectDataError;
}
else
{
cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCollectDataError;
}
cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j]; cx14P.sX14pDataStruct[i].dBeforeConvertData[j] = cx14P.sX14pDataStruct[i].dNowConvertData[j];
} }
cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true; cx14P.sX14PAlarmStruct[i].bDataNotFirstIncreaseOrDecrease = true;
...@@ -130,10 +165,9 @@ namespace ModbusDemo.Modular ...@@ -130,10 +165,9 @@ namespace ModbusDemo.Modular
{ {
for (sbyte j = 0; j < byX18xReadTypeNumber; j++) for (sbyte j = 0; j < byX18xReadTypeNumber; j++)
{ {
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCommunError;
} }
} }
for (byte j = 0; j < byX18xReadTypeNumber ; j++) for (byte j = 0; j < byX18xReadTypeNumber ; j++)
{ {
if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR) if (ModbusErrorCode == ModbusComm.eModbusErrorCode.MB_EMASTERNOERR)
...@@ -152,6 +186,9 @@ namespace ModbusDemo.Modular ...@@ -152,6 +186,9 @@ namespace ModbusDemo.Modular
case modual.eX18xSensorChannelType.Mike_7: case modual.eX18xSensorChannelType.Mike_7:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 7 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 7); cx18x.sX18xDataStruct[i].dNowConvertData[j] = 7 - ((double.Parse(sTempString[i][j]) - 4) / 16 * 7);
break; break;
case modual.eX18xSensorChannelType.NormalCurrent:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = double.Parse(sTempString[i][j]);
break;
case modual.eX18xSensorChannelType.Null: case modual.eX18xSensorChannelType.Null:
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0; cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0;
break; break;
...@@ -163,7 +200,7 @@ namespace ModbusDemo.Modular ...@@ -163,7 +200,7 @@ namespace ModbusDemo.Modular
{ {
cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0; cx18x.sX18xDataStruct[i].dNowConvertData[j] = 0;
} }
if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true) if (cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease == true && sX18xChannelType[i,j] != modual.eX18xSensorChannelType.Null)
{ {
if (cx18x.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData) if (cx18x.sX18xDataStruct[i].dNowConvertData[j] - cx18x.sX18xDataStruct[i].dBeforeConvertData[j] >= dX18xMaxJumpData || cx18x.sX18xDataStruct[i].dBeforeConvertData[j] - cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxJumpData)
{ {
...@@ -174,6 +211,14 @@ namespace ModbusDemo.Modular ...@@ -174,6 +211,14 @@ namespace ModbusDemo.Modular
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError; cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelDataChangeError;
} }
} }
if ((cx18x.sX18xDataStruct[i].dNowConvertData[j] >= dX18xMaxConvertData || cx18x.sX18xDataStruct[i].dNowConvertData[j] <= dX18xMinConvertData) && sX18xChannelType[i, j] != modual.eX18xSensorChannelType.Null)
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] |= (ushort)ModualAlarm.eAlarmCode.ChannelCollectDataError;
}
else
{
cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] &= (ushort)~ModualAlarm.eAlarmCode.ChannelCollectDataError;
}
cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j]; cx18x.sX18xDataStruct[i].dBeforeConvertData[j] = cx18x.sX18xDataStruct[i].dNowConvertData[j];
} }
cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease = true; cx18x.sX18xAlarmstruct[i].bDataNotFirstIncreaseOrDecrease = true;
...@@ -266,80 +311,105 @@ namespace ModbusDemo.Modular ...@@ -266,80 +311,105 @@ namespace ModbusDemo.Modular
public static async void vCheckAlarm_And_Send(IMqttClient mqttClient) public static async void vCheckAlarm_And_Send(IMqttClient mqttClient)
{ {
bool bOccurErrorChange = false; bool bOccurErrorChange = false;
ModualAlarm.sAlarmJson = "[";
for (byte i = 0; i < byX14pNumber; i++) for (byte i = 0; i < byX14pNumber; i++)
{ {
ushort[] usChannelErrorlist = { }; bool bX14pError = false;
ushort[] usChannelErrorCodeList = { }; List<ushort> usChannelErrorlist = new List<ushort>();
byte k = 0; List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX14pReadDataNumber; j++) for (byte j = 0; j < byX14pReadDataNumber; j++)
{ {
if (cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] != cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j]) if (cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j] != cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j])
{ {
bOccurErrorChange = true; bOccurErrorChange = true;
usChannelErrorlist[k++] = j; bX14pError = true;
usChannelErrorCodeList[k++] = (ushort)cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j]; usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j]);
} }
cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j]; cx14P.sX14PAlarmStruct[i].usBeforeAlarmCode[j] = cx14P.sX14PAlarmStruct[i].usNowAlarmCode[j];
} }
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList,true); if (bX14pError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSetAlarmList(cx14P.byModbusID[i], usChannelList, usCodeList);
}
} }
for (byte i = 0; i < byX18xNumber; i++) for (byte i = 0; i < byX18xNumber; i++)
{ {
ushort[] usChannelErrorlist = { }; bool bX18xError = false;
ushort[] usChannelErrorCodeList = { }; List<ushort> usChannelErrorlist = new List<ushort>();
byte k = 0; List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX18xReadTypeNumber; j++) for (byte j = 0; j < byX18xReadTypeNumber; j++)
{ {
if (cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] != cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j]) if (cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j] != cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j])
{ {
bX18xError = true;
bOccurErrorChange = true; bOccurErrorChange = true;
usChannelErrorlist[k++] = j; usChannelErrorlist.Add (j);
usChannelErrorCodeList[k++] = (ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]; usChannelErrorCodeList.Add((ushort)cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]);
} }
cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j]; cx18x.sX18xAlarmstruct[i].usBeforeAlarmCode[j] = cx18x.sX18xAlarmstruct[i].usNowAlarmCode[j];
} }
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList,true); if (bX18xError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSetAlarmList(cx18x.byModbusID[i], usChannelList, usCodeList);
}
} }
for (byte i = 0; i < byX78cNumber; i++) for (byte i = 0; i < byX78cNumber; i++)
{ {
ushort[] usChannelErrorlist = { }; bool bX78CError = false;
ushort[] usChannelErrorCodeList = { }; List<ushort> usChannelErrorlist = new List<ushort>();
byte k = 0; List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX78cOutputRegNumber + byX78cInputRegNumber; j++) for (byte j = 0; j < byX78cOutputRegNumber + byX78cInputRegNumber; j++)
{ {
if (cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] != cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j]) if (cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j] != cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j])
{ {
bOccurErrorChange = true; bOccurErrorChange = true;
usChannelErrorlist[k++] = j; bX78CError = true;
usChannelErrorCodeList[k++] = (ushort)cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j]; usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j]);
} }
cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j] = cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j]; cx78c.sX78cAlarmStruct[i].usBeforeAlarmCode[j] = cx78c.sX78cAlarmStruct[i].usNowAlarmCode[j];
} }
cModualAlarm.vSetAlarmList(i, usChannelErrorlist, usChannelErrorCodeList, true); if (bX78CError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSetAlarmList(cx78c.byModbusID[i], usChannelList, usCodeList);
}
} }
for (byte i = 0; i < byX66cNumber; i++) for (byte i = 0; i < byX66cNumber; i++)
{ {
ushort[] usChannelErrorlist = { }; bool bX66cError = false;
ushort[] usChannelErrorCodeList = { }; List<ushort> usChannelErrorlist = new List<ushort>();
byte k = 0; List<ushort> usChannelErrorCodeList = new List<ushort>();
for (byte j = 0; j < byX66cRelayRegNumber; j++) for (byte j = 0; j < byX66cRelayRegNumber; j++)
{ {
if (cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] != cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j]) if (cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j] != cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j])
{ {
bOccurErrorChange = true; bOccurErrorChange = true;
usChannelErrorlist[k++] = j; bX66cError = true;
usChannelErrorCodeList[k++] = (ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j]; usChannelErrorlist.Add(j);
usChannelErrorCodeList.Add((ushort)cx66c.sX66cAlarmStruct[i].usNowAlarmCode[j]);
} }
cx66c.sX66cAlarmStruct[i].usBeforeAlarmCode[j] = 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 (bX66cError == true)
{
ushort[] usChannelList = usChannelErrorlist.ToArray();
ushort[] usCodeList = usChannelErrorCodeList.ToArray();
ModualAlarm.vSetAlarmList(cx66c.byModbusID[i], usChannelList, usCodeList);
}
} }
if (bOccurErrorChange == true) if (bOccurErrorChange == true)
{ {
await cModualAlarm.vPublishAlarmPackageJson(mqttClient); ModualAlarm.sAlarmJson += "]";
await ModualAlarm.vPublishAlarmPackageJson(mqttClient);
} }
} }
} }
......
...@@ -16,21 +16,27 @@ namespace ModbusDemo.Modular ...@@ -16,21 +16,27 @@ namespace ModbusDemo.Modular
public double[] dNowConvertData; public double[] dNowConvertData;
public double[] dBeforeConvertData; public double[] dBeforeConvertData;
} }
public enum eX14pSensorChannelType : byte
{
Normal = 0,
Null,
}
public struct psxModualAlarm public struct psxModualAlarm
{ {
public bool bDataNotFirstIncreaseOrDecrease; public bool bDataNotFirstIncreaseOrDecrease;
public ushort[] usNowAlarmCode; public ushort[] usNowAlarmCode;
public ushort[] usBeforeAlarmCode; public ushort[] usBeforeAlarmCode;
} }
public class pcx14P public class pcx14P
{ {
public byte[] byModbusID; public byte[] byModbusID;
public psx14pData[] sX14pDataStruct = new psx14pData[ModualPoll.byX14pNumber]; public psx14pData[] sX14pDataStruct = new psx14pData[ModualPoll.byX14pNumber];
public psxModualAlarm[] sX14PAlarmStruct = new psxModualAlarm[ModualPoll.byX14pNumber]; public psxModualAlarm[] sX14PAlarmStruct = new psxModualAlarm[ModualPoll.byX14pNumber];
public pcx14P(byte[] InitIDlist) public eX14pSensorChannelType[,] eChannelType;
public pcx14P(byte[] InitIDlist, eX14pSensorChannelType[,] ChannelType)
{ {
this.byModbusID = InitIDlist; this.byModbusID = InitIDlist;
this.eChannelType = ChannelType;
for (byte i = 0; i < ModualPoll.byX14pNumber; i++) for (byte i = 0; i < ModualPoll.byX14pNumber; i++)
{ {
this.sX14pDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX14pReadDataNumber]; this.sX14pDataStruct[i].dBeforeConvertData = new double[ModualPoll.byX14pReadDataNumber];
...@@ -49,7 +55,7 @@ namespace ModbusDemo.Modular ...@@ -49,7 +55,7 @@ namespace ModbusDemo.Modular
Mike_5, Mike_5,
Mike_6, Mike_6,
Mike_7, Mike_7,
Level, NormalCurrent,
} }
public struct psX18xData public struct psX18xData
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
"1", "1",
"2"}); "2"});
this.cmbStopBit.Location = new System.Drawing.Point(461, 98); this.cmbStopBit.Location = new System.Drawing.Point(461, 98);
this.cmbStopBit.Margin = new System.Windows.Forms.Padding(4); this.cmbStopBit.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cmbStopBit.Name = "cmbStopBit"; this.cmbStopBit.Name = "cmbStopBit";
this.cmbStopBit.Size = new System.Drawing.Size(73, 24); this.cmbStopBit.Size = new System.Drawing.Size(73, 24);
this.cmbStopBit.TabIndex = 70; this.cmbStopBit.TabIndex = 70;
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
this.btCloseCOM.Enabled = false; this.btCloseCOM.Enabled = false;
this.btCloseCOM.Font = new System.Drawing.Font("Arial", 8F); this.btCloseCOM.Font = new System.Drawing.Font("Arial", 8F);
this.btCloseCOM.Location = new System.Drawing.Point(432, 130); this.btCloseCOM.Location = new System.Drawing.Point(432, 130);
this.btCloseCOM.Margin = new System.Windows.Forms.Padding(4); this.btCloseCOM.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btCloseCOM.Name = "btCloseCOM"; this.btCloseCOM.Name = "btCloseCOM";
this.btCloseCOM.Size = new System.Drawing.Size(104, 29); this.btCloseCOM.Size = new System.Drawing.Size(104, 29);
this.btCloseCOM.TabIndex = 72; this.btCloseCOM.TabIndex = 72;
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
"1-Odd Parity", "1-Odd Parity",
"2-Even Parity"}); "2-Even Parity"});
this.cmbParity.Location = new System.Drawing.Point(311, 98); this.cmbParity.Location = new System.Drawing.Point(311, 98);
this.cmbParity.Margin = new System.Windows.Forms.Padding(4); this.cmbParity.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cmbParity.Name = "cmbParity"; this.cmbParity.Name = "cmbParity";
this.cmbParity.Size = new System.Drawing.Size(132, 24); this.cmbParity.Size = new System.Drawing.Size(132, 24);
this.cmbParity.TabIndex = 69; this.cmbParity.TabIndex = 69;
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
// //
this.btOpenCOM.Font = new System.Drawing.Font("Arial", 8F); this.btOpenCOM.Font = new System.Drawing.Font("Arial", 8F);
this.btOpenCOM.Location = new System.Drawing.Point(311, 130); this.btOpenCOM.Location = new System.Drawing.Point(311, 130);
this.btOpenCOM.Margin = new System.Windows.Forms.Padding(4); this.btOpenCOM.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btOpenCOM.Name = "btOpenCOM"; this.btOpenCOM.Name = "btOpenCOM";
this.btOpenCOM.Size = new System.Drawing.Size(104, 29); this.btOpenCOM.Size = new System.Drawing.Size(104, 29);
this.btOpenCOM.TabIndex = 71; this.btOpenCOM.TabIndex = 71;
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
"7", "7",
"8"}); "8"});
this.cmbDataBit.Location = new System.Drawing.Point(236, 98); this.cmbDataBit.Location = new System.Drawing.Point(236, 98);
this.cmbDataBit.Margin = new System.Windows.Forms.Padding(4); this.cmbDataBit.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cmbDataBit.Name = "cmbDataBit"; this.cmbDataBit.Name = "cmbDataBit";
this.cmbDataBit.Size = new System.Drawing.Size(63, 24); this.cmbDataBit.Size = new System.Drawing.Size(63, 24);
this.cmbDataBit.TabIndex = 68; this.cmbDataBit.TabIndex = 68;
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
"57600", "57600",
"115200"}); "115200"});
this.cmbBaud.Location = new System.Drawing.Point(123, 98); this.cmbBaud.Location = new System.Drawing.Point(123, 98);
this.cmbBaud.Margin = new System.Windows.Forms.Padding(4); this.cmbBaud.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cmbBaud.Name = "cmbBaud"; this.cmbBaud.Name = "cmbBaud";
this.cmbBaud.Size = new System.Drawing.Size(100, 24); this.cmbBaud.Size = new System.Drawing.Size(100, 24);
this.cmbBaud.TabIndex = 67; this.cmbBaud.TabIndex = 67;
...@@ -201,7 +201,7 @@ ...@@ -201,7 +201,7 @@
// //
this.cmbPort.Font = new System.Drawing.Font("Arial", 8F); this.cmbPort.Font = new System.Drawing.Font("Arial", 8F);
this.cmbPort.Location = new System.Drawing.Point(16, 98); this.cmbPort.Location = new System.Drawing.Point(16, 98);
this.cmbPort.Margin = new System.Windows.Forms.Padding(4); this.cmbPort.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.cmbPort.Name = "cmbPort"; this.cmbPort.Name = "cmbPort";
this.cmbPort.Size = new System.Drawing.Size(99, 24); this.cmbPort.Size = new System.Drawing.Size(99, 24);
this.cmbPort.TabIndex = 65; this.cmbPort.TabIndex = 65;
...@@ -225,7 +225,7 @@ ...@@ -225,7 +225,7 @@
this.txtReceiveMessage.Multiline = true; this.txtReceiveMessage.Multiline = true;
this.txtReceiveMessage.Name = "txtReceiveMessage"; this.txtReceiveMessage.Name = "txtReceiveMessage";
this.txtReceiveMessage.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.txtReceiveMessage.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.txtReceiveMessage.Size = new System.Drawing.Size(600, 640); this.txtReceiveMessage.Size = new System.Drawing.Size(677, 660);
this.txtReceiveMessage.TabIndex = 77; this.txtReceiveMessage.TabIndex = 77;
this.txtReceiveMessage.TextChanged += new System.EventHandler(this.txtReceiveMessage_TextChanged); this.txtReceiveMessage.TextChanged += new System.EventHandler(this.txtReceiveMessage_TextChanged);
// //
...@@ -238,9 +238,9 @@ ...@@ -238,9 +238,9 @@
this.updateops.Controls.Add(this.UpdateBar); this.updateops.Controls.Add(this.UpdateBar);
this.updateops.Controls.Add(this.UpdateBtn); this.updateops.Controls.Add(this.UpdateBtn);
this.updateops.Location = new System.Drawing.Point(20, 218); this.updateops.Location = new System.Drawing.Point(20, 218);
this.updateops.Margin = new System.Windows.Forms.Padding(4); this.updateops.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.updateops.Name = "updateops"; this.updateops.Name = "updateops";
this.updateops.Padding = new System.Windows.Forms.Padding(4); this.updateops.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.updateops.Size = new System.Drawing.Size(516, 139); this.updateops.Size = new System.Drawing.Size(516, 139);
this.updateops.TabIndex = 92; this.updateops.TabIndex = 92;
this.updateops.TabStop = false; this.updateops.TabStop = false;
...@@ -268,7 +268,7 @@ ...@@ -268,7 +268,7 @@
// choosebth // choosebth
// //
this.choosebth.Location = new System.Drawing.Point(243, 81); this.choosebth.Location = new System.Drawing.Point(243, 81);
this.choosebth.Margin = new System.Windows.Forms.Padding(4); this.choosebth.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.choosebth.Name = "choosebth"; this.choosebth.Name = "choosebth";
this.choosebth.Size = new System.Drawing.Size(100, 29); this.choosebth.Size = new System.Drawing.Size(100, 29);
this.choosebth.TabIndex = 3; this.choosebth.TabIndex = 3;
...@@ -289,7 +289,7 @@ ...@@ -289,7 +289,7 @@
// UpdateBar // UpdateBar
// //
this.UpdateBar.Location = new System.Drawing.Point(77, 25); this.UpdateBar.Location = new System.Drawing.Point(77, 25);
this.UpdateBar.Margin = new System.Windows.Forms.Padding(4); this.UpdateBar.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.UpdateBar.Name = "UpdateBar"; this.UpdateBar.Name = "UpdateBar";
this.UpdateBar.Size = new System.Drawing.Size(373, 29); this.UpdateBar.Size = new System.Drawing.Size(373, 29);
this.UpdateBar.TabIndex = 1; this.UpdateBar.TabIndex = 1;
...@@ -297,7 +297,7 @@ ...@@ -297,7 +297,7 @@
// UpdateBtn // UpdateBtn
// //
this.UpdateBtn.Location = new System.Drawing.Point(351, 81); this.UpdateBtn.Location = new System.Drawing.Point(351, 81);
this.UpdateBtn.Margin = new System.Windows.Forms.Padding(4); this.UpdateBtn.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.UpdateBtn.Name = "UpdateBtn"; this.UpdateBtn.Name = "UpdateBtn";
this.UpdateBtn.Size = new System.Drawing.Size(100, 29); this.UpdateBtn.Size = new System.Drawing.Size(100, 29);
this.UpdateBtn.TabIndex = 0; this.UpdateBtn.TabIndex = 0;
...@@ -325,7 +325,7 @@ ...@@ -325,7 +325,7 @@
// //
this.label2.AutoSize = true; this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 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, 487); this.label2.Location = new System.Drawing.Point(44, 488);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(69, 20); this.label2.Size = new System.Drawing.Size(69, 20);
...@@ -355,7 +355,7 @@ ...@@ -355,7 +355,7 @@
// button2 // button2
// //
this.button2.Location = new System.Drawing.Point(371, 476); this.button2.Location = new System.Drawing.Point(371, 476);
this.button2.Margin = new System.Windows.Forms.Padding(4); this.button2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.button2.Name = "button2"; this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(100, 29); this.button2.Size = new System.Drawing.Size(100, 29);
this.button2.TabIndex = 97; this.button2.TabIndex = 97;
...@@ -366,7 +366,7 @@ ...@@ -366,7 +366,7 @@
// SubscribeBut // SubscribeBut
// //
this.SubscribeBut.Location = new System.Drawing.Point(371, 432); this.SubscribeBut.Location = new System.Drawing.Point(371, 432);
this.SubscribeBut.Margin = new System.Windows.Forms.Padding(4); this.SubscribeBut.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.SubscribeBut.Name = "SubscribeBut"; this.SubscribeBut.Name = "SubscribeBut";
this.SubscribeBut.Size = new System.Drawing.Size(100, 29); this.SubscribeBut.Size = new System.Drawing.Size(100, 29);
this.SubscribeBut.TabIndex = 98; this.SubscribeBut.TabIndex = 98;
...@@ -396,7 +396,7 @@ ...@@ -396,7 +396,7 @@
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1184, 672); this.ClientSize = new System.Drawing.Size(1256, 689);
this.Controls.Add(this.label6); this.Controls.Add(this.label6);
this.Controls.Add(this.label5); this.Controls.Add(this.label5);
this.Controls.Add(this.SubscribeBut); this.Controls.Add(this.SubscribeBut);
...@@ -421,7 +421,7 @@ ...@@ -421,7 +421,7 @@
this.Controls.Add(this.cmbPort); this.Controls.Add(this.cmbPort);
this.Controls.Add(this.label7); this.Controls.Add(this.label7);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(4); this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "Form1"; this.Name = "Form1";
this.Text = "牧场项目"; this.Text = "牧场项目";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
......
...@@ -535,20 +535,33 @@ namespace ModbusDemo ...@@ -535,20 +535,33 @@ namespace ModbusDemo
private bool bModbusPollThreadStart = false; private bool bModbusPollThreadStart = false;
private void GetData() private void GetData()
{ {
timer.Interval = 9000;
timer.Enabled = true; //timer.Interval = 12000;
timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); //timer.Enabled = true;
timer.Start(); //timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
timer.Elapsed += (o, a) => //timer.Start();
//timer.Elapsed += (o, a) =>
//{
// SetData();
//};
}
private void vModbusPoll()
{ {
SetData(); while(bModbusPollThreadStart)
}; {
bSetDataIsRunning = true;
totxt.Log("开始执行");
ModualPoll.vAllNodePoll();
mqttData = ModualPoll.stAll_Poll_Package();
ModualPoll.vCheckAlarm_And_Send(mqttClient);
totxt.Log("执行结束");
label5.Text = ModbusComm.usCommunFailTimes.ToString();
}
} }
private void Sendout() private void Sendout()
{ {
Control.CheckForIllegalCrossThreadCalls = false; Control.CheckForIllegalCrossThreadCalls = false;
MQTTTimer.Interval = 7000; MQTTTimer.Interval = 20000;//120500
MQTTTimer.Enabled = true; MQTTTimer.Enabled = true;
MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true); MQTTTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
MQTTTimer.Start(); MQTTTimer.Start();
...@@ -576,14 +589,28 @@ namespace ModbusDemo ...@@ -576,14 +589,28 @@ namespace ModbusDemo
} }
else else
{ {
if (bSetDataIsRunning == false)
{
bSetDataIsRunning = true;
await Task.Run(() => await Task.Run(() =>
{ {
Modbus_polling(); totxt.Log("开始执行");
ModualPoll.vAllNodePoll();
mqttData = ModualPoll.stAll_Poll_Package();
ModualPoll.vCheckAlarm_And_Send(mqttClient);
totxt.Log("执行结束");
}); });
bSetDataIsRunning = false;
}
} }
<<<<<<< HEAD
} }
#region PoolTest #region PoolTest
=======
}
#region PoolTest
>>>>>>> ae9d62a8c8c10f8339da24024e6330c7ac4ff704
#endregion #endregion
//声明委托 //声明委托
...@@ -598,475 +625,10 @@ namespace ModbusDemo ...@@ -598,475 +625,10 @@ namespace ModbusDemo
else else
{ {
//txtbox.Text = message; //txtbox.Text = message;
totxt.Log(message); //totxt.Log(message);
}
}
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);
Caution = 0;
}
catch (Exception exception)
{
//Connection exception
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
timer.Stop();
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
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.
if (exception.Source.Equals("nModbusPC"))
{
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"));
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!");
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!");
break;
case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
totxt.Log("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!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("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 !");
break;
case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
totxt.Log("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 !");
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!");
break;
}
}
OutputValue = new ushort[numberOfPoints];
Caution = -1;
}
}
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);
Caution = 0;
}
catch (Exception exception)
{
//Connection exception
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
timer.Stop();
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
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.
if (exception.Source.Equals("nModbusPC"))
{
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"));
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!");
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!");
break;
case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
totxt.Log("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!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("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 !");
break;
case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
totxt.Log("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 !");
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!");
break;
}
}
OutputValue = new bool[numberOfPoints];
Caution = -1;
}
}
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);
OutputValue = value;
Caution = 0;
}
catch (Exception exception)
{
//Connection exception
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
timer.Stop();
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
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.
if (exception.Source.Equals("nModbusPC"))
{
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"));
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!");
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!");
break;
case "3":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> Illegal data value!");
totxt.Log("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!");
break;
case "5":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> ACKNOWLEDGE!");
totxt.Log("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 !");
break;
case "8":
Console.WriteLine("Exception Code: " + ExceptionCode.Trim() + "----> MEMORY PARITY ERROR !");
totxt.Log("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 !");
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!");
break;
}
}
OutputValue = false;
Caution = -1;
}
}
private async void Modbus_polling()
{
float EastTemperature = 0;
float Easternwaterlevel = 0;
float WestWaterLevel = 0;
int sign = 0;
try
{
ushort[] temperature = { };
ushort[] type = { };
string[] vs = { };
string[] s = { };
string[] s6 = { };
ushort[] register = { };
ushort[] Inputtype = { };
ushort[] registerN = { };
ushort[] InputtypeN = { };
bool[] EIO = { };
bool[] SIO = { };
bool[] WIO = { };
int[] EOnOff = { 0 };
int[] SOnOff = { 0 };
int[] WOnOff = { 0 };
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, 21, 0, 8, out int signr);
Modbus_ReadHoldingRegistersTask(out Inputtype, 21, 10, 8, out int signI);
UInt64 time_2 = GetTimeStamp();
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, 40, 16, 6, out int signE);
Modbus_ReadCoilsTask(out SIO, 19, 16, 6, out int signS);
Modbus_ReadCoilsTask(out WIO, 41, 16, 6, out int signW);
if (sign == -1)
{
}
//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;
label3.Text = EastTemperature.ToString();
label4.Text = Easternwaterlevel.ToString();
EOnOff = state.IO(EIO);////东中转池
SOnOff = state.IO(SIO);////西中转池
WOnOff = state.IO(WIO); ////东南北水
//}
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("40", EOnOff[0], EOnOff[1], EOnOff[2], EOnOff[3], EOnOff[4], EOnOff[5], GetTimeStamp());
//东南北水
WTDR66C WestStir = new WTDR66C("41", WOnOff[0], WOnOff[1], WOnOff[2], WOnOff[3], WOnOff[4], WOnOff[5], GetTimeStamp());
//西搅拌
WTDR66C SouthWater = new WTDR66C("19", 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)
+ "]";
}
// 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
//No response from server.
//The server maybe close the com port, or response timeout.
if (exception.Source.Equals("System"))
{
timer.Stop();
Console.WriteLine(DateTime.Now.ToString() + " " + exception.Message);
totxt.Log(DateTime.Now.ToString() + " " + exception.Message);
return;
}
//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;
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"));
totxt.Log("Function Code: " + FunctionCode.ToString("X"));
//MessageBox.Show("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!");
//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;
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;
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;
case "5":
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;
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;
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;
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;
}
return;
}
}
finally
{
} }
return;
} }
#endregion #endregion
#region json字符串转对象 #region json字符串转对象
/// <summary> /// <summary>
...@@ -1686,11 +1248,13 @@ namespace ModbusDemo ...@@ -1686,11 +1248,13 @@ namespace ModbusDemo
MQTT_thread = new MethodInvoker(Sendout); MQTT_thread = new MethodInvoker(Sendout);
MQTT_thread.BeginInvoke(null, null); MQTT_thread.BeginInvoke(null, null);
Task.Run(async () => { await ConnectMqttServerAsync(); }); Task.Run(async () => { await ConnectMqttServerAsync(); });
master = ModbusSerialMaster.CreateRtu(comPort); ModbusComm.Modbus = ModbusSerialMaster.CreateRtu(comPort);
master.Transport.Retries = 0; //重试次数 ModbusComm.Modbus.Transport.Retries = 0;
master.Transport.ReadTimeout = 1000; //读取串口数据超时时间(ms) ModbusComm.Modbus.Transport.ReadTimeout = 1000;
master.Transport.WriteTimeout = 1000;//写入串口数据超时时间(ms) ModbusComm.Modbus.Transport.WriteTimeout = 1000;
master.Transport.WaitToRetryMilliseconds = 0;//重试间隔(ms) ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
modbus_Timer.Enabled = true; modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false; btOpenCOM.Enabled = false;
btCloseCOM.Enabled = true; btCloseCOM.Enabled = true;
......
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