This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="PLC_IP" value="192.168.1.170" />
|
||||
<!--<add key="PLC_IP" value="127.0.0.1" />-->
|
||||
<!--<add key="PLC_IP" value="192.168.1.170" />-->
|
||||
<add key="PLC_IP" value="127.0.0.1" />
|
||||
<add key="PLC_PORT" value="502" />
|
||||
</appSettings>
|
||||
</configuration>
|
||||
|
||||
@@ -284,6 +284,7 @@ namespace PLCDataMonitor
|
||||
_readThread.Start();
|
||||
}
|
||||
|
||||
public static bool status = false;
|
||||
private void ReadDataLoop()
|
||||
{
|
||||
//int i = 0;
|
||||
@@ -340,14 +341,15 @@ namespace PLCDataMonitor
|
||||
if (_isConnected && _tcpClient != null && _tcpClient.Connected)
|
||||
{
|
||||
// 读取所有数据(包含新增的次数、最大摩擦力)
|
||||
var data = ReadModbusData();
|
||||
var data = ReadModbusData2();
|
||||
|
||||
// 读取暂停状态
|
||||
bool isPaused = false;
|
||||
try
|
||||
{
|
||||
bool[] pauseStatus = _modbusMaster?.ReadCoils(0x01, (ushort)PauseStatusCoil, 1);
|
||||
isPaused = pauseStatus != null && pauseStatus.Length > 0 && pauseStatus[0];
|
||||
isPaused = status;
|
||||
//bool[] pauseStatus = _modbusMaster?.ReadCoils(0x01, (ushort)PauseStatusCoil, 1);
|
||||
//isPaused = pauseStatus != null && pauseStatus.Length > 0 && pauseStatus[0];
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -439,51 +441,51 @@ namespace PLCDataMonitor
|
||||
|
||||
var pressure1 = data.pressure1;
|
||||
var pressure2 = data.pressure2;
|
||||
var friction1 = data.friction1;
|
||||
var friction2 = data.friction2;
|
||||
var friction1 = new Random().Next(-200, 200);
|
||||
var friction2 = new Random().Next(-200, 200);
|
||||
var maxFriction1 = data.maxFriction1;
|
||||
var maxFriction2 = data.maxFriction2;
|
||||
|
||||
|
||||
|
||||
// ----- 读取报警状态(HR504 / HR509)-----
|
||||
bool[] alarmsHR504 = null;
|
||||
bool[] alarmsHR509 = null;
|
||||
try
|
||||
{
|
||||
// 连续读取 HR504.1 ~ HR504.5(5个线圈,起始 41265)
|
||||
alarmsHR504 = _modbusMaster?.ReadCoils(0x01, 41265, 5);
|
||||
// 连续读取 HR509.0 ~ HR509.3(4个线圈,起始 41345)
|
||||
alarmsHR509 = _modbusMaster?.ReadCoils(0x01, 41344, 6);
|
||||
}
|
||||
catch
|
||||
{
|
||||
//// ----- 读取报警状态(HR504 / HR509)-----
|
||||
//bool[] alarmsHR504 = null;
|
||||
//bool[] alarmsHR509 = null;
|
||||
//try
|
||||
//{
|
||||
// // 连续读取 HR504.1 ~ HR504.5(5个线圈,起始 41265)
|
||||
// alarmsHR504 = _modbusMaster?.ReadCoils(0x01, 41265, 5);
|
||||
// // 连续读取 HR509.0 ~ HR509.3(4个线圈,起始 41345)
|
||||
// alarmsHR509 = _modbusMaster?.ReadCoils(0x01, 41344, 6);
|
||||
//}
|
||||
//catch
|
||||
//{
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
string alarmMessage = "";
|
||||
if (alarmsHR504 != null && alarmsHR504.Length >= 5)
|
||||
{
|
||||
// 根据实测:索引0=41265=已达上限水位
|
||||
if (alarmsHR504[0]) alarmMessage += "已达上限水位 ";
|
||||
// 索引1=41266=急停被按下
|
||||
if (alarmsHR504[1]) alarmMessage += "急停被按下 ";
|
||||
// 索引2=41267=测试完成(待确认)
|
||||
if (alarmsHR504[2]) alarmMessage += "测试完成 ";
|
||||
// 索引3=41268=摩擦力过大(待确认)
|
||||
//if (alarmsHR504[3]) alarmMessage += "摩擦力过大 ";
|
||||
// 索引4=41269=超温95℃(待确认)
|
||||
if (alarmsHR504[4]) alarmMessage += "超温95℃ ";
|
||||
}
|
||||
if (alarmsHR509 != null && alarmsHR509.Length >= 6)
|
||||
{
|
||||
if (alarmsHR509[0]) alarmMessage += "1工位低水位 ";
|
||||
if (alarmsHR509[2]) alarmMessage += "水泵未运行 ";
|
||||
// 索引3=41348=2工位低水位
|
||||
if (alarmsHR509[3]) alarmMessage += "2工位低水位 ";
|
||||
if (alarmsHR509[4]) alarmMessage += "摩擦力过大 ";
|
||||
if (alarmsHR509[5]) alarmMessage += "伺服驱动器报警,请清除 ";
|
||||
}
|
||||
//string alarmMessage = "";
|
||||
//if (alarmsHR504 != null && alarmsHR504.Length >= 5)
|
||||
//{
|
||||
// // 根据实测:索引0=41265=已达上限水位
|
||||
// if (alarmsHR504[0]) alarmMessage += "已达上限水位 ";
|
||||
// // 索引1=41266=急停被按下
|
||||
// if (alarmsHR504[1]) alarmMessage += "急停被按下 ";
|
||||
// // 索引2=41267=测试完成(待确认)
|
||||
// if (alarmsHR504[2]) alarmMessage += "测试完成 ";
|
||||
// // 索引3=41268=摩擦力过大(待确认)
|
||||
// //if (alarmsHR504[3]) alarmMessage += "摩擦力过大 ";
|
||||
// // 索引4=41269=超温95℃(待确认)
|
||||
// if (alarmsHR504[4]) alarmMessage += "超温95℃ ";
|
||||
//}
|
||||
//if (alarmsHR509 != null && alarmsHR509.Length >= 6)
|
||||
//{
|
||||
// if (alarmsHR509[0]) alarmMessage += "1工位低水位 ";
|
||||
// if (alarmsHR509[2]) alarmMessage += "水泵未运行 ";
|
||||
// // 索引3=41348=2工位低水位
|
||||
// if (alarmsHR509[3]) alarmMessage += "2工位低水位 ";
|
||||
// if (alarmsHR509[4]) alarmMessage += "摩擦力过大 ";
|
||||
// if (alarmsHR509[5]) alarmMessage += "伺服驱动器报警,请清除 ";
|
||||
//}
|
||||
|
||||
|
||||
|
||||
@@ -509,30 +511,30 @@ namespace PLCDataMonitor
|
||||
);
|
||||
|
||||
// 新增:更新报警显示
|
||||
_homePage.UpdateAlarms(alarmMessage);
|
||||
// _homePage.UpdateAlarms(alarmMessage);
|
||||
|
||||
|
||||
if (!isPaused)
|
||||
{
|
||||
// 关键修改:确保曲线数据正确记录
|
||||
if (data.setCount > 0 && data.actualCount > 0 &&
|
||||
data.setCount > data.actualCount) // 点击了开始,且实际次数小于设定次数,才更新曲线
|
||||
{
|
||||
// 创建数据点
|
||||
var dataPoint = new Tuple<DateTime, double, double>(
|
||||
effectiveTime,
|
||||
friction1,
|
||||
friction2
|
||||
);
|
||||
//if (data.setCount > 0 && data.actualCount > 0 &&
|
||||
// data.setCount > data.actualCount) // 点击了开始,且实际次数小于设定次数,才更新曲线
|
||||
//{
|
||||
// 创建数据点
|
||||
var dataPoint = new Tuple<DateTime, double, double>(
|
||||
effectiveTime,
|
||||
friction1,
|
||||
friction2
|
||||
);
|
||||
|
||||
// 添加到共享队列
|
||||
_sharedCurveDataQueue.Enqueue(dataPoint);
|
||||
// 添加到共享队列
|
||||
_sharedCurveDataQueue.Enqueue(dataPoint);
|
||||
|
||||
// 通知曲线页面更新
|
||||
_curvePage.AddFrictionData(friction1, friction2);
|
||||
// 通知曲线页面更新
|
||||
_curvePage.AddFrictionData(friction1, friction2);
|
||||
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
if (data.setCount > 0 && data.actualCount > 0 &&
|
||||
data.setCount == data.actualCount && !_hasInsertedReport) // 一次测试执行完成,保存报表
|
||||
@@ -606,7 +608,7 @@ namespace PLCDataMonitor
|
||||
}), System.Windows.Threading.DispatcherPriority.Background);
|
||||
}
|
||||
}
|
||||
Thread.Sleep(200); // 100ms刷新一次
|
||||
Thread.Sleep(1000); // 100ms刷新一次
|
||||
}
|
||||
}
|
||||
|
||||
@@ -711,6 +713,51 @@ namespace PLCDataMonitor
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private (float pressure1, float pressure2, float friction1, float friction2,
|
||||
int setCount, int actualCount, float maxFriction1, float maxFriction2, float t1, float t2, float D, bool status) ReadModbusData2()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
// 保留4位小数返回
|
||||
return (
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
6,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
12,
|
||||
12,
|
||||
false
|
||||
);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//throw new Exception($"Modbus读取错误:{ex.Message}");
|
||||
return (
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
DisconnectFromPLC();
|
||||
@@ -764,11 +811,12 @@ namespace PLCDataMonitor
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_isConnected && _modbusMaster != null)
|
||||
{
|
||||
_modbusMaster.WriteSingleCoil(0x01, (ushort)PauseControlCoil, true);
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
status = true;
|
||||
//if (_isConnected && _modbusMaster != null)
|
||||
//{
|
||||
// _modbusMaster.WriteSingleCoil(0x01, (ushort)PauseControlCoil, true);
|
||||
// Thread.Sleep(100);
|
||||
//}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -780,11 +828,12 @@ namespace PLCDataMonitor
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_isConnected && _modbusMaster != null)
|
||||
{
|
||||
_modbusMaster.WriteSingleCoil(0x01, (ushort)PauseControlCoil, false);
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
status = false;
|
||||
//if (_isConnected && _modbusMaster != null)
|
||||
//{
|
||||
// _modbusMaster.WriteSingleCoil(0x01, (ushort)PauseControlCoil, false);
|
||||
// Thread.Sleep(100);
|
||||
//}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user