mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-17 19:34:13 +02:00
3365817cf1
Extend the terminal catalog (terminalcatalog.h) with the widths of more terminal blocks, from the catalogs of Phoenix Contact (UT), Weidmuller (WDU), WAGO (TOPJOB S 2002/2006), ABB Entrelec (M series) and Legrand (Viking 3). For Legrand and ABB Entrelec the value is the pitch given by the catalog. Each entry now carries its manufacturer, and the element properties dialog gets a "Manufacturer" combo box before the width one. The list of widths is filtered by manufacturer and by the selected section; if the manufacturer has nothing for that section, all its terminals are listed. The combo box is created by the code, no change in the .ui.
139 lines
5.0 KiB
C++
139 lines
5.0 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef TERMINALCATALOG_H
|
|
#define TERMINALCATALOG_H
|
|
|
|
#include <QLocale>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QVector>
|
|
|
|
/**
|
|
* @brief The TerminalCatalog namespace
|
|
* Data shared between the terminal strip editor and the element editor :
|
|
* usual sections (mm2) and widths (mm) of the terminals sold by the manufacturers.
|
|
* Only the values found in the catalogs of the manufacturers are listed,
|
|
* any other value can be typed by the user.
|
|
* For Legrand and ABB Entrelec the value is the pitch ("pas") of the catalog.
|
|
*/
|
|
namespace TerminalCatalog
|
|
{
|
|
/**
|
|
* Width (mm) of a terminal sold by a manufacturer.
|
|
* For ABB Entrelec the value is the spacing (pitch) given by the catalog.
|
|
*/
|
|
struct WidthEntry { double mm; const char *label; double section; const char *manufacturer; };
|
|
|
|
inline const QVector<double> §ions()
|
|
{
|
|
static const QVector<double> sections_ {0.5, 0.75, 1, 1.5, 2.5, 4, 6, 10, 16, 25, 35, 50, 70, 95, 120, 150, 185, 240, 300};
|
|
return sections_;
|
|
}
|
|
|
|
/**
|
|
* @brief awgForSection
|
|
* @param mm2 : a section in mm2
|
|
* @return the nearest AWG / kcmil size, as text ("14", "1/0", "250 kcmil"),
|
|
* or an empty string if the section has no usual equivalent.
|
|
* The correspondence is approximate (the usual table of the manufacturers),
|
|
* the two systems don't have the same steps.
|
|
*/
|
|
inline QString awgForSection(double mm2)
|
|
{
|
|
struct Awg { double mm2; const char *awg; };
|
|
static const Awg table_[] {
|
|
{0.5, "20"}, {0.75, "18"}, {1, "17"},
|
|
{1.5, "16"}, {2.5, "14"}, {4, "12"},
|
|
{6, "10"}, {10, "8"}, {16, "6"},
|
|
{25, "4"}, {35, "2"}, {50, "1/0"},
|
|
{70, "2/0"}, {95, "3/0"}, {120, "250 kcmil"},
|
|
{150, "300 kcmil"}, {185, "350 kcmil"}, {240, "500 kcmil"},
|
|
{300, "600 kcmil"}
|
|
};
|
|
for (const auto &entry : table_) {
|
|
if (qAbs(entry.mm2 - mm2) < 0.0001) {
|
|
return QString::fromLatin1(entry.awg);
|
|
}
|
|
}
|
|
return QString();
|
|
}
|
|
|
|
/**
|
|
* @brief sectionText
|
|
* @param mm2 : a section in mm2
|
|
* @param unit_text : the text of the section with its unit, for example "2,5 mm²"
|
|
* @return @a unit_text followed by the AWG size if there is one : "2,5 mm² (AWG 14)"
|
|
*/
|
|
inline QString sectionText(double mm2, const QString &unit_text)
|
|
{
|
|
const auto awg_ = awgForSection(mm2);
|
|
if (awg_.isEmpty()) {
|
|
return unit_text;
|
|
}
|
|
return awg_.contains(QLatin1String("kcmil"))
|
|
? unit_text + QStringLiteral(" (%1)").arg(awg_)
|
|
: unit_text + QStringLiteral(" (AWG %1)").arg(awg_);
|
|
}
|
|
|
|
inline const QVector<WidthEntry> &widthEntries()
|
|
{
|
|
static const QVector<WidthEntry> entries_ {
|
|
{5.0, "ABB Entrelec MA 2.5/5", 2.5, "ABB Entrelec"},
|
|
{5.1, "Weidmüller WDU 2.5", 2.5, "Weidmüller"},
|
|
{5.2, "WAGO 2002 (TOPJOB S)", 2.5, "WAGO"},
|
|
{6.0, "ABB Entrelec M 4/6", 4.0, "ABB Entrelec"},
|
|
{6.0, "Legrand Viking 3 (4 mm²)", 4.0, "Legrand"},
|
|
{6.1, "Weidmüller WDU 4", 4.0, "Weidmüller"},
|
|
{6.2, "Phoenix Contact UT 4", 4.0, "Phoenix Contact"},
|
|
{7.5, "WAGO 2006 (TOPJOB S)", 6.0, "WAGO"},
|
|
{7.9, "Weidmüller WDU 6", 6.0, "Weidmüller"},
|
|
{8.0, "ABB Entrelec M 6/8", 6.0, "ABB Entrelec"},
|
|
{8.0, "ABB Entrelec M 4/8", 4.0, "ABB Entrelec"},
|
|
{8.2, "Phoenix Contact UT 6", 6.0, "Phoenix Contact"},
|
|
{10.0, "ABB Entrelec M 10/10", 10.0, "ABB Entrelec"},
|
|
{10.2, "Phoenix Contact UT 10", 10.0, "Phoenix Contact"},
|
|
{11.9, "Weidmüller WDU 16/ZA", 16.0, "Weidmüller"},
|
|
{12.0, "ABB Entrelec M 16/12", 16.0, "ABB Entrelec"},
|
|
{12.0, "Legrand Viking 3 (16 mm²)", 16.0, "Legrand"},
|
|
{12.2, "Phoenix Contact UT 16", 16.0, "Phoenix Contact"},
|
|
{16.0, "ABB Entrelec M 35/16", 35.0, "ABB Entrelec"},
|
|
{16.0, "Phoenix Contact UT 35", 35.0, "Phoenix Contact"},
|
|
{16.0, "Weidmüller WDU 35N", 35.0, "Weidmüller"},
|
|
{26.0, "ABB Entrelec M 35/26.FF", 35.0, "ABB Entrelec"},
|
|
{31.0, "ABB Entrelec M 70/31.AF", 70.0, "ABB Entrelec"},
|
|
{35.0, "ABB Entrelec M 120/35.F", 120.0, "ABB Entrelec"},
|
|
{42.0, "ABB Entrelec M 300/42.FF", 300.0, "ABB Entrelec"}
|
|
};
|
|
return entries_;
|
|
}
|
|
/// Manufacturers of the catalog, in the order of the first entry.
|
|
inline QStringList manufacturers()
|
|
{
|
|
QStringList list_;
|
|
for (const auto &entry : widthEntries()) {
|
|
const auto name_ = QString::fromUtf8(entry.manufacturer);
|
|
if (!list_.contains(name_)) {
|
|
list_ << name_;
|
|
}
|
|
}
|
|
return list_;
|
|
}
|
|
}
|
|
|
|
#endif // TERMINALCATALOG_H
|