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

modify data

parent 468680e9
......@@ -14,35 +14,35 @@ using ModbusDemo.Common;
using System.Threading;
using ModbusDemo.application;
using System.Windows.Forms;
using System.IO;
namespace ModbusDemo.MessageFormat
{
public class ModualControl
{
public class Op
public class OpItem
{
public ushort 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 int duration { get ;set;}
public UInt64 startTime { get ;set;}
}
public class SsItem
{
public string addr { get; set; }
public Op op { get; set; }
}
public List <OpItem > op { get; set; }
}
public class MqttRoot
{
public string taskId { get; set; }
public List<SsItem> ss { get; set; }
public List <SsItem > ss { get; set; }
}
public class Cfg
{
......@@ -113,7 +113,8 @@ namespace ModbusDemo.MessageFormat
}
public static List<pcLiquidLevelConfig> cPoolLevelConfig = new List<pcLiquidLevelConfig>();
public static List<ModualCntrol> liModuualControl = new List<ModualCntrol>();
public const ushort usDefineControlTimes = 1;
public const ushort usDefineControlTimes = 1;
public static FileInfo filConfigFiles = new FileInfo(pcConfig.FileName);
private static object obLock = new object();
#if DEBUG_TEST
public const string strMapCfg = "{chMap:[" +
......@@ -151,89 +152,92 @@ namespace ModbusDemo.MessageFormat
}
for (int i = 0; i < cControl.ss.Count; i++)
{
bool[] bOperationStatus = new bool[8] {false,false,false,false,false,false,false,false};
ModualCntrol cModualCntrol = new ModualCntrol
for (int m = 0; m < cControl.ss[i].op.Count(); m++)
{
sbModbusID = byte.Parse(cControl.ss[i].addr),
usDurationTime = (ushort)(cControl.ss[i].op.duration * 60),
ulStartTime = cControl.ss[i].op.startTime
};
cModualCntrol.bControlStatus = ModualPoll.bGet_channel_Value<bool>(cModualCntrol.sbModbusID, out cModualCntrol.bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5");
if (jsonObj["ss"][i]["op"] != null)
{
string str;
for (int j = 0; j < 8; j++)
bool[] bOperationStatus = new bool[8] { false, false, false, false, false, false, false, false };
ModualCntrol cModualCntrol = new ModualCntrol
{
sbModbusID = byte.Parse(cControl.ss[i].addr),
usDurationTime = (ushort)(cControl.ss[i].op[m].duration * 60),
ulStartTime = cControl.ss[i].op[m].startTime
};
cModualCntrol.bControlStatus = ModualPoll.bGet_channel_Value<bool>(cModualCntrol.sbModbusID, out cModualCntrol.bControlData, "d0", "d1", "d1", "d2", "d3", "d4", "d5");
if (jsonObj["ss"][i]["op"][m] != null)
{
str = "d" + j.ToString();
if (jsonObj["ss"][i]["op"][str] != null)
string str;
for (int j = 0; j < 8; j++)
{
if (Convert.ToBoolean(jsonObj["ss"][i]["op"].Value<int>(str)) == true)
str = "d" + j.ToString();
if (jsonObj["ss"][i]["op"][m][str] != null)
{
cModualCntrol.bControlData[j] = true;
cModualCntrol.bOpenMachine = true;
if (Convert.ToBoolean(jsonObj["ss"][i]["op"][m].Value<int>(str)) == true)
{
cModualCntrol.bControlData[j] = true;
cModualCntrol.bOpenMachine = true;
}
else
{
cModualCntrol.bControlData[j] = false;
cModualCntrol.bOpenMachine = false;
}
cModualCntrol.bControlBit[j] = true;
strOperation.Add(str);
}
}
}
if (jsonObj["ss"][i]["op"][m]["ts"] != null)
{
jsonObj["ss"][i]["op"][m]["ts"] = Form1.GetTimeStamp();
}
cModualCntrol.strOperationChannelName = strOperation.ToArray();
if (cModualCntrol.bControlStatus == true && cModualCntrol.ulStartTime <= Form1.GetTimeStamp())
{
//Form1.vSuspend_Poll_Control(true);
cModualCntrol.bStartControl = true;
for (int j = 0; j < cModualCntrol.strOperationChannelName.Count(); j++)
{
if (ControlMap.bControl_Map(cModualCntrol.bOpenMachine, cModualCntrol.sbModbusID, cModualCntrol.bControlData, cModualCntrol.strOperationChannelName[j]))
{
bOperationStatus[j] = ControlMap.bDelege_Operation(cModualCntrol.bControlData);
cModualCntrol.bControlStatus = bOperationStatus[j];
}
else
{
cModualCntrol.bControlData[j] = false;
cModualCntrol.bOpenMachine = false;
cModualCntrol.bControlStatus = false;
bOperationStatus[j] = false;
}
cModualCntrol.bControlBit[j] = true;
strOperation.Add(str);
}
//Form1.vSuspend_Poll_Control(false);
}
}
if (jsonObj["ss"][i]["op"]["ts"] != null)
{
jsonObj["ss"][i]["op"]["ts"] = Form1.GetTimeStamp();
}
cModualCntrol.strOperationChannelName = strOperation.ToArray();
if (cModualCntrol.bControlStatus == true && cModualCntrol.ulStartTime <= Form1.GetTimeStamp())
{
//Form1.vSuspend_Poll_Control(true);
cModualCntrol.bStartControl = true;
for (int j = 0; j < cModualCntrol.strOperationChannelName.Count(); j++)
if (cModualCntrol.bControlStatus == true && cModualCntrol.strOperationChannelName.Count() <= 1)
{
if (ControlMap.bControl_Map(cModualCntrol.bOpenMachine, cModualCntrol.sbModbusID, cModualCntrol.bControlData, cModualCntrol.strOperationChannelName[j]))
{
bOperationStatus[j] = ControlMap.bDelege_Operation(cModualCntrol.bControlData);
cModualCntrol.bControlStatus = bOperationStatus[j];
}
else
lock (obLock)
{
cModualCntrol.bControlStatus = false;
bOperationStatus[j] = false;
vDelete_Same_Control(cModualCntrol);
if (cModualCntrol.bStartControl == true && cModualCntrol.ulStartTime != 0 && cModualCntrol.bControlStatus == true)
{
liModuualControl.Add(cModualCntrol);
}
else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0)
{
liModuualControl.Add(cModualCntrol);
}
}
}
//Form1.vSuspend_Poll_Control(false);
}
if (cModualCntrol.bControlStatus == true && cModualCntrol.strOperationChannelName.Count() <= 1)
{
lock (obLock)
for (int k = 0; k < 8; k++)
{
vDelete_Same_Control(cModualCntrol);
if (cModualCntrol.bStartControl == true && cModualCntrol.ulStartTime != 0 && cModualCntrol.bControlStatus == true)
if (cModualCntrol.bControlBit[k] == true && (cModualCntrol.bControlStatus == true || bOperationStatus[k] == true))
{
liModuualControl.Add(cModualCntrol);
string str = "d" + k.ToString();
jsonObj["ss"][i]["op"][m][str] = 1;
}
else if (cModualCntrol.bStartControl == false && cModualCntrol.ulStartTime != 0)
else if (cModualCntrol.bControlBit[k] == true)
{
liModuualControl.Add(cModualCntrol);
string str = "d" + k.ToString();
jsonObj["ss"][i]["op"][m][str] = 0;
}
}
}
for (int k = 0; k < 8; k++)
{
if (cModualCntrol.bControlBit[k] == true && (cModualCntrol.bControlStatus == true || bOperationStatus[k] == true))
{
string str = "d" + k.ToString();
jsonObj["ss"][i]["op"][str] = 1;
}
else if (cModualCntrol.bControlBit[k] == true)
{
string str = "d" + k.ToString();
jsonObj["ss"][i]["op"][str] = 0;
}
}
}
stResponseData = jsonObj.ToString();
}
......@@ -290,6 +294,16 @@ namespace ModbusDemo.MessageFormat
}
public static Task vControl_Res_Poll()
{
if (filConfigFiles.Length == 0)
{
pcConfig.WriteConfig("匀浆池配置", "报警最高液位", "8");
pcConfig.WriteConfig("匀浆池配置", "报警最低液位", "1");
}
else
{
AllPond.cEastTransitPool.vSetMaxLevel = pcConfig.ReadConfig<double>("匀浆池配置","报警最高液位");
AllPond.cEastTransitPool.vSetMinLevel = pcConfig.ReadConfig<double>("匀浆池配置","报警最低液位");
}
while (true)
{
for (sbyte sbEastTransitPoolIndex = 0; sbEastTransitPoolIndex < AllPond.EastTransitPoolList.Count(); sbEastTransitPoolIndex++)
......@@ -467,6 +481,18 @@ namespace ModbusDemo.MessageFormat
}
}
double EastTransitPoolLevel;
EastTransitPoolLevel = AllPond.cEastTransitPool.cLevel.dCurrentlevel;
if (EastTransitPoolLevel >= AllPond.cEastTransitPool.vSetMaxLevel || EastTransitPoolLevel <= AllPond.cEastTransitPool.vSetMinLevel)
{
ModualAlarm.vSet_Modual_Alarm(AllPond.cEastTransitPool.cLevel.byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelLevelError, true, 1, AllPond.cEastTransitPool.cLevel.strChannelNumber);
}
else
{
ModualAlarm.vSet_Modual_Alarm(AllPond.cEastTransitPool.cLevel.byModbusID, (ushort)ModualAlarm.eAlarmCode.ChannelLevelError, false, 1, AllPond.cEastTransitPool.cLevel.strChannelNumber);
}
Thread.Sleep(1000);
}
......@@ -586,6 +612,7 @@ namespace ModbusDemo.MessageFormat
dUpLevel = double.Parse(cCfgRoot.ss[i].cfg.upper),
dDownLevel = double.Parse(cCfgRoot.ss[i].cfg.down)
};
vSet_Pool_Alarm_Level(cLiquidLevelConfig.byModbusID,cLiquidLevelConfig.dUpLevel,cLiquidLevelConfig.dDownLevel);
string strChannelString = "d" + i.ToString();
for (int j = 0; j < 8; j++)
{
......@@ -614,5 +641,17 @@ namespace ModbusDemo.MessageFormat
stResponseStrign = jsonObj.ToString();
}
}
public static void vSet_Pool_Alarm_Level(byte byModbusID,double dMaxLevel,double dMinLevel)
{
if (byModbusID == AllPond.cEastTransitPool.cLevel.byModbusID)
{
AllPond.cEastTransitPool.vSetMaxLevel = dMaxLevel;
AllPond.cEastTransitPool.vSetMinLevel = dMinLevel;
pcConfig.WriteConfig("匀浆池配置", "报警最高液位", AllPond.cEastTransitPool.vSetMaxLevel.ToString());
pcConfig.WriteConfig("匀浆池配置", "报警最低液位", AllPond.cEastTransitPool.vSetMaxLevel.ToString());
}
}
}
}
\ No newline at end of file
......@@ -11,7 +11,7 @@ namespace ModbusDemo.application
public static class AllPond
{
private static ModualPool.pcTemperature cEastTransitPoolTemper = new ModualPool.pcTemperature("EastTransitPoolTemper", 27, "d0");
private static ModualPool.pcLiquidlevel cEastTransitPoolLevel = new ModualPool.pcLiquidlevel("EastTransitPoolLevel", 13, "d0");
private static ModualPool.pcLiquidlevel cEastTransitPoolLevel = new ModualPool.pcLiquidlevel("EastTransitPoolLevel", 13, "d2");
private static ModualPool.pcOperation cEastTransitPoolSouthWaterBase = new ModualPool.pcOperation
{
byModbusID = 31,
......@@ -19,9 +19,9 @@ namespace ModbusDemo.application
strChannelNumber = new string[] { "d1","d2" },
bOpenOperation = new bool[] { true,true },
bCloseOperation = new bool[] { false,false },
bHadRefControl = true,
byResModbusID = 13,
strResChannelNumber = "d0"
bHadRefControl = false,
byResModbusID = 0,
strResChannelNumber = null
};
private static ModualPool.pcMachine cEastTransitPoolSouthWater = new ModualPool.pcMachine("EastTransitPoolSouthWater", cEastTransitPoolSouthWaterBase);
......@@ -131,7 +131,7 @@ namespace ModbusDemo.application
public static class cEastTransitPool
{
public static double vSetMaxLevel;
public static double vSetMaxLevel;
public static double vSetMinLevel;
public static ModualPool.pcTemperature cTemper { get => cEastTransitPoolTemper; set => cEastTransitPoolTemper = value;}
public static ModualPool.pcLiquidlevel cLevel { get => cEastTransitPoolLevel; set => cEastTransitPoolLevel = value;}
......@@ -144,15 +144,7 @@ namespace ModbusDemo.application
public static ModualPool.pcMachine cStirrer3 {get => cEastTransitPoolStirrer3; set => cEastTransitPoolStirrer3 = value; }
public static ModualPool.pcMachine cStirrer4 {get => cEastTransitPoolStirrer4; set => cEastTransitPoolStirrer4 = value; }
public static ModualPool.pcButton cButton1 {get => cEastTransitPoolButton1; set => cEastTransitPoolButton1 = value; }
private static void vSet_Poll_Max_Level(double dData)
{
vSetMaxLevel = dData;
}
private static void vSet_Poll_Min_Level(double dData)
{
vSetMinLevel = dData;
}
}
......
......@@ -38,7 +38,7 @@ namespace ModbusDemo.application
public int modularx;
public byte modbusID;
}
public static byte[] EmodbusId = { 5, 51 };
public static byte[] EmodbusId = { 16, 51 };
public static byte[] WmodbusId = { 35, 31 };
public static byte[] LevelmodbusID = { 6, 13 };
public static bool[] state_ON = { true, true, true, true, true, true };
......@@ -47,7 +47,7 @@ namespace ModbusDemo.application
public static bool Wtimerun = false;
static System.Diagnostics.Stopwatch ETime = new System.Diagnostics.Stopwatch();
static System.Diagnostics.Stopwatch WTime = new System.Diagnostics.Stopwatch();
private static readonly int Runtimeout = 1;
private static readonly int Runtimeout = 10;
public static void CriticalValueMonitoring(ref Control usControl,bool Enabl, string Affiliation, out Control control)
{
......
......@@ -58,4 +58,53 @@ namespace ModbusDemo.application
f.WriteContentValue(section, key, value);
}
}
public class pcConfig
{
public static string FileName = Application.StartupPath + "\\PoolConfig.ini";
/// <summary>
/// 读取配置文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T ReadConfig<T>(string section, string key)
{
if (File.Exists(FileName))
{
OperIni f = new OperIni(FileName);
string value = f.ReadContentValue(section, key);
if (String.IsNullOrWhiteSpace(value))
return default(T);
if (typeof(T).IsEnum)
return (T)Enum.Parse(typeof(T), value, true);
return (T)Convert.ChangeType(value, typeof(T));
}
else
{
return default(T);
}
}
/// <summary>
/// 写配置文件
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void WriteConfig(string section, string key, string value)
{
//如果文件不存在,则创建
if (!File.Exists(FileName))
{
using (FileStream myFs = new FileStream(FileName, FileMode.Create)) { }
}
OperIni f = new OperIni(FileName);
f.WriteContentValue(section, key, value);
}
}
}
......@@ -15,8 +15,8 @@ namespace ModbusDemo.application
{
private string strTemperName;
public double dCurrentTemperate { get => vGet_ResCurrent();}
private byte byModbusID;
private string[] strChannelNumber;
public byte byModbusID;
public string[] strChannelNumber;
public pcTemperature(string strName,byte byModbusID, params string[] strChannelNumber)
{
this.strTemperName = strName;
......@@ -50,8 +50,8 @@ namespace ModbusDemo.application
{
private string strLevel;
public double dCurrentlevel { get => vGet_ResCurrent();}
private byte byModbusID;
private string[] strChannelNumber;
public byte byModbusID;
public string[] strChannelNumber;
public pcLiquidlevel(string strName, byte byModbusID,params string[] strChannelNumber)
{
this.strLevel = strName;
......@@ -67,7 +67,7 @@ namespace ModbusDemo.application
List<double> ConvertData = new List<double>();
for (int i = 0; i < dConvertData.Count(); i++)
{
if (dConvertData[i] > 0 && dConvertData[i] < 5)
if (dConvertData[i] > 0 && dConvertData[i] < 20)
{
ConvertData.Add(dConvertData[i]);
}
......
......@@ -289,11 +289,11 @@ namespace ModbusDemo
//Reconnecting
if (isReconnect)
{
Invoke((new Action(() =>
Invoke((new Action(async () =>
{
txtReceiveMessage.AppendText("正在尝试重新连接" + Environment.NewLine);
totxt.Log("正在尝试重新连接" + Environment.NewLine);
await Subscribe();
//Console.WriteLine("正在尝试重新连接" + Environment.NewLine);
})));
......@@ -1061,17 +1061,11 @@ namespace ModbusDemo
ModbusComm.Modbus.Transport.ReadTimeout = 1000;
ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
<<<<<<< HEAD
//t_AutoControl = new Thread(T_AutoControl);
//t_AutoControl = new Thread(AtuoControl_run);
//t_AutoControl.IsBackground = true;
//t_AutoControl.Start();
=======
//t_AutoControl = new Thread(T_AutoControl)
//{
// IsBackground = true
//};
//t_AutoControl.Start();
modbus_Timer.Enabled = true;
btOpenCOM.Enabled = false;
......@@ -1110,7 +1104,7 @@ namespace ModbusDemo
}
private async void run()
{
comPort.PortName = "COM6";
comPort.PortName = "COM2";
comPort.BaudRate = 9600;
comPort.Parity = Parity.None;
comPort.StopBits = StopBits.One;
......@@ -1130,7 +1124,7 @@ namespace ModbusDemo
ModbusComm.Modbus.Transport.WriteTimeout = 1000;
ModbusComm.Modbus.Transport.WaitToRetryMilliseconds = 0;
//t_AutoControl = new Thread(T_AutoControl)
//t_AutoControl = new Thread(AtuoControl_run)
//{
// IsBackground = 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