email 2 дні тому
джерело
коміт
912cc1e220
2 змінених файлів з 10 додано та 16 видалено
  1. +9
    -13
      untitled/hmidocument.cpp
  2. +1
    -3
      untitled/modbussimulator.cpp

+ 9
- 13
untitled/hmidocument.cpp Переглянути файл

@@ -71,28 +71,24 @@ HMIDocument::~HMIDocument()
}
void HMIDocument::startSimulation()
{
qDebug() <<"123";
if (m_modbusSimulator && m_modbusSimulator->isRunning()) return;
// 收集所有线圈地址
QSet<int> addresses;

foreach (QGraphicsItem *item, m_scene->items()) {
if (auto namedItem = dynamic_cast<NamedItem*>(item)) {
bool ok;
int address = namedItem->name().toInt(&ok);
if (ok && address >= 0 && address <= 4000) { // 限制有效范围
if (ok && address >= 0 && address <= 4000)
{ // 限制有效范围
// 只收集指示灯(ResizableEllipse)的地址
if (auto ellipseItem = dynamic_cast<ResizableEllipse*>(item)) {
if (auto ellipseItem = dynamic_cast<ResizableEllipse*>(item))
{
addresses.insert(address);
// 遍历代码结束后
qDebug() << "收集到的指示灯地址:" << addresses; // 检查是否正确包含地址(如123)
} else {
// 对按钮(ResizableRectangle)进行处理,但不收集地址
}
else
{
qDebug() << "按钮不收集地址: " << item->type();
}
} else {
// 记录无效地址,方便调试
}
else {
qDebug() << "无效的线圈地址:" << namedItem->name()
<< "(图形项类型:" << item->type() << ")";
}


+ 1
- 3
untitled/modbussimulator.cpp Переглянути файл

@@ -38,7 +38,6 @@ void PollingWorker::performCoilReading()
if (m_coilAddresses->isEmpty()) return;
addressesCopy = *m_coilAddresses;
}

int minAddress = *std::min_element(addressesCopy.begin(), addressesCopy.end());
int maxAddress = *std::max_element(addressesCopy.begin(), addressesCopy.end());
int count = maxAddress - minAddress + 1;
@@ -149,9 +148,8 @@ void ModbusSimulator::stopSimulation()
}

void ModbusSimulator::setCoilAddresses(const QSet<int> &addresses)
{ //qDebug()<<"这里";
{
QMutexLocker locker(&m_mutex);
qDebug()<<"这里2";
m_coilAddresses = addresses;

}


Завантаження…
Відмінити
Зберегти