|
|
@@ -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() << ")"; |
|
|
|
} |
|
|
|