diff --git a/debian/control b/debian/control index 8dfe067..c96d00c 100644 --- a/debian/control +++ b/debian/control @@ -10,6 +10,7 @@ Build-depends: debhelper (>= 9.0.0), pkg-config, qtbase5-dev, qt5-default, + libi2c-dev Standards-Version: 3.9.3 @@ -75,6 +76,23 @@ Description: nymea.io plugin for SunSpec Modbus devices. . This package will install the nymea.io plugin for SunSpec. +Package: nymea-plugin-unipi2 +Architecture: any +Multi-Arch: same +Section: libs +Depends: ${shlibs:Depends}, + ${misc:Depends}, + wiringpi, +Replaces: nymea-plugin-unipi +Description: nymea.io plugin for UniPi devices + The nymea daemon is a plugin based IoT (Internet of Things) server. The + server works like a translator for devices, things and services and + allows them to interact. + With the powerful rule engine you are able to connect any device available + in the system and create individual scenes and behaviors for your environment. + . + This package will install the nymea.io plugin for unipi devices + Package: nymea-plugin-wallbe Architecture: any diff --git a/debian/nymea-plugin-unipi2.install.in b/debian/nymea-plugin-unipi2.install.in new file mode 100644 index 0000000..40b5a31 --- /dev/null +++ b/debian/nymea-plugin-unipi2.install.in @@ -0,0 +1,2 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginunipi.so +modbus_maps/* usr/share/nymea/modbus diff --git a/nymea-plugins-modbus.pro b/nymea-plugins-modbus.pro index 92c6b5c..c1261e8 100644 --- a/nymea-plugins-modbus.pro +++ b/nymea-plugins-modbus.pro @@ -5,6 +5,7 @@ PLUGIN_DIRS = \ modbuscommander \ mypv \ sunspec \ + unipi \ wallbe \ message(============================================) diff --git a/unipi/README.md b/unipi/README.md new file mode 100644 index 0000000..fed8c3a --- /dev/null +++ b/unipi/README.md @@ -0,0 +1,48 @@ +# UniPi + +Supports UniPi 1.1, UniPi Lite and all Neuron models as well as the Neuron extensions. + +This plug-in does not make use of Evok, it communicates +directly with the Modbus TCP layer, or over Modbus RTU with the Neuron extensions. +To add one-wire devices, use the nymea onewire plug-in. + +## Supported Things + +* UniPi 1.1 +* UniPi 1.1 light +* Neuron + * all models +* Neuron Extensions + * all models + +General Features: + * No internet connection required + * Switch digital outputs + * Read digital inputs + * Switch user led + * Set analog outputs + * Read analog inputs + +## Requirements + +* UniPi 1.1 & UniPi 1.1 light +* Neuron + * Neuron TCP modbus server must be installed. +* Neuron Extensions + * Set the DIP settings accordind to the plug-in settings +* General requirements: + * The package "nymea-plugin-unipi2" must be installed + * For one-wire sensors the package "nymea-plugin-onewire" must be installed. + +### Device setup for Neuron devices + +The nymea unipi plug-in requires the Neuron UniPi Kernel for Neuron devices, this is not required for Neuron Extensions or UniPi 1.1. To install the kernel module follow the instuctions in the UniPi knowledge base. + +https://kb.unipi.technology/en:sw:04-unipi-firmware + +Before you can add IOs you need to setup the UniPi Gateway device inside nymea, after that nymea +recognises the available IOs. + +## More + +https://www.unipi.technology diff --git a/unipi/gpiodescriptor.cpp b/unipi/gpiodescriptor.cpp new file mode 100644 index 0000000..3743f4c --- /dev/null +++ b/unipi/gpiodescriptor.cpp @@ -0,0 +1,45 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "gpiodescriptor.h" + +GpioDescriptor::GpioDescriptor(const int &gpio, const int &pin, const QString &description): + m_gpio(gpio), + m_pin(pin), + m_description(description) +{ +} + +int GpioDescriptor::gpio() const +{ + return m_gpio; +} + +int GpioDescriptor::pin() const +{ + return m_pin; +} + +QString GpioDescriptor::description() const +{ + return m_description; +} diff --git a/unipi/gpiodescriptor.h b/unipi/gpiodescriptor.h new file mode 100644 index 0000000..6fbb993 --- /dev/null +++ b/unipi/gpiodescriptor.h @@ -0,0 +1,43 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * Copyright (C) 2016 Simon Stürz * + * * + * This file is part of nymea. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either * + * version 2.1 of the License, or (at your option) any later version. * + * * + * This library 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 * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this library; If not, see * + * . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef GPIODESCRIPTOR_H +#define GPIODESCRIPTOR_H + +#include + +class GpioDescriptor +{ +public: + GpioDescriptor(const int &gpio, const int &pin, const QString &description = QString()); + + int gpio() const; + int pin() const; + QString description() const; + +private: + int m_gpio; + int m_pin; + QString m_description; +}; + +#endif // GPIODESCRIPTOR_H diff --git a/unipi/i2cport.cpp b/unipi/i2cport.cpp new file mode 100644 index 0000000..a527f27 --- /dev/null +++ b/unipi/i2cport.cpp @@ -0,0 +1,186 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "i2cport.h" +#include "i2cport_p.h" +#include "loggingcategories.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +} + +#include + +I2CPort::I2CPort(const QString &portName, QObject *parent) : + QObject(parent), + d_ptr(new I2CPortPrivate(this)) +{ + d_ptr->portDeviceName = "/dev/" + portName; + d_ptr->fileDescriptor.setFileName(d_ptr->portDeviceName); +} + +QStringList I2CPort::availablePorts() +{ + return QDir("/sys/class/i2c-adapter/").entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); +} + +QList I2CPort::scanRegirsters() +{ + return d_ptr->scanRegirsters(); +} + +int I2CPort::deviceDescriptor() const +{ + return d_ptr->deviceDescriptor; +} + +int I2CPort::address() const +{ + return d_ptr->address; +} + +QString I2CPort::portName() const +{ + return d_ptr->portName; +} + +QString I2CPort::portDeviceName() const +{ + return d_ptr->portDeviceName; +} + +bool I2CPort::isOpen() const +{ + return d_ptr->isOpen(); +} + +bool I2CPort::isValid() const +{ + return d_ptr->isValid(); +} + +bool I2CPort::openPort(int i2cAddress) +{ + return d_ptr->openPort(i2cAddress); +} + +void I2CPort::closePort() +{ + return d_ptr->closePort(); +} + +I2CPortPrivate::I2CPortPrivate(I2CPort *q) : + QObject(q), + q_ptr(q) +{ + +} + +QList I2CPortPrivate::scanRegirsters() +{ + qCDebug(dcHardware()) << "Scanning I2C device" << portDeviceName; + + // Note: these methods are only available on arm since libi2c-dev package is different on amd64 and i386 + QList addressList; +#ifdef __arm__ + for (int address = 0x3; address <= 0x77; address++) { + // Check if ioctl possible + if (ioctl(deviceDescriptor, I2C_SLAVE, address) >= 0) { + i2c_smbus_write_byte(deviceDescriptor, 0x00); + int id = i2c_smbus_read_byte(deviceDescriptor); + if (id >= 0) { + qCDebug(dcHardware()) << QString(" --> found address = 0x%1").arg(address, 0, 16); + addressList.append(address); + } + } + } +#else + qCWarning(dcHardware()) << "This hardware architecture does not support I2C."; +#endif + + return addressList; +} + +bool I2CPortPrivate::isOpen() const +{ + return fileDescriptor.isOpen(); +} + +bool I2CPortPrivate::isValid() const +{ + return valid; +} + +bool I2CPortPrivate::openPort(int i2cAddress) +{ + if (fileDescriptor.isOpen()) { + qCWarning(dcHardware()) << "The given I2C file descriptor is already open:" << fileDescriptor.fileName(); + return false; + } + + if (!fileDescriptor.exists()) { + qCWarning(dcHardware()) << "The given I2C file descriptor does not exist:" << fileDescriptor.fileName(); + return false; + } + + if (!fileDescriptor.open(QFile::ReadWrite)) { + qCWarning(dcHardware()) << "Could not open the given I2C file descriptor:" << fileDescriptor.fileName(); + return false; + } + + deviceDescriptor = fileDescriptor.handle(); +// if (ioctl(deviceDescriptor, I2C_SLAVE, i2cAddress) < 0) { +// qCWarning(dcHardware()) << "Could not set I2C into slave mode" << portDeviceName << QString("0x%1").arg(i2cAddress, 0, 16); +// closePort(); +// return false; +// } + + address = i2cAddress; + valid = true; + return true; +} + +void I2CPortPrivate::closePort() +{ + if (fileDescriptor.isOpen()) { + fileDescriptor.close(); + } + + deviceDescriptor = -1; + valid = false; +} diff --git a/unipi/i2cport.h b/unipi/i2cport.h new file mode 100644 index 0000000..987e640 --- /dev/null +++ b/unipi/i2cport.h @@ -0,0 +1,65 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef I2CPORT_H +#define I2CPORT_H + +#include + +class I2CPortPrivate; + +class I2CPort : public QObject +{ + Q_OBJECT +public: + explicit I2CPort(const QString &portName, QObject *parent = nullptr); + + static QStringList availablePorts(); + + QList scanRegirsters(); + + int deviceDescriptor() const; + int address() const; + QString portName() const; + QString portDeviceName() const; + + bool isOpen() const; + bool isValid() const; + +public slots: + bool openPort(int i2cAddress = 0); + void closePort(); + +private: + I2CPortPrivate *d_ptr = nullptr; + +}; + +#endif // I2CPORT_H diff --git a/unipi/i2cport_p.h b/unipi/i2cport_p.h new file mode 100644 index 0000000..cc11261 --- /dev/null +++ b/unipi/i2cport_p.h @@ -0,0 +1,67 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef I2CPORT_P_H +#define I2CPORT_P_H + +#include +#include +#include + +#include "i2cport.h" + +class I2CPortPrivate : public QObject +{ + Q_OBJECT +public: + explicit I2CPortPrivate(I2CPort *q); + I2CPort *q_ptr; + + QList scanRegirsters(); + + bool isOpen() const; + bool isValid() const; + +public slots: + bool openPort(int address); + void closePort(); + +public: + QFile fileDescriptor; + int deviceDescriptor = -1; + int address; + bool valid = false; + QString portName; + QString portDeviceName; + + +}; + +#endif // I2CPORT_P_H diff --git a/unipi/integrationpluginunipi.cpp b/unipi/integrationpluginunipi.cpp new file mode 100644 index 0000000..da48307 --- /dev/null +++ b/unipi/integrationpluginunipi.cpp @@ -0,0 +1,1048 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "integrationpluginunipi.h" +#include "plugininfo.h" +#include "hardware/i2c/i2cmanager.h" + +#include +#include +#include + +IntegrationPluginUniPi::IntegrationPluginUniPi() +{ +} + + +void IntegrationPluginUniPi::init() +{ + connect(this, &IntegrationPluginUniPi::configValueChanged, this, &IntegrationPluginUniPi::onPluginConfigurationChanged); + //QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = false")); + + m_connectionStateTypeIds.insert(uniPi1ThingClassId, uniPi1ConnectedStateTypeId); + m_connectionStateTypeIds.insert(uniPi1LiteThingClassId, uniPi1LiteConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronS103ThingClassId, neuronS103ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronM103ThingClassId, neuronM103ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronM203ThingClassId, neuronM203ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronM303ThingClassId, neuronM303ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronM403ThingClassId, neuronM403ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronM503ThingClassId, neuronM503ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronL203ThingClassId, neuronL203ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronL303ThingClassId, neuronL303ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronL403ThingClassId, neuronL403ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronL503ThingClassId, neuronL503ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronL513ThingClassId, neuronL513ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS10ThingClassId, neuronXS10ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS20ThingClassId, neuronXS20ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS30ThingClassId, neuronXS30ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS40ThingClassId, neuronXS40ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS50ThingClassId, neuronXS50ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS11ThingClassId, neuronXS11ConnectedStateTypeId); + m_connectionStateTypeIds.insert(neuronXS51ThingClassId, neuronXS51ConnectedStateTypeId); +} + +void IntegrationPluginUniPi::discoverThings(ThingDiscoveryInfo *info) +{ + ThingClassId ThingClassId = info->thingClassId(); + + if (ThingClassId == digitalInputThingClassId) { + foreach(Thing *parent, myThings()) { + if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) { + foreach (QString circuit, m_unipi->digitalInputs()) { + ThingDescriptor thingDescriptor(digitalInputThingClassId, QString("Digital input %1").arg(circuit), "UniPi 1", parent->id()); + foreach(Thing *thing, myThings().filterByParentId(parent->id())) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit; + thingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalInputThingCircuitParamTypeId, circuit)); + thingDescriptor.setParams(params); + info->addThingDescriptor(thingDescriptor); + } + break; + } + } + + foreach (NeuronExtension *neuronExtension, m_neuronExtensions) { + ThingId parentId = m_neuronExtensions.key(neuronExtension); + foreach (QString circuit, neuronExtension->digitalInputs()) { + ThingDescriptor ThingDescriptor(digitalInputThingClassId, QString("Digital input %1").arg(circuit), QString("Neuron extension %1, slave address %2").arg(neuronExtension->type()).arg(QString::number(neuronExtension->slaveAddress())), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalInputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + + foreach (Neuron *neuron, m_neurons) { + ThingId parentId = m_neurons.key(neuron); + foreach (QString circuit, neuron->digitalInputs()) { + ThingDescriptor ThingDescriptor(digitalInputThingClassId, QString("Digital input %1").arg(circuit), QString("Neuron %1").arg(neuron->type()), parentId); + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalInputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + return info->finish(Thing::ThingErrorNoError); + } else if (ThingClassId == digitalOutputThingClassId) { + foreach(Thing *parent, myThings()) { + if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) { + foreach (QString circuit, m_unipi->digitalOutputs()) { + ThingDescriptor ThingDescriptor(digitalOutputThingClassId, QString("Digital output %1").arg(circuit), "UniPi 1", parent->id()); + foreach(Thing *thing, myThings().filterByParentId(parent->id())) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parent->id(); + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + break; + } + } + + foreach (NeuronExtension *neuronExtension, m_neuronExtensions) { + ThingId parentId = m_neuronExtensions.key(neuronExtension); + foreach (QString circuit, neuronExtension->digitalOutputs()) { + ThingDescriptor ThingDescriptor(digitalOutputThingClassId, QString("Digital output %1").arg(circuit), QString("Neuron extension %1, Slave address %2").arg(neuronExtension->type()).arg(QString::number(neuronExtension->slaveAddress())), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + + foreach (Neuron *neuron, m_neurons) { + ThingId parentId = m_neurons.key(neuron); + foreach (QString circuit, neuron->digitalOutputs()) { + ThingDescriptor ThingDescriptor(digitalOutputThingClassId, QString("Digital output %1").arg(circuit), QString("Neuron %1").arg(neuron->type()), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(digitalOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + return info->finish(Thing::ThingErrorNoError); + } else if (ThingClassId == analogInputThingClassId) { + foreach(Thing *parent, myThings()) { + if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) { + foreach (QString circuit, m_unipi->analogInputs()) { + ThingDescriptor ThingDescriptor(analogInputThingClassId, QString("Analog input %1").arg(circuit), "UniPi", parent->id()); + foreach(Thing *thing, myThings().filterByParentId(parent->id())) { + if (thing->paramValue(analogInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parent->id(); + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogInputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + break; + } + } + + foreach (NeuronExtension *neuronExtension, m_neuronExtensions) { + ThingId parentId = m_neuronExtensions.key(neuronExtension); + foreach (QString circuit, neuronExtension->analogInputs()) { + ThingDescriptor ThingDescriptor(analogInputThingClassId, QString("Analog input %1").arg(circuit), QString("Neuron extension %1, Slave address %2").arg(neuronExtension->type()).arg(QString::number(neuronExtension->slaveAddress())), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(analogInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogInputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + + foreach (Neuron *neuron, m_neurons) { + ThingId parentId = m_neurons.key(neuron); + foreach (QString circuit, neuron->analogInputs()) { + ThingDescriptor ThingDescriptor(analogInputThingClassId, QString("Analog input %1").arg(circuit), QString("Neuron %1").arg(neuron->type()), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(analogInputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogInputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + return info->finish(Thing::ThingErrorNoError); + } else if (ThingClassId == analogOutputThingClassId) { + foreach(Thing *parent, myThings()) { + if (((parent->thingClassId() == uniPi1ThingClassId) || (parent->thingClassId() == uniPi1LiteThingClassId)) && m_unipi) { + foreach (QString circuit, m_unipi->analogOutputs()) { + ThingDescriptor ThingDescriptor(analogOutputThingClassId, QString("Analog Output %1").arg(circuit), "UniPi", parent->id()); + foreach(Thing *thing, myThings().filterByParentId(parent->id())) { + if (thing->paramValue(analogOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parent->id(); + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + break; + } + } + + foreach (NeuronExtension *neuronExtension, m_neuronExtensions) { + ThingId parentId = m_neuronExtensions.key(neuronExtension); + foreach (QString circuit, neuronExtension->analogOutputs()) { + ThingDescriptor ThingDescriptor(analogOutputThingClassId, QString("Analog output %1").arg(circuit), QString("Neuron extension %1, Slave address %2").arg(neuronExtension->type()).arg(QString::number(neuronExtension->slaveAddress())), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(analogOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + + foreach (Neuron *neuron, m_neurons) { + ThingId parentId = m_neurons.key(neuron); + foreach (QString circuit, neuron->analogOutputs()) { + ThingDescriptor ThingDescriptor(analogOutputThingClassId, QString("Analog output %1").arg(circuit), QString("Neuron %1").arg(neuron->type()), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(analogOutputThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(analogOutputThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + return info->finish(Thing::ThingErrorNoError); + } else if (ThingClassId == userLEDThingClassId) { + QList ThingDescriptors; + foreach (NeuronExtension *neuronExtension, m_neuronExtensions) { + ThingId parentId = m_neuronExtensions.key(neuronExtension); + foreach (QString circuit, neuronExtension->userLEDs()) { + ThingDescriptor ThingDescriptor(userLEDThingClassId, QString("User programmable LED %1").arg(circuit), QString("Neuron extension %1, Slave address %2").arg(neuronExtension->type()).arg(neuronExtension->slaveAddress()), parentId); + foreach(Thing *thing, myThings().filterByParentId(parentId)) { + if (thing->paramValue(userLEDThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(userLEDThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + + foreach (Neuron *neuron, m_neurons) { + ThingId parentId = m_neurons.key(neuron); + foreach (QString circuit, neuron->userLEDs()) { + ThingDescriptor ThingDescriptor(userLEDThingClassId, QString("User programmable LED %1").arg(circuit), QString("Neuron %1").arg(neuron->type()), parentId); + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->paramValue(userLEDThingCircuitParamTypeId) == circuit) { + qCDebug(dcUniPi()) << "Found already added Circuit:" << circuit << parentId; + ThingDescriptor.setThingId(thing->id()); + break; + } + } + ParamList params; + params.append(Param(userLEDThingCircuitParamTypeId, circuit)); + ThingDescriptor.setParams(params); + info->addThingDescriptor(ThingDescriptor); + } + } + return info->finish(Thing::ThingErrorNoError); + } else { + qCWarning(dcUniPi()) << "Unhandled Thing class in discoverThing" << ThingClassId; + return info->finish(Thing::ThingErrorThingClassNotFound); + } +} + +void IntegrationPluginUniPi::setupThing(ThingSetupInfo *info) +{ + Thing *thing = info->thing(); + + if(thing->thingClassId() == uniPi1ThingClassId + || thing->thingClassId() == uniPi1LiteThingClassId) { + + if (m_unipi) + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("There is already a UniPi gateway in the system.")); //only one parent Thing allowed + + if(thing->thingClassId() == uniPi1ThingClassId) { + m_unipi = new UniPi(hardwareManager()->i2cManager(), UniPi::UniPiType::UniPi1, this); + } else if (thing->thingClassId() == uniPi1LiteThingClassId) { + m_unipi = new UniPi(hardwareManager()->i2cManager(), UniPi::UniPiType::UniPi1Lite, this); + } + + if (!m_unipi->init()) { + qCWarning(dcUniPi()) << "Could not setup UniPi"; + m_unipi->deleteLater(); + m_unipi = nullptr; + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up UniPi.")); + } + connect(m_unipi, &UniPi::digitalInputStatusChanged, this, &IntegrationPluginUniPi::onUniPiDigitalInputStatusChanged); + connect(m_unipi, &UniPi::digitalOutputStatusChanged, this, &IntegrationPluginUniPi::onUniPiDigitalOutputStatusChanged); + connect(m_unipi, &UniPi::analogInputStatusChanged, this, &IntegrationPluginUniPi::onUniPiAnalogInputStatusChanged); + connect(m_unipi, &UniPi::analogOutputStatusChanged, this, &IntegrationPluginUniPi::onUniPiAnalogOutputStatusChanged); + thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), true); + + return info->finish(Thing::ThingErrorNoError); + } else if(thing->thingClassId() == neuronS103ThingClassId || + thing->thingClassId() == neuronM103ThingClassId || + thing->thingClassId() == neuronM203ThingClassId || + thing->thingClassId() == neuronM303ThingClassId || + thing->thingClassId() == neuronM403ThingClassId || + thing->thingClassId() == neuronL203ThingClassId || + thing->thingClassId() == neuronL303ThingClassId || + thing->thingClassId() == neuronL403ThingClassId || + thing->thingClassId() == neuronL503ThingClassId || + thing->thingClassId() == neuronL513ThingClassId) { + + if (!neuronDeviceInit()) + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up Neuron.")); + + Neuron *neuron; + if (thing->thingClassId() == neuronS103ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::S103, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronM103ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::M103, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronM203ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::M203, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronM303ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::M303, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronM403ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::M403, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronM503ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::M503, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronL203ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::L203, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronL303ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::L303, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronL403ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::L403, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronL503ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::L503, m_modbusTCPMaster, this); + } else if (thing->thingClassId() == neuronL513ThingClassId) { + neuron = new Neuron(Neuron::NeuronTypes::L513, m_modbusTCPMaster, this); + } else { + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error unrecognized Neuron type.")); + } + + if (!neuron->init()) { + qCWarning(dcUniPi()) << "Could not load the modbus map"; + neuron->deleteLater(); + neuron = nullptr; + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up Neuron Thing.")); + } + m_neurons.insert(thing->id(), neuron); + connect(neuron, &Neuron::requestExecuted, this, &IntegrationPluginUniPi::onRequestExecuted); + connect(neuron, &Neuron::requestError, this, &IntegrationPluginUniPi::onRequestError); + connect(neuron, &Neuron::connectionStateChanged, this, &IntegrationPluginUniPi::onNeuronConnectionStateChanged); + connect(neuron, &Neuron::digitalInputStatusChanged, this, &IntegrationPluginUniPi::onNeuronDigitalInputStatusChanged); + connect(neuron, &Neuron::digitalOutputStatusChanged, this, &IntegrationPluginUniPi::onNeuronDigitalOutputStatusChanged); + connect(neuron, &Neuron::analogInputStatusChanged, this, &IntegrationPluginUniPi::onNeuronAnalogInputStatusChanged); + connect(neuron, &Neuron::analogOutputStatusChanged, this, &IntegrationPluginUniPi::onNeuronAnalogOutputStatusChanged); + connect(neuron, &Neuron::userLEDStatusChanged, this, &IntegrationPluginUniPi::onNeuronUserLEDStatusChanged); + + thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), (m_modbusTCPMaster->state() == QModbusDevice::ConnectedState)); + + return info->finish(Thing::ThingErrorNoError); + } else if(thing->thingClassId() == neuronXS10ThingClassId || + thing->thingClassId() == neuronXS20ThingClassId || + thing->thingClassId() == neuronXS30ThingClassId || + thing->thingClassId() == neuronXS40ThingClassId || + thing->thingClassId() == neuronXS50ThingClassId || + thing->thingClassId() == neuronXS11ThingClassId || + thing->thingClassId() == neuronXS51ThingClassId) { + + if (!neuronExtensionInterfaceInit()) + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error setting up Neuron.")); + + int slaveAddress; + NeuronExtension *neuronExtension; + + if(thing->thingClassId() == neuronXS10ThingClassId) { + slaveAddress = thing->paramValue(neuronXS10ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS10, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS20ThingClassId) { + slaveAddress = thing->paramValue(neuronXS20ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS20, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS30ThingClassId) { + slaveAddress = thing->paramValue(neuronXS30ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS30, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS40ThingClassId) { + slaveAddress = thing->paramValue(neuronXS40ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS40, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS50ThingClassId) { + slaveAddress = thing->paramValue(neuronXS50ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS50, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS11ThingClassId) { + slaveAddress = thing->paramValue(neuronXS11ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS11, m_modbusRTUMaster, slaveAddress, this); + } else if (thing->thingClassId() == neuronXS51ThingClassId) { + slaveAddress = thing->paramValue(neuronXS51ThingSlaveAddressParamTypeId).toInt(); + neuronExtension = new NeuronExtension(NeuronExtension::ExtensionTypes::xS51, m_modbusRTUMaster, slaveAddress, this); + } else { + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error unrecognized extension type.")); + } + if (!neuronExtension->init()) { + qCWarning(dcUniPi()) << "Could not load the modbus map"; + neuronExtension->deleteLater(); + neuronExtension = nullptr; + return info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("Error loading modbus map.")); + } + connect(neuronExtension, &NeuronExtension::requestExecuted, this, &IntegrationPluginUniPi::onRequestExecuted); + connect(neuronExtension, &NeuronExtension::requestError, this, &IntegrationPluginUniPi::onRequestError); + connect(neuronExtension, &NeuronExtension::connectionStateChanged, this, &IntegrationPluginUniPi::onNeuronExtensionConnectionStateChanged); + connect(neuronExtension, &NeuronExtension::digitalInputStatusChanged, this, &IntegrationPluginUniPi::onNeuronExtensionDigitalInputStatusChanged); + connect(neuronExtension, &NeuronExtension::digitalOutputStatusChanged, this, &IntegrationPluginUniPi::onNeuronExtensionDigitalOutputStatusChanged); + connect(neuronExtension, &NeuronExtension::analogInputStatusChanged, this, &IntegrationPluginUniPi::onNeuronExtensionAnalogInputStatusChanged); + connect(neuronExtension, &NeuronExtension::analogOutputStatusChanged, this, &IntegrationPluginUniPi::onNeuronExtensionAnalogOutputStatusChanged); + connect(neuronExtension, &NeuronExtension::userLEDStatusChanged, this, &IntegrationPluginUniPi::onNeuronExtensionUserLEDStatusChanged); + + m_neuronExtensions.insert(thing->id(), neuronExtension); + thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), (m_modbusRTUMaster->state() == QModbusDevice::ConnectedState)); + + return info->finish(Thing::ThingErrorNoError); + } else if (thing->thingClassId() == digitalOutputThingClassId) { + return info->finish(Thing::ThingErrorNoError); + } else if (thing->thingClassId() == digitalInputThingClassId) { + return info->finish(Thing::ThingErrorNoError); + } else if (thing->thingClassId() == userLEDThingClassId) { + return info->finish(Thing::ThingErrorNoError); + } else if (thing->thingClassId() == analogInputThingClassId) { + return info->finish(Thing::ThingErrorNoError); + } else if (thing->thingClassId() == analogOutputThingClassId) { + return info->finish(Thing::ThingErrorNoError); + } else { + qCWarning(dcUniPi()) << "Unhandled Thing class in setupThing:" << thing->thingClassId(); + return info->finish(Thing::ThingErrorThingClassNotFound); + } +} + +void IntegrationPluginUniPi::postSetupThing(Thing *thing) +{ + Q_UNUSED(thing) + + if (!m_reconnectTimer) { + m_reconnectTimer = new QTimer(this); + m_reconnectTimer->setSingleShot(true); + connect(m_reconnectTimer, &QTimer::timeout, this, &IntegrationPluginUniPi::onReconnectTimer); + } +} + + +void IntegrationPluginUniPi::executeAction(ThingActionInfo *info) +{ + Thing *thing = info->thing(); + Action action = info->action(); + + if (thing->thingClassId() == digitalOutputThingClassId) { + + if (action.actionTypeId() == digitalOutputPowerActionTypeId) { + QString digitalOutputNumber = thing->paramValue(digitalOutputThingCircuitParamTypeId).toString(); + bool stateValue = action.param(digitalOutputPowerActionPowerParamTypeId).value().toBool(); + + if (m_unipi) { + if(m_unipi->setDigitalOutput(digitalOutputNumber, stateValue)) { + info->finish(Thing::ThingErrorNoError); + } else { + info->finish(Thing::ThingErrorHardwareFailure); + } + } else if (m_neurons.contains(thing->parentId())) { + Neuron *neuron = m_neurons.value(thing->parentId()); + QUuid requestId = neuron->setDigitalOutput(digitalOutputNumber, stateValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else if (m_neuronExtensions.contains(thing->parentId())) { + NeuronExtension *neuronExtension = m_neuronExtensions.value(thing->parentId()); + QUuid requestId = neuronExtension->setDigitalOutput(digitalOutputNumber, stateValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else { + qCWarning(dcUniPi()) << "Hardware not initilized" << thing->name(); + return info->finish(Thing::ThingErrorHardwareFailure); + } + } else { + qCWarning(dcUniPi()) << "Unhandled ActionTypeId" << action.actionTypeId(); + return info->finish(Thing::ThingErrorActionTypeNotFound); + } + } else if (thing->thingClassId() == analogOutputThingClassId) { + + if (action.actionTypeId() == analogOutputOutputValueActionTypeId) { + QString analogOutputNumber = thing->paramValue(analogOutputThingCircuitParamTypeId).toString(); + double analogValue = action.param(analogOutputOutputValueActionOutputValueParamTypeId).value().toDouble(); + + if (m_unipi) { + if(m_unipi->setAnalogOutput(analogValue)) { + info->finish(Thing::ThingErrorNoError); + } else { + info->finish(Thing::ThingErrorHardwareFailure); + } + } else if (m_neurons.contains(thing->parentId())) { + Neuron *neuron = m_neurons.value(thing->parentId()); + QUuid requestId = neuron->setAnalogOutput(analogOutputNumber, analogValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else if (m_neuronExtensions.contains(thing->parentId())) { + NeuronExtension *neuronExtension = m_neuronExtensions.value(thing->parentId()); + QUuid requestId = neuronExtension->setAnalogOutput(analogOutputNumber, analogValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else { + qCWarning(dcUniPi()) << "Hardware not initilized" << thing->name(); + return info->finish(Thing::ThingErrorHardwareFailure); + } + } else { + qCWarning(dcUniPi()) << "Unhandled ActionTypeId" << action.actionTypeId(); + return info->finish(Thing::ThingErrorActionTypeNotFound); + } + } else if (thing->thingClassId() == userLEDThingClassId) { + if (action.actionTypeId() == userLEDPowerActionTypeId) { + QString userLED = thing->paramValue(userLEDThingCircuitParamTypeId).toString(); + bool stateValue = action.param(userLEDPowerActionPowerParamTypeId).value().toBool(); + if (m_neurons.contains(thing->parentId())) { + Neuron *neuron = m_neurons.value(thing->parentId()); + QUuid requestId = neuron->setUserLED(userLED, stateValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else if (m_neuronExtensions.contains(thing->parentId())) { + NeuronExtension *neuronExtension = m_neuronExtensions.value(thing->parentId()); + QUuid requestId = neuronExtension->setUserLED(userLED, stateValue); + if (requestId.isNull()) { + info->finish(Thing::ThingErrorHardwareFailure); + } else { + m_asyncActions.insert(requestId, info); + connect(info, &ThingActionInfo::aborted, this, [requestId, this](){m_asyncActions.remove(requestId);}); + } + return; + } else { + qCWarning(dcUniPi()) << "Hardware not initilized" << thing->name(); + return info->finish(Thing::ThingErrorHardwareFailure); + } + } else { + qCWarning(dcUniPi()) << "Unhandled ActionTypeId" << action.actionTypeId(); + return info->finish(Thing::ThingErrorActionTypeNotFound); + } + } else { + qCWarning(dcUniPi()) << "Unhandled Thing class in executeAction" << thing->thingClassId(); + info->finish(Thing::ThingErrorThingClassNotFound); + } +} + + +void IntegrationPluginUniPi::thingRemoved(Thing *thing) +{ + if(m_neurons.contains(thing->id())) { + Neuron *neuron = m_neurons.take(thing->id()); + neuron->deleteLater(); + } else if(m_neuronExtensions.contains(thing->id())) { + NeuronExtension *neuronExtension = m_neuronExtensions.take(thing->id()); + neuronExtension->deleteLater(); + } else if ((thing->thingClassId() == uniPi1ThingClassId) || (thing->thingClassId() == uniPi1LiteThingClassId)) { + if(m_unipi) { + m_unipi->deleteLater(); + m_unipi = nullptr; + } + } + + if (myThings().isEmpty()) { + if (m_reconnectTimer) { + m_reconnectTimer->stop(); + m_reconnectTimer->deleteLater(); + m_reconnectTimer = nullptr; + } + + if (m_modbusTCPMaster) { + m_modbusTCPMaster->disconnectDevice(); + m_modbusTCPMaster->deleteLater(); + m_modbusTCPMaster = nullptr; + } + if (m_modbusRTUMaster) { + m_modbusRTUMaster->disconnectDevice(); + m_modbusRTUMaster->deleteLater(); + m_modbusRTUMaster = nullptr; + } + } +} + +void IntegrationPluginUniPi::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value) +{ + qCDebug(dcUniPi()) << "Plugin configuration changed"; + if (paramTypeId == uniPiPluginPortParamTypeId) { + if (m_modbusTCPMaster) { + m_modbusTCPMaster->setConnectionParameter(QModbusDevice::NetworkAddressParameter, value.toString()); + } + } + + if (paramTypeId == uniPiPluginAddressParamTypeId) { + if (m_modbusTCPMaster) { + m_modbusTCPMaster->setConnectionParameter(QModbusDevice::NetworkPortParameter, value.toInt()); + } + } + + if (paramTypeId == uniPiPluginSerialPortParamTypeId) { + if (m_modbusRTUMaster) { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialPortNameParameter, value.toString()); + } + } + + if (paramTypeId == uniPiPluginBaudrateParamTypeId) { + if (m_modbusRTUMaster) { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, value.toInt()); + } + } + + if (paramTypeId == uniPiPluginParityParamTypeId) { + if (m_modbusRTUMaster) { + if (value == "Even") { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::Parity::EvenParity); + } else { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::Parity::NoParity); + } + } + } +} + +void IntegrationPluginUniPi::onNeuronConnectionStateChanged(bool state) +{ + Neuron *neuron = static_cast(sender()); + Thing *thing = myThings().findById(m_neurons.key(neuron)); + if (!thing) { + qCWarning(dcUniPi()) << "Could not find any Thing associated to Neuron obejct"; + return; + } + thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), state); +} + +void IntegrationPluginUniPi::onNeuronDigitalInputStatusChanged(const QString &circuit, bool value) +{ + Neuron *neuron = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->thingClassId() == digitalInputThingClassId) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(digitalInputInputStatusStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronExtensionDigitalInputStatusChanged(const QString &circuit, bool value) +{ + NeuronExtension *neuronExtension = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neuronExtensions.key(neuronExtension))) { + if (thing->thingClassId() == digitalInputThingClassId) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(digitalInputInputStatusStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronDigitalOutputStatusChanged(const QString &circuit, bool value) +{ + Neuron *neuron = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->thingClassId() == digitalOutputThingClassId) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(digitalOutputPowerStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronExtensionDigitalOutputStatusChanged(const QString &circuit, bool value) +{ + NeuronExtension *neuronExtension = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neuronExtensions.key(neuronExtension))) { + if (thing->thingClassId() == digitalOutputThingClassId) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(digitalOutputPowerStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronAnalogInputStatusChanged(const QString &circuit, double value) +{ + Neuron *neuron = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->thingClassId() == analogInputThingClassId) { + if (thing->paramValue(analogInputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(analogInputInputValueStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronExtensionAnalogInputStatusChanged(const QString &circuit, double value) +{ + NeuronExtension *neuronExtension = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neuronExtensions.key(neuronExtension))) { + if (thing->thingClassId() == analogInputThingClassId) { + if (thing->paramValue(analogInputThingCircuitParamTypeId).toString() == circuit) { + thing->setStateValue(analogInputInputValueStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronAnalogOutputStatusChanged(const QString &circuit, double value) +{ + Neuron *neuron = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->thingClassId() == analogOutputThingClassId) { + if (thing->paramValue(analogOutputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(analogOutputOutputValueStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronExtensionAnalogOutputStatusChanged(const QString &circuit, double value) +{ + NeuronExtension *neuronExtension = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neuronExtensions.key(neuronExtension))) { + if (thing->thingClassId() == analogOutputThingClassId) { + if (thing->paramValue(analogOutputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(analogOutputOutputValueStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronUserLEDStatusChanged(const QString &circuit, bool value) +{ + Neuron *neuron = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neurons.key(neuron))) { + if (thing->thingClassId() == userLEDThingClassId) { + if (thing->paramValue(userLEDThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(userLEDPowerStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onNeuronExtensionConnectionStateChanged(bool state) +{ + NeuronExtension *neuron = static_cast(sender()); + Thing *thing = myThings().findById(m_neuronExtensions.key(neuron)); + if (!thing) { + qCWarning(dcUniPi()) << "Could not find any Thing associated to NeuronExtension obejct"; + return; + } + thing->setStateValue(m_connectionStateTypeIds.value(thing->thingClassId()), state); +} + +void IntegrationPluginUniPi::onRequestExecuted(const QUuid &requestId, bool success) +{ + if (m_asyncActions.contains(requestId)){ + ThingActionInfo *info = m_asyncActions.take(requestId); + if (success){ + info->finish(Thing::ThingErrorNoError); + } else { + info->finish(Thing::ThingErrorHardwareNotAvailable); + } + } +} + +void IntegrationPluginUniPi::onRequestError(const QUuid &requestId, const QString &error) +{ + if (m_asyncActions.contains(requestId)){ + ThingActionInfo *info = m_asyncActions.take(requestId); + info->finish(Thing::ThingErrorHardwareNotAvailable, error); + } +} + +void IntegrationPluginUniPi::onNeuronExtensionUserLEDStatusChanged(const QString &circuit, bool value) +{ + NeuronExtension *neuronExtension = static_cast(sender()); + + foreach(Thing *thing, myThings().filterByParentId(m_neuronExtensions.key(neuronExtension))) { + if (thing->thingClassId() == userLEDThingClassId) { + if (thing->paramValue(userLEDThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(userLEDPowerStateTypeId, value); + return; + } + } + } +} + +void IntegrationPluginUniPi::onReconnectTimer() +{ + if(m_modbusRTUMaster) { + if (!m_modbusRTUMaster->connectDevice()) { + qCWarning(dcUniPi()) << "Reconnecing to modbus RTU master failed, trying again in 10 seconds"; + if (m_reconnectTimer) + m_reconnectTimer->start(10000); + } + } + if(m_modbusTCPMaster) { + if (!m_modbusTCPMaster->connectDevice()) { + qCWarning(dcUniPi()) << "Reconnecing to modbus TCP master failed, trying again in 10 seconds"; + if (m_reconnectTimer) + m_reconnectTimer->start(10000); + } + } +} + +void IntegrationPluginUniPi::onModbusTCPStateChanged(QModbusDevice::State state) +{ + bool connected = (state == QModbusDevice::State::ConnectedState); + + if (!connected) { + //try to reconnect in 10 seconds + if (m_reconnectTimer) + m_reconnectTimer->start(10000); + } + qCDebug(dcUniPi()) << "Connection status changed:" << connected; +} + +void IntegrationPluginUniPi::onModbusRTUStateChanged(QModbusDevice::State state) +{ + bool connected = (state == QModbusDevice::State::ConnectedState); + + if (!connected) { + //try to reconnect in 10 seconds + if (m_reconnectTimer) + m_reconnectTimer->start(10000); + } + qCDebug(dcUniPi()) << "Connection status changed:" << connected; +} + +void IntegrationPluginUniPi::onUniPiDigitalInputStatusChanged(const QString &circuit, bool value) +{ + qDebug(dcUniPi) << "Digital Input changed" << circuit << value; + Q_FOREACH (Thing *thing, myThings().filterByThingClassId(digitalInputThingClassId)) { + if (thing->paramValue(digitalInputThingCircuitParamTypeId).toString() == circuit) { + + thing->setStateValue(digitalInputInputStatusStateTypeId, value); + return; + } + } +} + +void IntegrationPluginUniPi::onUniPiDigitalOutputStatusChanged(const QString &circuit, bool value) +{ + qDebug(dcUniPi) << "Digital Output changed" << circuit << value; + Q_FOREACH (Thing *thing, myThings().filterByThingClassId(digitalOutputThingClassId)) { + if (thing->paramValue(digitalOutputThingCircuitParamTypeId).toString() == circuit) { + thing->setStateValue(digitalOutputPowerStateTypeId, value); + return; + } + } +} + +void IntegrationPluginUniPi::onUniPiAnalogInputStatusChanged(const QString &circuit, double value) +{ + qDebug(dcUniPi) << "Analog Input changed" << circuit << value; + Q_FOREACH (Thing *thing, myThings().filterByThingClassId(analogInputThingClassId)) { + if (thing->paramValue(analogInputThingCircuitParamTypeId).toString() == circuit) { + thing->setStateValue(analogInputInputValueStateTypeId, value); + return; + } + } +} + +void IntegrationPluginUniPi::onUniPiAnalogOutputStatusChanged(double value) +{ + qDebug(dcUniPi) << "Analog output changed" << value; + Q_FOREACH (Thing *thing, myThings().filterByThingClassId(analogOutputThingClassId)) { + thing->setStateValue(analogOutputOutputValueStateTypeId, value); + return; + } +} + +bool IntegrationPluginUniPi::neuronDeviceInit() +{ + if(!m_modbusTCPMaster) { + int port = configValue(uniPiPluginPortParamTypeId).toInt();; + QHostAddress ipAddress = QHostAddress(configValue(uniPiPluginAddressParamTypeId).toString()); + + m_modbusTCPMaster = new QModbusTcpClient(this); + m_modbusTCPMaster->setConnectionParameter(QModbusDevice::NetworkPortParameter, port); + m_modbusTCPMaster->setConnectionParameter(QModbusDevice::NetworkAddressParameter, ipAddress.toString()); + m_modbusTCPMaster->setTimeout(1000); + m_modbusTCPMaster->setNumberOfRetries(3); + + connect(m_modbusTCPMaster, &QModbusTcpClient::stateChanged, this, &IntegrationPluginUniPi::onModbusTCPStateChanged); + + if (!m_modbusTCPMaster->connectDevice()) { + qCWarning(dcUniPi()) << "Connect failed:" << m_modbusTCPMaster->errorString(); + m_modbusTCPMaster->deleteLater(); + m_modbusTCPMaster = nullptr; + return false; + } + } + return true; +} + +bool IntegrationPluginUniPi::neuronExtensionInterfaceInit() +{ + if(!m_modbusRTUMaster) { + QString serialPort = configValue(uniPiPluginSerialPortParamTypeId).toString(); + int baudrate = configValue(uniPiPluginBaudrateParamTypeId).toInt(); + QString parity = configValue(uniPiPluginParityParamTypeId).toString(); + + m_modbusRTUMaster = new QModbusRtuSerialMaster(this); + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialPortNameParameter, serialPort); + if (parity == "Even") { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::Parity::EvenParity); + } else { + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialParityParameter, QSerialPort::Parity::NoParity); + } + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, baudrate); + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, 8); + m_modbusRTUMaster->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, 1); + //m_modbusRTUMaster->setTimeout(100); + //m_modbusRTUMaster->setNumberOfRetries(1); + + connect(m_modbusRTUMaster, &QModbusRtuSerialMaster::stateChanged, this, &IntegrationPluginUniPi::onModbusRTUStateChanged); + + if (!m_modbusRTUMaster->connectDevice()) { + qCWarning(dcUniPi()) << "Connect failed:" << m_modbusRTUMaster->errorString(); + m_modbusRTUMaster->deleteLater(); + m_modbusRTUMaster = nullptr; + return false; + } + } + return true; +} diff --git a/unipi/integrationpluginunipi.h b/unipi/integrationpluginunipi.h new file mode 100644 index 0000000..0642dd5 --- /dev/null +++ b/unipi/integrationpluginunipi.h @@ -0,0 +1,109 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef INTEGRATIONPLUGINUNIPI_H +#define INTEGRATIONPLUGINUNIPI_H + +#include "integrations/integrationplugin.h" +#include "plugintimer.h" +#include "unipi.h" +#include "neuron.h" +#include "neuronextension.h" + +#include +#include +#include +#include + +class IntegrationPluginUniPi : public IntegrationPlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginunipi.json") + Q_INTERFACES(IntegrationPlugin) + +public: + + explicit IntegrationPluginUniPi(); + void init() override; + + void discoverThings(ThingDiscoveryInfo *info) override; + void setupThing(ThingSetupInfo *info) override; + void postSetupThing(Thing *thing) override; + void executeAction(ThingActionInfo *info) override; + void thingRemoved(Thing *thing) override; + +private: + UniPi *m_unipi = nullptr; + QHash m_neurons; + QHash m_neuronExtensions; + QModbusTcpClient *m_modbusTCPMaster = nullptr; + QModbusRtuSerialMaster *m_modbusRTUMaster = nullptr; + + QHash m_unlatchTimer; + QTimer *m_reconnectTimer = nullptr; + QHash m_asyncActions; + QHash m_connectionStateTypeIds; + + bool neuronDeviceInit(); + bool neuronExtensionInterfaceInit(); + +private slots: + void onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value); + + void onRequestExecuted(const QUuid &requestId, bool success); + void onRequestError(const QUuid &requestId, const QString &error); + + void onNeuronConnectionStateChanged(bool state); + void onNeuronDigitalInputStatusChanged(const QString &circuit, bool value); + void onNeuronDigitalOutputStatusChanged(const QString &circuit, bool value); + void onNeuronAnalogInputStatusChanged(const QString &circuit, double value); + void onNeuronAnalogOutputStatusChanged(const QString &circuit,double value); + void onNeuronUserLEDStatusChanged(const QString &circuit, bool value); + + void onNeuronExtensionConnectionStateChanged(bool state); + void onNeuronExtensionDigitalInputStatusChanged(const QString &circuit, bool value); + void onNeuronExtensionDigitalOutputStatusChanged(const QString &circuit, bool value); + void onNeuronExtensionAnalogInputStatusChanged(const QString &circuit, double value); + void onNeuronExtensionAnalogOutputStatusChanged(const QString &circuit,double value); + void onNeuronExtensionUserLEDStatusChanged(const QString &circuit, bool value); + + void onReconnectTimer(); + + void onModbusTCPStateChanged(QModbusDevice::State state); + void onModbusRTUStateChanged(QModbusDevice::State state); + + void onUniPiDigitalInputStatusChanged(const QString &circuit, bool value); + void onUniPiDigitalOutputStatusChanged(const QString &circuit, bool value); + void onUniPiAnalogInputStatusChanged(const QString &circuit, double value); + void onUniPiAnalogOutputStatusChanged(double value); +}; + +#endif // INTEGRATIONPLUGINUNIPI_H diff --git a/unipi/integrationpluginunipi.json b/unipi/integrationpluginunipi.json new file mode 100644 index 0000000..028881e --- /dev/null +++ b/unipi/integrationpluginunipi.json @@ -0,0 +1,643 @@ +{ + "displayName": "UniPi", + "name": "UniPi", + "id": "26cba644-35ae-40a6-9c48-924198893a5f", + "paramTypes": [ + { + "id": "5329655d-7e91-4b16-9abf-2abc82bf1b3c", + "name": "port", + "displayName": "Port", + "type": "int", + "defaultValue": "502" + }, + { + "id": "fa9d0407-72fd-4f61-ae8d-c95241ddb610", + "name": "address", + "displayName": "Address", + "type": "QString", + "defaultValue": "127.0.0.1" + }, + { + "id": "1e34aec6-0ff4-400d-80ff-32094612b325", + "name": "serialPort", + "displayName": "Serial port", + "type": "QString", + "defaultValue": "/dev/extcomm/0/0" + }, + { + "id": "a05aaedf-5345-4ab4-b471-8c7d106b473e", + "name": "baudrate", + "displayName": "Baudrate", + "type": "int", + "defaultValue": 19200 + }, + { + "id": "24323f2c-87f9-4b46-aca9-9c98ca731008", + "name": "parity", + "displayName": "Parity", + "type": "QString", + "allowedValues": [ + "None", + "Even" + ], + "defaultValue": "None" + } + ], + "vendors": [ + { + "displayName": "UniPi", + "name": "unipi", + "id": "c82bfe27-d14d-40bd-b12f-ddba214b5fc5", + "thingClasses": [ + { + "id": "f9f5d5eb-a768-40da-af62-55b0b486a5e5", + "name": "uniPi1", + "displayName": "UniPi 1", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "6f4914c1-fce8-4b7a-a73b-ad8a2f4a08ec", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "6ecc110c-f8dc-48af-affd-feef7944421d", + "name": "uniPi1Lite", + "displayName": "UniPi 1 Lite", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "ab505f67-35b8-4ca5-87a8-883ee85506b7", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "72637166-6730-4b2c-9b5d-4d2066c2fea8", + "name": "neuronL403", + "displayName": "Neuron L403", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "5d11bb59-da27-42ac-a176-27215068bd6d", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "c28dc232-6797-4aff-83dd-8d811d485482", + "name": "neuronS103", + "displayName": "Neuron S103", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "e650bb92-2dff-44e2-9500-657efba14492", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "58632506-8d06-4ad0-98d0-275ef8a88955", + "name": "neuronM103", + "displayName": "Neuron M103", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "8ad0d4b2-8256-41a9-8438-003216383215", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "d254dbed-4cf0-4fe3-96da-9adfd8d1c912", + "name": "neuronM203", + "displayName": "Neuron M203", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "c7318db4-ba50-4b80-95a7-2a890eaa16c4", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "6ee92fd5-c169-4050-aa3c-d8289bee20ec", + "name": "neuronM303", + "displayName": "Neuron M303", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "80528228-7ecd-444f-be59-e2ff89cb20a1", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "0621f5f1-8531-4d44-800e-52f926c58b17", + "name": "neuronM403", + "displayName": "Neuron M403", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "0eb77f43-dc85-450f-ab2c-d150a739570d", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "0d5a09de-daf8-469f-803c-520f763167df", + "name": "neuronM503", + "displayName": "Neuron M503", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "688d21a7-7658-4874-b02b-9340b2c9ba12", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false, + "cached": false + } + ] + }, + { + "id": "366bac45-c602-4c45-9812-1d3d04b2c3db", + "name": "neuronL203", + "displayName": "Neuron L203", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "515a70d3-d599-426f-88a2-c5a651420812", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false + } + ] + }, + { + "id": "fc1a9aab-8573-42fe-8ed4-4876795870c2", + "name": "neuronL303", + "displayName": "Neuron L303", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "3a020c62-e5f9-4909-98d4-5538a8d43d9d", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "58d33a7f-30ac-4d79-94a1-2013dc50743e", + "name": "neuronL503", + "displayName": "Neuron L503", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "5e689958-02f0-4e0a-9bb3-e04a6fe1dd30", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "defaultValue": false + } + ] + }, + { + "id": "4b57e164-5f62-4518-afc1-15a659a2c402", + "name": "neuronL513", + "displayName": "Neuron L513", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + ], + "stateTypes": [ + { + "id": "fa82f6cc-4308-4d8b-96c1-2fb1a638e04d", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "9bfe46d0-5dbd-432c-877f-1ff47faf6e17", + "name": "neuronXS10", + "displayName": "Neuron xS10", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "c105e97a-1e00-44fd-ac10-d43e731e43b0", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "caf378cd-eb86-4779-8618-6f9c2bd58c17", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "9e2e13bb-c18c-438f-989f-52363561ce85", + "name": "neuronXS20", + "displayName": "Neuron xS20", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "a5c97b47-580b-4ea3-8755-ef68380f5c2a", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "7afb047f-4ca4-469c-9171-b6de52d27504", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "a1ec57b1-fcf9-4540-80c9-40f78cddc85f", + "name": "neuronXS30", + "displayName": "Neuron xS30", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "956254a2-83f5-4f3c-8e79-e1b009a7e203", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "ed1adb91-54ec-430b-96ca-fb5ef5cf6628", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "05c78946-48f4-4e1b-9d45-90fbd66c71c0", + "name": "neuronXS40", + "displayName": "Neuron xS40", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "6b2da1ee-5cae-4325-913e-21d26d5909c3", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "7caea8c3-ac29-42fb-835b-beec7fa1ce20", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "c31f5e8c-a27c-49db-b5a8-dd065336b79a", + "name": "neuronXS50", + "displayName": "Neuron xS50", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "6d01f6b3-7c3c-4fc8-acf2-dc9811340a76", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "25b0eaa7-14eb-49ea-a869-13b1ea3bd294", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "f59bfba2-0455-49f2-b92d-badfec5dcc01", + "name": "neuronXS11", + "displayName": "Neuron xS11", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "5b8d8149-f08a-451e-9766-08966f7f91c1", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "bf1acd53-f3c9-4654-a220-d36eb130cda2", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "0e11fbd3-8d4a-4fd8-aeeb-25ee2d134a17", + "name": "neuronXS51", + "displayName": "Neuron xS51", + "createMethods": ["user"], + "interfaces": ["gateway"], + "paramTypes": [ + { + "id": "8f40b075-ebed-4ce1-b9e7-a37bb31656c4", + "name": "slaveAddress", + "displayName": "Modbus slave address", + "type": "int", + "defaultValue": 1 + } + ], + "stateTypes": [ + { + "id": "f95875de-d5d5-4e7f-8873-3fe2615a0b11", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connection changed", + "type": "bool", + "cached": false, + "defaultValue": false + } + ] + }, + { + "id": "0bec278a-98f1-416b-b496-6d00740f178a", + "name": "digitalInput", + "displayName": "Digital input", + "createMethods": ["discovery"], + "interfaces": [ ], + "paramTypes": [ + { + "id": "9c84d9b8-fdc7-41c1-9559-08f061ffc7a6", + "name": "circuit", + "displayName": "Circuit", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "fa4f2764-b7ff-45e7-993b-b6af1840fd3d", + "name": "inputStatus", + "displayName": "Digital input", + "displayNameEvent": "Digital input changed", + "type": "bool", + "defaultValue": false, + "ioType": "digitalInput" + } + ] + }, + { + "id": "f3a3c5ed-461a-4ca8-930b-df3af821b9e0", + "name": "digitalOutput", + "displayName": "Digital output", + "createMethods": ["discovery"], + "interfaces": ["power"], + "paramTypes": [ + { + "id": "c01d5bde-de5d-42c5-b462-79745827875a", + "name": "circuit", + "displayName": "Circuit", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "470a0e30-a170-47ed-9ed3-c41db919555f", + "name": "power", + "displayName": "Power", + "displayNameAction": "set digital output", + "displayNameEvent": "digital output changed", + "type": "bool", + "defaultValue": false, + "writable": true, + "ioType": "digitalOutput" + } + ] + }, + { + "id": "9094a69f-f475-4050-a345-5ab52cb19774", + "name": "analogOutput", + "displayName": "Analog output", + "createMethods": ["discovery"], + "interfaces": [ ], + "paramTypes": [ + { + "id": "46e606cc-67ee-4891-bc39-8fb0565c87da", + "name": "circuit", + "displayName": "Circuit", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "6d825eb8-6d2a-4ac3-9125-9df8173116c9", + "name": "outputValue", + "displayName": "Analog output", + "displayNameEvent": "Analog output changed", + "displayNameAction": "Set analog output", + "type": "double", + "unit": "Volt", + "minValue": 0.00, + "maxValue": 10.00, + "defaultValue": 0.00, + "writable": true, + "ioType": "analogOutput" + } + ] + }, + { + "id": "06abd6a4-e655-4243-bc9c-9bd4ef5be2e6", + "name": "analogInput", + "displayName": "Analog Input", + "createMethods": ["discovery"], + "interfaces": [ ], + "paramTypes": [ + { + "id": "cc6eb664-9fd2-457d-9d0d-0eb9703db4a2", + "name": "circuit", + "displayName": "Circuit", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "2296f575-cc53-48ef-9086-6a412abfdde5", + "name": "inputValue", + "displayName": "Analog input", + "displayNameEvent": "Analog input changed", + "type": "double", + "unit": "Volt", + "defaultValue": 0.00, + "minValue": 0.00, + "maxValue": 10.00, + "ioType": "analogInput" + } + ] + }, + { + "id": "6a87e9b3-7f3d-4b7c-8958-905ec039ef57", + "name": "userLED", + "displayName": "User LED", + "createMethods": ["discovery"], + "interfaces": ["power"], + "paramTypes": [ + { + "id": "88fffbd6-6469-47ce-bfba-700da90a6075", + "name": "circuit", + "displayName": "Circuit", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "38878388-9a2e-45b0-8f3e-c25073c9dc1d", + "name": "power", + "displayName": "Power", + "displayNameAction": "set digital output", + "displayNameEvent": "digital output changed", + "type": "bool", + "defaultValue": false, + "writable": true + } + ] + } + ] + } + ] +} diff --git a/unipi/mcp23008.cpp b/unipi/mcp23008.cpp new file mode 100644 index 0000000..c626d9d --- /dev/null +++ b/unipi/mcp23008.cpp @@ -0,0 +1,117 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "mcp23008.h" +#include "i2cport.h" +#include "extern-plugininfo.h" + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +} + +MCP23008::MCP23008(const QString &i2cPortName, int i2cAddress, QObject *parent) : + QObject(parent), + m_i2cPortName(i2cPortName), + m_i2cAddress(i2cAddress) +{ + +} + +MCP23008::~MCP23008() +{ + m_i2cFile.close(); +} + +bool MCP23008::init() +{ + qCDebug(dcUniPi()) << "MCP23008: initialize I2C port" << m_i2cPortName << QString("0x%1").arg(m_i2cAddress, 0, 16); + + m_i2cFile.setFileName("/dev/" + m_i2cPortName); + if (!m_i2cFile.exists()) { + qCWarning(dcUniPi()) << "MCP23008: The given I2C file descriptor does not exist:" << m_i2cFile.fileName(); + return false; + } + + if (!m_i2cFile.open(QFile::ReadWrite)) { + qCWarning(dcUniPi()) << "MCP23008: Could not open the given I2C file descriptor:" << m_i2cFile.fileName() << m_i2cFile.errorString(); + return false; + } + m_fileDescriptor = m_i2cFile.handle(); + return true; + +} + +bool MCP23008::writeRegister(MCP23008::RegisterAddress registerAddress, uint8_t value) +{ +#ifdef __arm__ + if (ioctl(m_fileDescriptor, I2C_SLAVE, m_i2cAddress) < 0) { + qCWarning(dcUniPi()) << "MCP23008: Could not set I2C into slave mode" << m_i2cPortName << QString("0x%1").arg(m_i2cAddress, 0, 16); + return false; + } + + // Write command + int length = i2c_smbus_write_byte_data(m_fileDescriptor, registerAddress, value); + if (length < 0) { + qCWarning(dcUniPi()) << "MCP23008: Could not sent command to I2C bus."; + return false; + } + return true; +#else + Q_UNUSED(value) + Q_UNUSED(registerAddress) + return false; +#endif // __arm__ +} + + +bool MCP23008::readRegister(RegisterAddress registerAddress, uint8_t *value) +{ +#ifdef __arm__ + if (ioctl(m_fileDescriptor, I2C_SLAVE, m_i2cAddress) < 0) { + qCWarning(dcUniPi()) << "MCP23008: Could not set I2C into slave mode" << m_i2cPortName << QString("0x%1").arg(m_i2cAddress, 0, 16); + return false; + } + + *value = i2c_smbus_read_byte_data(m_fileDescriptor, registerAddress); + return true; +#else + Q_UNUSED(registerAddress) + Q_UNUSED(value) + return false; +#endif // __arm__ +} diff --git a/unipi/mcp23008.h b/unipi/mcp23008.h new file mode 100644 index 0000000..31fd88a --- /dev/null +++ b/unipi/mcp23008.h @@ -0,0 +1,81 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef MCP23008_H +#define MCP23008_H + +#include +#include + +class MCP23008 : public QObject +{ + Q_OBJECT +public: + enum Pinout { + GP0 = 0x00, + GP1 = 0x01, + GP2 = 0x02, + GP3 = 0x03 + }; + Q_ENUM(Pinout) + + enum RegisterAddress { + IODIR = 0x00, //Controls the direction of the data I/O. When a bit is set, the corresponding pin becomes an input. When a bit is clear, the corresponding pin becomes an output. + IPOL = 0x01, //The IPOL register allows the user to configure the polarity on the corresponding GPIO port bits. If a bit is set, the corresponding GPIO register bit will reflect the inverted value on the pin. + GPINTEN = 0x02, //The GPINTEN register controls the interrupt-on- change feature for each pin. If a bit is set, the corresponding pin is enabled for interrupt-on-change. The DEFVAL and INTCON registers must also be configured if any pins are enabled for interrupt-on-change. + DEFVAL = 0x03, //The default comparison value is configured in the DEFVAL register. If enabled (via GPINTEN and INTCON) to compare against the DEFVAL register, an opposite value on the associated pin will cause an interrupt to occur. + INTCON = 0x04, //The INTCON register controls how the associated pin value is compared for the interrupt-on-change feature. If a bit is set, the corresponding I/O pin is compared against the associated bit in the DEFVAL register. If a bit value is clear, the corresponding I/O pin is compared against the previous value. + IOCON = 0x05, //The IOCON register contains several bits for configuring the device: + GPPU = 0x06, //The GPPU register controls the pull-up resistors for the port pins. If a bit is set and the corresponding pin is configured as an input, the corresponding port pin is internally pulled up with a 100 kΩ resistor. + INTF = 0x07, //The INTF register reflects the interrupt condition on the port pins of any pin that is enabled for interrupts via the GPINTEN register. A ‘set’ bit indicates that the associated pin caused the interrupt. This register is ‘read-only’. Writes to this register will be ignored. + INTCAP = 0x08, //The INTCAP register captures the GPIO port value at the time the interrupt occurred. The register is ‘read- only’ and is updated only when an interrupt occurs. The register will remain unchanged until the interrupt is cleared via a read of INTCAP or GPIO. + GPIO = 0x09, //GENERAL PURPOSE I/O PORT REGISTER + OLAT = 0x0A //The OLAT register provides access to the output latches. A read from this register results in a read of the OLAT and not the port itself. A write to this register modifies the output latches that modify the pins configured as outputs. + }; + Q_ENUM(RegisterAddress) + + explicit MCP23008(const QString &i2cPortName, int i2cAddress = 0x48, QObject *parent = nullptr); + ~MCP23008() override; + + bool init(); + + bool writeRegister(RegisterAddress registerAddress, uint8_t value); + bool readRegister(RegisterAddress registerAddress, uint8_t *value); + +private: + QFile m_i2cFile; + QString m_i2cPortName; + int m_i2cAddress; + + int m_fileDescriptor = -1; +}; + +#endif // MCP23008_H + diff --git a/unipi/mcp342xchannel.cpp b/unipi/mcp342xchannel.cpp new file mode 100644 index 0000000..d4e27de --- /dev/null +++ b/unipi/mcp342xchannel.cpp @@ -0,0 +1,87 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "mcp342xchannel.h" +#include "extern-plugininfo.h" + +#include + +#define GENERAL_CALL_RESET 0x0006 +#define GENERAL_CALL_LATCH 0x0004 +#define GENERAL_CALL_CONVERSION 0x0008 + +#define CONFIGURATION_REGISTER + + +MCP342XChannel::MCP342XChannel(const QString &portName, int address, int channel, Gain gain, QObject *parent) : + I2CDevice(portName, address, parent), + m_channel(channel), + m_gain(gain) +{ + +} + +QByteArray MCP342XChannel::readData(int fd) +{ + // Wair for previous messurements to be completed + char readBuf[3] = {0}; + do { + if (read(fd, readBuf, 3) != 3) { + qCWarning(dcUniPi()) << "MCP342X: could not read ADC data"; + return QByteArray(); + } + } while (!(readBuf[2] & (1 << ConfRegisterBits::RDY))); + + // Start a configuration conversation + unsigned char writeBuf[1] = {0}; + writeBuf[0] |= (m_channel & 0x0003) << ConfRegisterBits::C0; + writeBuf[0] |= m_gain << ConfRegisterBits::G0; + //writeBuf[0] |= SampleRateSelectionBit::Bits18 << ConfRegisterBits::S0; + writeBuf[0] |= 1 << ConfRegisterBits::OC; // one shot + writeBuf[0] |= 1 << ConfRegisterBits::RDY; // start conversoin + if (write(fd, writeBuf, 1) != 1) { + qCWarning(dcUniPi()) << "MCP342X: could not write config register"; + return QByteArray(); + } + + // Wait again for the device to finish measurement + do { + if (read(fd, readBuf, 3) != 3) { + qCWarning(dcUniPi()) << "MCP342X: could not read ADC data"; + return QByteArray(); + } + } while (!(readBuf[2] & (1 << ConfRegisterBits::RDY))); + + if ((readBuf[2] & (0x03 << ConfRegisterBits::C0)) != ((m_channel & 0x0003) << ConfRegisterBits::C0)) + return QByteArray(); + + return QByteArray(readBuf, 3); +} + diff --git a/unipi/mcp342xchannel.h b/unipi/mcp342xchannel.h new file mode 100644 index 0000000..82ea8a1 --- /dev/null +++ b/unipi/mcp342xchannel.h @@ -0,0 +1,86 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef MCP342X_H +#define MCP342X_H + +#include +#include + +#include + +class MCP342XChannel: public I2CDevice +{ + Q_OBJECT +public: + + /* Resolution | LSB + * --------------------- + * 12 bits | 1 mV + * 14 bits | 250 μV + * 16 bits | 62.5 μV + * 18 bits | 15.625 μ + */ + + enum Gain { + Gain_1 = 0, + Gain_2 = 1, + Gain_4 = 2, + Gain_8 = 3 + }; + + enum ConfRegisterBits { + G0 = 0, // Gain Selection + G1, // Gain Selection + S0, // Sample Rate + S1, // Sample Rate + OC, // Conversion Mode Bit + C0, // Channel Selection + C1, // Channel Selection + RDY // Ready Bit + }; + + enum SampleRateSelectionBit { + Bits12 = 0, + Bits14 = 1, + Bits16 = 2, + Bits18 = 3 + }; + + explicit MCP342XChannel(const QString &portName, int address, int channel, Gain gain, QObject *parent = nullptr); + + QByteArray readData(int fd) override; + +private: + int m_channel = 0; + Gain m_gain = Gain_1; +}; + +#endif // MCP342X_H diff --git a/unipi/meta.json b/unipi/meta.json new file mode 100644 index 0000000..567c5ee --- /dev/null +++ b/unipi/meta.json @@ -0,0 +1,14 @@ +{ + "title": "UniPi", + "tagline": "Integrates UniPi with nymea", + "icon": "unipi.png", + "stability": "consumer", + "offline": true, + "technologies": [ + "network", + "serial-port" + ], + "categories": [ + "relay" + ] +} diff --git a/unipi/modbus_maps/Extension_xS11/Extension_xS11-Coils-group-1.csv b/unipi/modbus_maps/Extension_xS11/Extension_xS11-Coils-group-1.csv new file mode 100644 index 0000000..a9645a3 --- /dev/null +++ b/unipi/modbus_maps/Extension_xS11/Extension_xS11-Coils-group-1.csv @@ -0,0 +1,71 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Relay Output 1.1,Basic +1,1,RW,Relay Output 1.2,Basic +2,2,RW,Relay Output 1.3,Basic +3,3,RW,Relay Output 1.4,Basic +4,4,RW,Relay Output 1.5,Basic +5,5,RW,Relay Output 1.6,Basic +6,6,RW,Relay Output 1.7,Basic +7,7,RW,Relay Output 1.8,Basic +8,8,RW,Relay Output 1.9,Basic +9,9,RW,Relay Output 1.10,Basic +10,10,RW,Relay Output 1.11,Basic +11,11,RW,Relay Output 1.12,Basic +12,12,RW,Relay Output 1.13,Basic +13,13,R,Digital Input 1.1,Basic +14,14,R,Digital Input 1.2,Basic +15,15,R,Digital Input 1.3,Basic +16,16,R,Digital Input 1.4,Basic +17,17,R,Digital Input 1.5,Basic +18,18,R,Digital Input 1.6,Basic +19,19,R,Digital Input 1.7,Basic +20,20,R,Digital Input 1.8,Basic +21,21,R,Digital Input 1.9,Basic +22,22,R,Digital Input 1.10,Basic +23,23,R,Digital Input 1.11,Basic +24,24,R,Digital Input 1.12,Basic +25,25,RW,User Programmable LED 1.1,Basic +26,26,RW,User Programmable LED 1.2,Basic +27,27,RW,User Programmable LED 1.3,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Enable DirectSwitch on DI 1.5,Advanced +1012,1012,RW,Enable DirectSwitch on DI 1.6,Advanced +1013,1013,RW,Enable DirectSwitch on DI 1.7,Advanced +1014,1014,RW,Enable DirectSwitch on DI 1.8,Advanced +1015,1015,RW,Enable DirectSwitch on DI 1.9,Advanced +1016,1016,RW,Enable DirectSwitch on DI 1.10,Advanced +1017,1017,RW,Enable DirectSwitch on DI 1.11,Advanced +1018,1018,RW,Enable DirectSwitch on DI 1.12,Advanced +1019,1019,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1020,1020,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1021,1021,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1022,1022,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1023,1023,RW,Invert DirectSwitch Polarity on DI 1.5,Advanced +1024,1024,RW,Invert DirectSwitch Polarity on DI 1.6,Advanced +1025,1025,RW,Invert DirectSwitch Polarity on DI 1.7,Advanced +1026,1026,RW,Invert DirectSwitch Polarity on DI 1.8,Advanced +1027,1027,RW,Invert DirectSwitch Polarity on DI 1.9,Advanced +1028,1028,RW,Invert DirectSwitch Polarity on DI 1.10,Advanced +1029,1029,RW,Invert DirectSwitch Polarity on DI 1.11,Advanced +1030,1030,RW,Invert DirectSwitch Polarity on DI 1.12,Advanced +1031,1031,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1032,1032,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1033,1033,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1034,1034,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced +1035,1035,RW,Enable DirectSwitch Toggle Mode on DI 1.5,Advanced +1036,1036,RW,Enable DirectSwitch Toggle Mode on DI 1.6,Advanced +1037,1037,RW,Enable DirectSwitch Toggle Mode on DI 1.7,Advanced +1038,1038,RW,Enable DirectSwitch Toggle Mode on DI 1.8,Advanced +1039,1039,RW,Enable DirectSwitch Toggle Mode on DI 1.9,Advanced +1040,1040,RW,Enable DirectSwitch Toggle Mode on DI 1.10,Advanced +1041,1041,RW,Enable DirectSwitch Toggle Mode on DI 1.11,Advanced +1042,1042,RW,Enable DirectSwitch Toggle Mode on DI 1.12,Advanced diff --git a/unipi/modbus_maps/Extension_xS11/Extension_xS11-Registers-group-1.csv b/unipi/modbus_maps/Extension_xS11/Extension_xS11-Registers-group-1.csv new file mode 100644 index 0000000..921ca86 --- /dev/null +++ b/unipi/modbus_maps/Extension_xS11/Extension_xS11-Registers-group-1.csv @@ -0,0 +1,152 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +0,0,1,R,MixedBits,Digital Input 1.5,4,Basic +0,0,1,R,MixedBits,Digital Input 1.6,5,Basic +0,0,1,R,MixedBits,Digital Input 1.7,6,Basic +0,0,1,R,MixedBits,Digital Input 1.8,7,Basic +0,0,1,R,MixedBits,Digital Input 1.9,8,Basic +0,0,1,R,MixedBits,Digital Input 1.10,9,Basic +0,0,1,R,MixedBits,Digital Input 1.11,10,Basic +0,0,1,R,MixedBits,Digital Input 1.12,11,Basic +1,1,1,RW,MixedBits,Relay Output 1.1,0,Basic +1,1,1,RW,MixedBits,Relay Output 1.2,1,Basic +1,1,1,RW,MixedBits,Relay Output 1.3,2,Basic +1,1,1,RW,MixedBits,Relay Output 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.5,4,Basic +1,1,1,RW,MixedBits,Relay Output 1.6,5,Basic +1,1,1,RW,MixedBits,Relay Output 1.7,6,Basic +1,1,1,RW,MixedBits,Relay Output 1.8,7,Basic +1,1,1,RW,MixedBits,Relay Output 1.9,8,Basic +1,1,1,RW,MixedBits,Relay Output 1.10,9,Basic +1,1,1,RW,MixedBits,Relay Output 1.11,10,Basic +1,1,1,RW,MixedBits,Relay Output 1.12,11,Basic +1,1,1,RW,MixedBits,Relay Output 1.13,12,Basic +2,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +3,3,2,RW,DWord,Counter of Digital Input 1.1,,Basic +5,5,2,RW,DWord,Counter of Digital Input 1.2,,Basic +7,7,2,RW,DWord,Counter of Digital Input 1.3,,Basic +9,9,2,RW,DWord,Counter of Digital Input 1.4,,Basic +11,11,2,RW,DWord,Counter of Digital Input 1.5,,Basic +13,13,2,RW,DWord,Counter of Digital Input 1.6,,Basic +15,15,2,RW,DWord,Counter of Digital Input 1.7,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.8,,Basic +19,19,2,RW,DWord,Counter of Digital Input 1.9,,Basic +21,21,2,RW,DWord,Counter of Digital Input 1.10,,Basic +23,23,2,RW,DWord,Counter of Digital Input 1.11,,Basic +25,25,2,RW,DWord,Counter of Digital Input 1.12,,Basic +27,27,1,W,Word,Reserved - Do Not Use,,Reserved +28,28,1,W,Word,Reserved - Do Not Use,,Reserved +29,29,1,W,Word,Reserved - Do Not Use,,Reserved +30,30,1,W,Word,Reserved - Do Not Use,,Reserved +31,31,1,RW,MixedBits,User LED 1.1,0,Basic +31,31,1,RW,MixedBits,User LED 1.2,1,Basic +31,31,1,RW,MixedBits,User LED 1.3,2,Basic +32,32,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.5,4,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.6,5,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.7,6,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.8,7,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.9,8,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.10,9,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.11,10,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.12,11,Advanced +32,32,1,RW,MixedBits,Synchronised DO/RO 1.13,12,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.5,4,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.6,5,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.7,6,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.8,7,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.9,8,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.10,9,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.11,10,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.12,11,Advanced +33,33,1,RW,MixedBits,Synchronised DO/RO Lock 1.13,12,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,Word,Debounce time (in 100us) for DI 1.5,,Advanced +1015,1015,1,RW,Word,Debounce time (in 100us) for DI 1.6,,Advanced +1016,1016,1,RW,Word,Debounce time (in 100us) for DI 1.7,,Advanced +1017,1017,1,RW,Word,Debounce time (in 100us) for DI 1.8,,Advanced +1018,1018,1,RW,Word,Debounce time (in 100us) for DI 1.9,,Advanced +1019,1019,1,RW,Word,Debounce time (in 100us) for DI 1.10,,Advanced +1020,1020,1,RW,Word,Debounce time (in 100us) for DI 1.11,,Advanced +1021,1021,1,RW,Word,Debounce time (in 100us) for DI 1.12,,Advanced +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.5,4,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.6,5,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.7,6,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.8,7,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.9,8,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.10,9,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.11,10,Basic +1022,1022,1,RW,MixedBits,Enable DirectSwitch on DI 1.12,11,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.5,4,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.6,5,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.7,6,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.8,7,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.9,8,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.10,9,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.11,10,Basic +1023,1023,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.12,11,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.5,4,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.6,5,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.7,6,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.8,7,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.9,8,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.10,9,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.11,10,Basic +1024,1024,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.12,11,Basic +1025,1025,1,W,Word,Reserved - Do Not Use,,Reserved +1026,1026,1,W,Word,Reserved - Do Not Use,,Reserved +1027,1027,1,RW,MixedBits,RS485 Configuration,,Basic +1028,1028,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Extension_xS51/Extension_xS51-Coils-group-1.csv b/unipi/modbus_maps/Extension_xS51/Extension_xS51-Coils-group-1.csv new file mode 100644 index 0000000..b9f785e --- /dev/null +++ b/unipi/modbus_maps/Extension_xS51/Extension_xS51-Coils-group-1.csv @@ -0,0 +1,31 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Relay Output 1.1,Basic +1,1,RW,Relay Output 1.2,Basic +2,2,RW,Relay Output 1.3,Basic +3,3,RW,Relay Output 1.4,Basic +4,4,RW,Relay Output 1.5,Basic +5,5,R,Digital Input 1.1,Basic +6,6,R,Digital Input 1.2,Basic +7,7,R,Digital Input 1.3,Basic +8,8,R,Digital Input 1.4,Basic +9,9,RW,User Programmable LED 1.1,Basic +10,10,RW,User Programmable LED 1.2,Basic +11,11,RW,User Programmable LED 1.3,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Extension_xS51/Extension_xS51-Registers-group-1.csv b/unipi/modbus_maps/Extension_xS51/Extension_xS51-Registers-group-1.csv new file mode 100644 index 0000000..0764250 --- /dev/null +++ b/unipi/modbus_maps/Extension_xS51/Extension_xS51-Registers-group-1.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.1,0,Basic +1,1,1,RW,MixedBits,Relay Output 1.2,1,Basic +1,1,1,RW,MixedBits,Relay Output 1.3,2,Basic +1,1,1,RW,MixedBits,Relay Output 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.5,4,Basic +2,2,1,RW,Word,Analog Output Value 1.1 (0..4000 ~ 0..10V),,Basic +3,3,1,RW,Word,Analog Output Value 1.2 (0..4000 ~ 0..10V),,Basic +4,4,1,RW,Word,Analog Output Value 1.3 (0..4000 ~ 0..10V),,Basic +5,5,1,RW,Word,Analog Output Value 1.4 (0..4000 ~ 0..10V),,Basic +6,6,2,R,Real,Analog Input Value 1.1,,Basic +8,8,2,R,Real,Analog Input Value 1.2,,Basic +10,10,2,R,Real,Analog Input Value 1.3,,Basic +12,12,2,R,Real,Analog Input Value 1.4,,Basic +14,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +15,15,2,RW,DWord,Counter of Digital Input 1.1,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.2,,Basic +19,19,2,RW,DWord,Counter of Digital Input 1.3,,Basic +21,21,2,RW,DWord,Counter of Digital Input 1.4,,Basic +23,23,1,W,Word,Reserved - Do Not Use,,Reserved +24,24,1,W,Word,Reserved - Do Not Use,,Reserved +25,25,1,W,Word,Reserved - Do Not Use,,Reserved +26,26,1,W,Word,Reserved - Do Not Use,,Reserved +27,27,1,RW,MixedBits,User LED 1.1,0,Basic +27,27,1,RW,MixedBits,User LED 1.2,1,Basic +27,27,1,RW,MixedBits,User LED 1.3,2,Basic +28,28,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO 1.5,4,Advanced +29,29,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +29,29,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +29,29,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +29,29,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +29,29,1,RW,MixedBits,Synchronised DO/RO Lock 1.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,W,Word,Reserved - Do Not Use,,Reserved +1018,1018,1,W,Word,Reserved - Do Not Use,,Reserved +1019,1019,1,RW,Word,Analog Input Configuration(U/I/R) 1.1,,Basic +1020,1020,1,RW,Word,Analog Input Configuration(U/I/R) 1.2,,Basic +1021,1021,1,RW,Word,Analog Input Configuration(U/I/R) 1.3,,Basic +1022,1022,1,RW,Word,Analog Input Configuration(U/I/R) 1.4,,Basic +1023,1023,1,RW,MixedBits,RS485 Configuration,,Basic +1024,1024,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-2.csv new file mode 100644 index 0000000..ae02ec8 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-2.csv @@ -0,0 +1,79 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,RW,Relay Output 2.6,Basic +106,6,RW,Relay Output 2.7,Basic +107,7,RW,Relay Output 2.8,Basic +108,8,RW,Relay Output 2.9,Basic +109,9,RW,Relay Output 2.10,Basic +110,10,RW,Relay Output 2.11,Basic +111,11,RW,Relay Output 2.12,Basic +112,12,RW,Relay Output 2.13,Basic +113,13,RW,Relay Output 2.14,Basic +114,14,R,Digital Input 2.1,Basic +115,15,R,Digital Input 2.2,Basic +116,16,R,Digital Input 2.3,Basic +117,17,R,Digital Input 2.4,Basic +118,18,R,Digital Input 2.5,Basic +119,19,R,Digital Input 2.6,Basic +120,20,R,Digital Input 2.7,Basic +121,21,R,Digital Input 2.8,Basic +122,22,R,Digital Input 2.9,Basic +123,23,R,Digital Input 2.10,Basic +124,24,R,Digital Input 2.11,Basic +125,25,R,Digital Input 2.12,Basic +126,26,R,Digital Input 2.13,Basic +127,27,R,Digital Input 2.14,Basic +128,28,R,Digital Input 2.15,Basic +129,29,R,Digital Input 2.16,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Enable DirectSwitch on DI 2.6,Advanced +1113,1013,RW,Enable DirectSwitch on DI 2.7,Advanced +1114,1014,RW,Enable DirectSwitch on DI 2.8,Advanced +1115,1015,RW,Enable DirectSwitch on DI 2.9,Advanced +1116,1016,RW,Enable DirectSwitch on DI 2.10,Advanced +1117,1017,RW,Enable DirectSwitch on DI 2.11,Advanced +1118,1018,RW,Enable DirectSwitch on DI 2.12,Advanced +1119,1019,RW,Enable DirectSwitch on DI 2.13,Advanced +1120,1020,RW,Enable DirectSwitch on DI 2.14,Advanced +1121,1021,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1122,1022,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1123,1023,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1124,1024,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1125,1025,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1126,1026,RW,Invert DirectSwitch Polarity on DI 2.6,Advanced +1127,1027,RW,Invert DirectSwitch Polarity on DI 2.7,Advanced +1128,1028,RW,Invert DirectSwitch Polarity on DI 2.8,Advanced +1129,1029,RW,Invert DirectSwitch Polarity on DI 2.9,Advanced +1130,1030,RW,Invert DirectSwitch Polarity on DI 2.10,Advanced +1131,1031,RW,Invert DirectSwitch Polarity on DI 2.11,Advanced +1132,1032,RW,Invert DirectSwitch Polarity on DI 2.12,Advanced +1133,1033,RW,Invert DirectSwitch Polarity on DI 2.13,Advanced +1134,1034,RW,Invert DirectSwitch Polarity on DI 2.14,Advanced +1135,1035,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1136,1036,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1137,1037,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1138,1038,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1139,1039,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced +1140,1040,RW,Enable DirectSwitch Toggle Mode on DI 2.6,Advanced +1141,1041,RW,Enable DirectSwitch Toggle Mode on DI 2.7,Advanced +1142,1042,RW,Enable DirectSwitch Toggle Mode on DI 2.8,Advanced +1143,1043,RW,Enable DirectSwitch Toggle Mode on DI 2.9,Advanced +1144,1044,RW,Enable DirectSwitch Toggle Mode on DI 2.10,Advanced +1145,1045,RW,Enable DirectSwitch Toggle Mode on DI 2.11,Advanced +1146,1046,RW,Enable DirectSwitch Toggle Mode on DI 2.12,Advanced +1147,1047,RW,Enable DirectSwitch Toggle Mode on DI 2.13,Advanced +1148,1048,RW,Enable DirectSwitch Toggle Mode on DI 2.14,Advanced diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-3.csv new file mode 100644 index 0000000..29b213e --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Coils-group-3.csv @@ -0,0 +1,79 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,RW,Relay Output 3.6,Basic +206,6,RW,Relay Output 3.7,Basic +207,7,RW,Relay Output 3.8,Basic +208,8,RW,Relay Output 3.9,Basic +209,9,RW,Relay Output 3.10,Basic +210,10,RW,Relay Output 3.11,Basic +211,11,RW,Relay Output 3.12,Basic +212,12,RW,Relay Output 3.13,Basic +213,13,RW,Relay Output 3.14,Basic +214,14,R,Digital Input 3.1,Basic +215,15,R,Digital Input 3.2,Basic +216,16,R,Digital Input 3.3,Basic +217,17,R,Digital Input 3.4,Basic +218,18,R,Digital Input 3.5,Basic +219,19,R,Digital Input 3.6,Basic +220,20,R,Digital Input 3.7,Basic +221,21,R,Digital Input 3.8,Basic +222,22,R,Digital Input 3.9,Basic +223,23,R,Digital Input 3.10,Basic +224,24,R,Digital Input 3.11,Basic +225,25,R,Digital Input 3.12,Basic +226,26,R,Digital Input 3.13,Basic +227,27,R,Digital Input 3.14,Basic +228,28,R,Digital Input 3.15,Basic +229,29,R,Digital Input 3.16,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1207,1007,RW,Enable DirectSwitch on DI 3.1,Advanced +1208,1008,RW,Enable DirectSwitch on DI 3.2,Advanced +1209,1009,RW,Enable DirectSwitch on DI 3.3,Advanced +1210,1010,RW,Enable DirectSwitch on DI 3.4,Advanced +1211,1011,RW,Enable DirectSwitch on DI 3.5,Advanced +1212,1012,RW,Enable DirectSwitch on DI 3.6,Advanced +1213,1013,RW,Enable DirectSwitch on DI 3.7,Advanced +1214,1014,RW,Enable DirectSwitch on DI 3.8,Advanced +1215,1015,RW,Enable DirectSwitch on DI 3.9,Advanced +1216,1016,RW,Enable DirectSwitch on DI 3.10,Advanced +1217,1017,RW,Enable DirectSwitch on DI 3.11,Advanced +1218,1018,RW,Enable DirectSwitch on DI 3.12,Advanced +1219,1019,RW,Enable DirectSwitch on DI 3.13,Advanced +1220,1020,RW,Enable DirectSwitch on DI 3.14,Advanced +1221,1021,RW,Invert DirectSwitch Polarity on DI 3.1,Advanced +1222,1022,RW,Invert DirectSwitch Polarity on DI 3.2,Advanced +1223,1023,RW,Invert DirectSwitch Polarity on DI 3.3,Advanced +1224,1024,RW,Invert DirectSwitch Polarity on DI 3.4,Advanced +1225,1025,RW,Invert DirectSwitch Polarity on DI 3.5,Advanced +1226,1026,RW,Invert DirectSwitch Polarity on DI 3.6,Advanced +1227,1027,RW,Invert DirectSwitch Polarity on DI 3.7,Advanced +1228,1028,RW,Invert DirectSwitch Polarity on DI 3.8,Advanced +1229,1029,RW,Invert DirectSwitch Polarity on DI 3.9,Advanced +1230,1030,RW,Invert DirectSwitch Polarity on DI 3.10,Advanced +1231,1031,RW,Invert DirectSwitch Polarity on DI 3.11,Advanced +1232,1032,RW,Invert DirectSwitch Polarity on DI 3.12,Advanced +1233,1033,RW,Invert DirectSwitch Polarity on DI 3.13,Advanced +1234,1034,RW,Invert DirectSwitch Polarity on DI 3.14,Advanced +1235,1035,RW,Enable DirectSwitch Toggle Mode on DI 3.1,Advanced +1236,1036,RW,Enable DirectSwitch Toggle Mode on DI 3.2,Advanced +1237,1037,RW,Enable DirectSwitch Toggle Mode on DI 3.3,Advanced +1238,1038,RW,Enable DirectSwitch Toggle Mode on DI 3.4,Advanced +1239,1039,RW,Enable DirectSwitch Toggle Mode on DI 3.5,Advanced +1240,1040,RW,Enable DirectSwitch Toggle Mode on DI 3.6,Advanced +1241,1041,RW,Enable DirectSwitch Toggle Mode on DI 3.7,Advanced +1242,1042,RW,Enable DirectSwitch Toggle Mode on DI 3.8,Advanced +1243,1043,RW,Enable DirectSwitch Toggle Mode on DI 3.9,Advanced +1244,1044,RW,Enable DirectSwitch Toggle Mode on DI 3.10,Advanced +1245,1045,RW,Enable DirectSwitch Toggle Mode on DI 3.11,Advanced +1246,1046,RW,Enable DirectSwitch Toggle Mode on DI 3.12,Advanced +1247,1047,RW,Enable DirectSwitch Toggle Mode on DI 3.13,Advanced +1248,1048,RW,Enable DirectSwitch Toggle Mode on DI 3.14,Advanced diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-2.csv new file mode 100644 index 0000000..195f063 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-2.csv @@ -0,0 +1,168 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +100,0,1,R,MixedBits,Digital Input 2.7,6,Basic +100,0,1,R,MixedBits,Digital Input 2.8,7,Basic +100,0,1,R,MixedBits,Digital Input 2.9,8,Basic +100,0,1,R,MixedBits,Digital Input 2.10,9,Basic +100,0,1,R,MixedBits,Digital Input 2.11,10,Basic +100,0,1,R,MixedBits,Digital Input 2.12,11,Basic +100,0,1,R,MixedBits,Digital Input 2.13,12,Basic +100,0,1,R,MixedBits,Digital Input 2.14,13,Basic +100,0,1,R,MixedBits,Digital Input 2.15,14,Basic +100,0,1,R,MixedBits,Digital Input 2.16,15,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +101,1,1,RW,MixedBits,Relay Output 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.7,6,Basic +101,1,1,RW,MixedBits,Relay Output 2.8,7,Basic +101,1,1,RW,MixedBits,Relay Output 2.9,8,Basic +101,1,1,RW,MixedBits,Relay Output 2.10,9,Basic +101,1,1,RW,MixedBits,Relay Output 2.11,10,Basic +101,1,1,RW,MixedBits,Relay Output 2.12,11,Basic +101,1,1,RW,MixedBits,Relay Output 2.13,12,Basic +101,1,1,RW,MixedBits,Relay Output 2.14,13,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,2,RW,DWord,Counter of Digital Input 2.1,,Basic +105,5,2,RW,DWord,Counter of Digital Input 2.2,,Basic +107,7,2,RW,DWord,Counter of Digital Input 2.3,,Basic +109,9,2,RW,DWord,Counter of Digital Input 2.4,,Basic +111,11,2,RW,DWord,Counter of Digital Input 2.5,,Basic +113,13,2,RW,DWord,Counter of Digital Input 2.6,,Basic +115,15,2,RW,DWord,Counter of Digital Input 2.7,,Basic +117,17,2,RW,DWord,Counter of Digital Input 2.8,,Basic +119,19,2,RW,DWord,Counter of Digital Input 2.9,,Basic +121,21,2,RW,DWord,Counter of Digital Input 2.10,,Basic +123,23,2,RW,DWord,Counter of Digital Input 2.11,,Basic +125,25,2,RW,DWord,Counter of Digital Input 2.12,,Basic +127,27,2,RW,DWord,Counter of Digital Input 2.13,,Basic +129,29,2,RW,DWord,Counter of Digital Input 2.14,,Basic +131,31,2,RW,DWord,Counter of Digital Input 2.15,,Basic +133,33,2,RW,DWord,Counter of Digital Input 2.16,,Basic +135,35,1,W,Word,Reserved - Do Not Use,,Reserved +136,36,1,W,Word,Reserved - Do Not Use,,Reserved +137,37,1,W,Word,Reserved - Do Not Use,,Reserved +138,38,1,W,Word,Reserved - Do Not Use,,Reserved +139,39,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.6,5,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.7,6,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.8,7,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.9,8,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.10,9,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.11,10,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.12,11,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.13,12,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.14,13,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.6,5,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.7,6,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.8,7,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.9,8,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.10,9,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.11,10,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.12,11,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.13,12,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,Word,Debounce time (in 100us) for DI 2.7,,Advanced +1117,1017,1,RW,Word,Debounce time (in 100us) for DI 2.8,,Advanced +1118,1018,1,RW,Word,Debounce time (in 100us) for DI 2.9,,Advanced +1119,1019,1,RW,Word,Debounce time (in 100us) for DI 2.10,,Advanced +1120,1020,1,RW,Word,Debounce time (in 100us) for DI 2.11,,Advanced +1121,1021,1,RW,Word,Debounce time (in 100us) for DI 2.12,,Advanced +1122,1022,1,RW,Word,Debounce time (in 100us) for DI 2.13,,Advanced +1123,1023,1,RW,Word,Debounce time (in 100us) for DI 2.14,,Advanced +1124,1024,1,RW,Word,Debounce time (in 100us) for DI 2.15,,Advanced +1125,1025,1,RW,Word,Debounce time (in 100us) for DI 2.16,,Advanced +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.6,5,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.7,6,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.8,7,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.9,8,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.10,9,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.11,10,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.12,11,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.13,12,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.14,13,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.6,5,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.7,6,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.8,7,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.9,8,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.10,9,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.11,10,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.12,11,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.13,12,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.14,13,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.6,5,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.7,6,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.8,7,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.9,8,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.10,9,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.11,10,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.12,11,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.13,12,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.14,13,Basic +1129,1029,1,W,Word,Reserved - Do Not Use,,Reserved +1130,1030,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-3.csv new file mode 100644 index 0000000..e7b8eaf --- /dev/null +++ b/unipi/modbus_maps/Neuron_L203/Neuron_L203-Registers-group-3.csv @@ -0,0 +1,168 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +200,0,1,R,MixedBits,Digital Input 3.5,4,Basic +200,0,1,R,MixedBits,Digital Input 3.6,5,Basic +200,0,1,R,MixedBits,Digital Input 3.7,6,Basic +200,0,1,R,MixedBits,Digital Input 3.8,7,Basic +200,0,1,R,MixedBits,Digital Input 3.9,8,Basic +200,0,1,R,MixedBits,Digital Input 3.10,9,Basic +200,0,1,R,MixedBits,Digital Input 3.11,10,Basic +200,0,1,R,MixedBits,Digital Input 3.12,11,Basic +200,0,1,R,MixedBits,Digital Input 3.13,12,Basic +200,0,1,R,MixedBits,Digital Input 3.14,13,Basic +200,0,1,R,MixedBits,Digital Input 3.15,14,Basic +200,0,1,R,MixedBits,Digital Input 3.16,15,Basic +201,1,1,RW,MixedBits,Relay Output 3.1,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.2,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.3,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.5,4,Basic +201,1,1,RW,MixedBits,Relay Output 3.6,5,Basic +201,1,1,RW,MixedBits,Relay Output 3.7,6,Basic +201,1,1,RW,MixedBits,Relay Output 3.8,7,Basic +201,1,1,RW,MixedBits,Relay Output 3.9,8,Basic +201,1,1,RW,MixedBits,Relay Output 3.10,9,Basic +201,1,1,RW,MixedBits,Relay Output 3.11,10,Basic +201,1,1,RW,MixedBits,Relay Output 3.12,11,Basic +201,1,1,RW,MixedBits,Relay Output 3.13,12,Basic +201,1,1,RW,MixedBits,Relay Output 3.14,13,Basic +202,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +203,3,2,RW,DWord,Counter of Digital Input 3.1,,Basic +205,5,2,RW,DWord,Counter of Digital Input 3.2,,Basic +207,7,2,RW,DWord,Counter of Digital Input 3.3,,Basic +209,9,2,RW,DWord,Counter of Digital Input 3.4,,Basic +211,11,2,RW,DWord,Counter of Digital Input 3.5,,Basic +213,13,2,RW,DWord,Counter of Digital Input 3.6,,Basic +215,15,2,RW,DWord,Counter of Digital Input 3.7,,Basic +217,17,2,RW,DWord,Counter of Digital Input 3.8,,Basic +219,19,2,RW,DWord,Counter of Digital Input 3.9,,Basic +221,21,2,RW,DWord,Counter of Digital Input 3.10,,Basic +223,23,2,RW,DWord,Counter of Digital Input 3.11,,Basic +225,25,2,RW,DWord,Counter of Digital Input 3.12,,Basic +227,27,2,RW,DWord,Counter of Digital Input 3.13,,Basic +229,29,2,RW,DWord,Counter of Digital Input 3.14,,Basic +231,31,2,RW,DWord,Counter of Digital Input 3.15,,Basic +233,33,2,RW,DWord,Counter of Digital Input 3.16,,Basic +235,35,1,W,Word,Reserved - Do Not Use,,Reserved +236,36,1,W,Word,Reserved - Do Not Use,,Reserved +237,37,1,W,Word,Reserved - Do Not Use,,Reserved +238,38,1,W,Word,Reserved - Do Not Use,,Reserved +239,39,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.6,5,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.7,6,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.8,7,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.9,8,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.10,9,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.11,10,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.12,11,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.13,12,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.14,13,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.6,5,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.7,6,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.8,7,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.9,8,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.10,9,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.11,10,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.12,11,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.13,12,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +700,500,1,W,Word,Reserved - Do Not Use,,Reserved +701,501,1,W,Word,Reserved - Do Not Use,,Reserved +702,502,1,W,Word,Reserved - Do Not Use,,Reserved +703,503,1,W,Word,Reserved - Do Not Use,,Reserved +704,504,1,W,Word,Reserved - Do Not Use,,Reserved +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,Word,Debounce time (in 100us) for DI 3.5,,Advanced +1215,1015,1,RW,Word,Debounce time (in 100us) for DI 3.6,,Advanced +1216,1016,1,RW,Word,Debounce time (in 100us) for DI 3.7,,Advanced +1217,1017,1,RW,Word,Debounce time (in 100us) for DI 3.8,,Advanced +1218,1018,1,RW,Word,Debounce time (in 100us) for DI 3.9,,Advanced +1219,1019,1,RW,Word,Debounce time (in 100us) for DI 3.10,,Advanced +1220,1020,1,RW,Word,Debounce time (in 100us) for DI 3.11,,Advanced +1221,1021,1,RW,Word,Debounce time (in 100us) for DI 3.12,,Advanced +1222,1022,1,RW,Word,Debounce time (in 100us) for DI 3.13,,Advanced +1223,1023,1,RW,Word,Debounce time (in 100us) for DI 3.14,,Advanced +1224,1024,1,RW,Word,Debounce time (in 100us) for DI 3.15,,Advanced +1225,1025,1,RW,Word,Debounce time (in 100us) for DI 3.16,,Advanced +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.1,0,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.2,1,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.3,2,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.4,3,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.5,4,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.6,5,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.7,6,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.8,7,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.9,8,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.10,9,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.11,10,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.12,11,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.13,12,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.14,13,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.1,0,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.2,1,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.3,2,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.4,3,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.5,4,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.6,5,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.7,6,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.8,7,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.9,8,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.10,9,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.11,10,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.12,11,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.13,12,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.14,13,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.1,0,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.2,1,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.3,2,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.4,3,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.5,4,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.6,5,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.7,6,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.8,7,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.9,8,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.10,9,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.11,10,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.12,11,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.13,12,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.14,13,Basic +1229,1029,1,W,Word,Reserved - Do Not Use,,Reserved +1230,1030,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-2.csv new file mode 100644 index 0000000..7487ca8 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-2.csv @@ -0,0 +1,37 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,R,Digital Input 2.1,Basic +101,1,R,Digital Input 2.2,Basic +102,2,R,Digital Input 2.3,Basic +103,3,R,Digital Input 2.4,Basic +104,4,R,Digital Input 2.5,Basic +105,5,R,Digital Input 2.6,Basic +106,6,R,Digital Input 2.7,Basic +107,7,R,Digital Input 2.8,Basic +108,8,R,Digital Input 2.9,Basic +109,9,R,Digital Input 2.10,Basic +110,10,R,Digital Input 2.11,Basic +111,11,R,Digital Input 2.12,Basic +112,12,R,Digital Input 2.13,Basic +113,13,R,Digital Input 2.14,Basic +114,14,R,Digital Input 2.15,Basic +115,15,R,Digital Input 2.16,Basic +116,16,R,Digital Input 2.17,Basic +117,17,R,Digital Input 2.18,Basic +118,18,R,Digital Input 2.19,Basic +119,19,R,Digital Input 2.20,Basic +120,20,R,Digital Input 2.21,Basic +121,21,R,Digital Input 2.22,Basic +122,22,R,Digital Input 2.23,Basic +123,23,R,Digital Input 2.24,Basic +124,24,R,Digital Input 2.25,Basic +125,25,R,Digital Input 2.26,Basic +126,26,R,Digital Input 2.27,Basic +127,27,R,Digital Input 2.28,Basic +128,28,R,Digital Input 2.29,Basic +129,29,R,Digital Input 2.30,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-3.csv new file mode 100644 index 0000000..8af104b --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Coils-group-3.csv @@ -0,0 +1,37 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,R,Digital Input 3.1,Basic +201,1,R,Digital Input 3.2,Basic +202,2,R,Digital Input 3.3,Basic +203,3,R,Digital Input 3.4,Basic +204,4,R,Digital Input 3.5,Basic +205,5,R,Digital Input 3.6,Basic +206,6,R,Digital Input 3.7,Basic +207,7,R,Digital Input 3.8,Basic +208,8,R,Digital Input 3.9,Basic +209,9,R,Digital Input 3.10,Basic +210,10,R,Digital Input 3.11,Basic +211,11,R,Digital Input 3.12,Basic +212,12,R,Digital Input 3.13,Basic +213,13,R,Digital Input 3.14,Basic +214,14,R,Digital Input 3.15,Basic +215,15,R,Digital Input 3.16,Basic +216,16,R,Digital Input 3.17,Basic +217,17,R,Digital Input 3.18,Basic +218,18,R,Digital Input 3.19,Basic +219,19,R,Digital Input 3.20,Basic +220,20,R,Digital Input 3.21,Basic +221,21,R,Digital Input 3.22,Basic +222,22,R,Digital Input 3.23,Basic +223,23,R,Digital Input 3.24,Basic +224,24,R,Digital Input 3.25,Basic +225,25,R,Digital Input 3.26,Basic +226,26,R,Digital Input 3.27,Basic +227,27,R,Digital Input 3.28,Basic +228,28,R,Digital Input 3.29,Basic +229,29,R,Digital Input 3.30,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-2.csv new file mode 100644 index 0000000..eea2691 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-2.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +100,0,1,R,MixedBits,Digital Input 2.7,6,Basic +100,0,1,R,MixedBits,Digital Input 2.8,7,Basic +100,0,1,R,MixedBits,Digital Input 2.9,8,Basic +100,0,1,R,MixedBits,Digital Input 2.10,9,Basic +100,0,1,R,MixedBits,Digital Input 2.11,10,Basic +100,0,1,R,MixedBits,Digital Input 2.12,11,Basic +100,0,1,R,MixedBits,Digital Input 2.13,12,Basic +100,0,1,R,MixedBits,Digital Input 2.14,13,Basic +100,0,1,R,MixedBits,Digital Input 2.15,14,Basic +100,0,1,R,MixedBits,Digital Input 2.16,15,Basic +101,1,1,R,MixedBits,Digital Input 2.17,0,Basic +101,1,1,R,MixedBits,Digital Input 2.18,1,Basic +101,1,1,R,MixedBits,Digital Input 2.19,2,Basic +101,1,1,R,MixedBits,Digital Input 2.20,3,Basic +101,1,1,R,MixedBits,Digital Input 2.21,4,Basic +101,1,1,R,MixedBits,Digital Input 2.22,5,Basic +101,1,1,R,MixedBits,Digital Input 2.23,6,Basic +101,1,1,R,MixedBits,Digital Input 2.24,7,Basic +101,1,1,R,MixedBits,Digital Input 2.25,8,Basic +101,1,1,R,MixedBits,Digital Input 2.26,9,Basic +101,1,1,R,MixedBits,Digital Input 2.27,10,Basic +101,1,1,R,MixedBits,Digital Input 2.28,11,Basic +101,1,1,R,MixedBits,Digital Input 2.29,12,Basic +101,1,1,R,MixedBits,Digital Input 2.30,13,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,2,RW,DWord,Counter of Digital Input 2.1,,Basic +105,5,2,RW,DWord,Counter of Digital Input 2.2,,Basic +107,7,2,RW,DWord,Counter of Digital Input 2.3,,Basic +109,9,2,RW,DWord,Counter of Digital Input 2.4,,Basic +111,11,2,RW,DWord,Counter of Digital Input 2.5,,Basic +113,13,2,RW,DWord,Counter of Digital Input 2.6,,Basic +115,15,2,RW,DWord,Counter of Digital Input 2.7,,Basic +117,17,2,RW,DWord,Counter of Digital Input 2.8,,Basic +119,19,2,RW,DWord,Counter of Digital Input 2.9,,Basic +121,21,2,RW,DWord,Counter of Digital Input 2.10,,Basic +123,23,2,RW,DWord,Counter of Digital Input 2.11,,Basic +125,25,2,RW,DWord,Counter of Digital Input 2.12,,Basic +127,27,2,RW,DWord,Counter of Digital Input 2.13,,Basic +129,29,2,RW,DWord,Counter of Digital Input 2.14,,Basic +131,31,2,RW,DWord,Counter of Digital Input 2.15,,Basic +133,33,2,RW,DWord,Counter of Digital Input 2.16,,Basic +135,35,2,RW,DWord,Counter of Digital Input 2.17,,Basic +137,37,2,RW,DWord,Counter of Digital Input 2.18,,Basic +139,39,2,RW,DWord,Counter of Digital Input 2.19,,Basic +141,41,2,RW,DWord,Counter of Digital Input 2.20,,Basic +143,43,2,RW,DWord,Counter of Digital Input 2.21,,Basic +145,45,2,RW,DWord,Counter of Digital Input 2.22,,Basic +147,47,2,RW,DWord,Counter of Digital Input 2.23,,Basic +149,49,2,RW,DWord,Counter of Digital Input 2.24,,Basic +151,51,2,RW,DWord,Counter of Digital Input 2.25,,Basic +153,53,2,RW,DWord,Counter of Digital Input 2.26,,Basic +155,55,2,RW,DWord,Counter of Digital Input 2.27,,Basic +157,57,2,RW,DWord,Counter of Digital Input 2.28,,Basic +159,59,2,RW,DWord,Counter of Digital Input 2.29,,Basic +161,61,2,RW,DWord,Counter of Digital Input 2.30,,Basic +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,Word,Debounce time (in 100us) for DI 2.7,,Advanced +1117,1017,1,RW,Word,Debounce time (in 100us) for DI 2.8,,Advanced +1118,1018,1,RW,Word,Debounce time (in 100us) for DI 2.9,,Advanced +1119,1019,1,RW,Word,Debounce time (in 100us) for DI 2.10,,Advanced +1120,1020,1,RW,Word,Debounce time (in 100us) for DI 2.11,,Advanced +1121,1021,1,RW,Word,Debounce time (in 100us) for DI 2.12,,Advanced +1122,1022,1,RW,Word,Debounce time (in 100us) for DI 2.13,,Advanced +1123,1023,1,RW,Word,Debounce time (in 100us) for DI 2.14,,Advanced +1124,1024,1,RW,Word,Debounce time (in 100us) for DI 2.15,,Advanced +1125,1025,1,RW,Word,Debounce time (in 100us) for DI 2.16,,Advanced +1126,1026,1,RW,Word,Debounce time (in 100us) for DI 2.17,,Advanced +1127,1027,1,RW,Word,Debounce time (in 100us) for DI 2.18,,Advanced +1128,1028,1,RW,Word,Debounce time (in 100us) for DI 2.19,,Advanced +1129,1029,1,RW,Word,Debounce time (in 100us) for DI 2.20,,Advanced +1130,1030,1,RW,Word,Debounce time (in 100us) for DI 2.21,,Advanced +1131,1031,1,RW,Word,Debounce time (in 100us) for DI 2.22,,Advanced +1132,1032,1,RW,Word,Debounce time (in 100us) for DI 2.23,,Advanced +1133,1033,1,RW,Word,Debounce time (in 100us) for DI 2.24,,Advanced +1134,1034,1,RW,Word,Debounce time (in 100us) for DI 2.25,,Advanced +1135,1035,1,RW,Word,Debounce time (in 100us) for DI 2.26,,Advanced +1136,1036,1,RW,Word,Debounce time (in 100us) for DI 2.27,,Advanced +1137,1037,1,RW,Word,Debounce time (in 100us) for DI 2.28,,Advanced +1138,1038,1,RW,Word,Debounce time (in 100us) for DI 2.29,,Advanced +1139,1039,1,RW,Word,Debounce time (in 100us) for DI 2.30,,Advanced +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-3.csv new file mode 100644 index 0000000..790f902 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L303/Neuron_L303-Registers-group-3.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +200,0,1,R,MixedBits,Digital Input 3.5,4,Basic +200,0,1,R,MixedBits,Digital Input 3.6,5,Basic +200,0,1,R,MixedBits,Digital Input 3.7,6,Basic +200,0,1,R,MixedBits,Digital Input 3.8,7,Basic +200,0,1,R,MixedBits,Digital Input 3.9,8,Basic +200,0,1,R,MixedBits,Digital Input 3.10,9,Basic +200,0,1,R,MixedBits,Digital Input 3.11,10,Basic +200,0,1,R,MixedBits,Digital Input 3.12,11,Basic +200,0,1,R,MixedBits,Digital Input 3.13,12,Basic +200,0,1,R,MixedBits,Digital Input 3.14,13,Basic +200,0,1,R,MixedBits,Digital Input 3.15,14,Basic +200,0,1,R,MixedBits,Digital Input 3.16,15,Basic +201,1,1,R,MixedBits,Digital Input 3.17,0,Basic +201,1,1,R,MixedBits,Digital Input 3.18,1,Basic +201,1,1,R,MixedBits,Digital Input 3.19,2,Basic +201,1,1,R,MixedBits,Digital Input 3.20,3,Basic +201,1,1,R,MixedBits,Digital Input 3.21,4,Basic +201,1,1,R,MixedBits,Digital Input 3.22,5,Basic +201,1,1,R,MixedBits,Digital Input 3.23,6,Basic +201,1,1,R,MixedBits,Digital Input 3.24,7,Basic +201,1,1,R,MixedBits,Digital Input 3.25,8,Basic +201,1,1,R,MixedBits,Digital Input 3.26,9,Basic +201,1,1,R,MixedBits,Digital Input 3.27,10,Basic +201,1,1,R,MixedBits,Digital Input 3.28,11,Basic +201,1,1,R,MixedBits,Digital Input 3.29,12,Basic +201,1,1,R,MixedBits,Digital Input 3.30,13,Basic +202,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +203,3,2,RW,DWord,Counter of Digital Input 3.1,,Basic +205,5,2,RW,DWord,Counter of Digital Input 3.2,,Basic +207,7,2,RW,DWord,Counter of Digital Input 3.3,,Basic +209,9,2,RW,DWord,Counter of Digital Input 3.4,,Basic +211,11,2,RW,DWord,Counter of Digital Input 3.5,,Basic +213,13,2,RW,DWord,Counter of Digital Input 3.6,,Basic +215,15,2,RW,DWord,Counter of Digital Input 3.7,,Basic +217,17,2,RW,DWord,Counter of Digital Input 3.8,,Basic +219,19,2,RW,DWord,Counter of Digital Input 3.9,,Basic +221,21,2,RW,DWord,Counter of Digital Input 3.10,,Basic +223,23,2,RW,DWord,Counter of Digital Input 3.11,,Basic +225,25,2,RW,DWord,Counter of Digital Input 3.12,,Basic +227,27,2,RW,DWord,Counter of Digital Input 3.13,,Basic +229,29,2,RW,DWord,Counter of Digital Input 3.14,,Basic +231,31,2,RW,DWord,Counter of Digital Input 3.15,,Basic +233,33,2,RW,DWord,Counter of Digital Input 3.16,,Basic +235,35,2,RW,DWord,Counter of Digital Input 3.17,,Basic +237,37,2,RW,DWord,Counter of Digital Input 3.18,,Basic +239,39,2,RW,DWord,Counter of Digital Input 3.19,,Basic +241,41,2,RW,DWord,Counter of Digital Input 3.20,,Basic +243,43,2,RW,DWord,Counter of Digital Input 3.21,,Basic +245,45,2,RW,DWord,Counter of Digital Input 3.22,,Basic +247,47,2,RW,DWord,Counter of Digital Input 3.23,,Basic +249,49,2,RW,DWord,Counter of Digital Input 3.24,,Basic +251,51,2,RW,DWord,Counter of Digital Input 3.25,,Basic +253,53,2,RW,DWord,Counter of Digital Input 3.26,,Basic +255,55,2,RW,DWord,Counter of Digital Input 3.27,,Basic +257,57,2,RW,DWord,Counter of Digital Input 3.28,,Basic +259,59,2,RW,DWord,Counter of Digital Input 3.29,,Basic +261,61,2,RW,DWord,Counter of Digital Input 3.30,,Basic +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +700,500,1,W,Word,Reserved - Do Not Use,,Reserved +701,501,1,W,Word,Reserved - Do Not Use,,Reserved +702,502,1,W,Word,Reserved - Do Not Use,,Reserved +703,503,1,W,Word,Reserved - Do Not Use,,Reserved +704,504,1,W,Word,Reserved - Do Not Use,,Reserved +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,Word,Debounce time (in 100us) for DI 3.5,,Advanced +1215,1015,1,RW,Word,Debounce time (in 100us) for DI 3.6,,Advanced +1216,1016,1,RW,Word,Debounce time (in 100us) for DI 3.7,,Advanced +1217,1017,1,RW,Word,Debounce time (in 100us) for DI 3.8,,Advanced +1218,1018,1,RW,Word,Debounce time (in 100us) for DI 3.9,,Advanced +1219,1019,1,RW,Word,Debounce time (in 100us) for DI 3.10,,Advanced +1220,1020,1,RW,Word,Debounce time (in 100us) for DI 3.11,,Advanced +1221,1021,1,RW,Word,Debounce time (in 100us) for DI 3.12,,Advanced +1222,1022,1,RW,Word,Debounce time (in 100us) for DI 3.13,,Advanced +1223,1023,1,RW,Word,Debounce time (in 100us) for DI 3.14,,Advanced +1224,1024,1,RW,Word,Debounce time (in 100us) for DI 3.15,,Advanced +1225,1025,1,RW,Word,Debounce time (in 100us) for DI 3.16,,Advanced +1226,1026,1,RW,Word,Debounce time (in 100us) for DI 3.17,,Advanced +1227,1027,1,RW,Word,Debounce time (in 100us) for DI 3.18,,Advanced +1228,1028,1,RW,Word,Debounce time (in 100us) for DI 3.19,,Advanced +1229,1029,1,RW,Word,Debounce time (in 100us) for DI 3.20,,Advanced +1230,1030,1,RW,Word,Debounce time (in 100us) for DI 3.21,,Advanced +1231,1031,1,RW,Word,Debounce time (in 100us) for DI 3.22,,Advanced +1232,1032,1,RW,Word,Debounce time (in 100us) for DI 3.23,,Advanced +1233,1033,1,RW,Word,Debounce time (in 100us) for DI 3.24,,Advanced +1234,1034,1,RW,Word,Debounce time (in 100us) for DI 3.25,,Advanced +1235,1035,1,RW,Word,Debounce time (in 100us) for DI 3.26,,Advanced +1236,1036,1,RW,Word,Debounce time (in 100us) for DI 3.27,,Advanced +1237,1037,1,RW,Word,Debounce time (in 100us) for DI 3.28,,Advanced +1238,1038,1,RW,Word,Debounce time (in 100us) for DI 3.29,,Advanced +1239,1039,1,RW,Word,Debounce time (in 100us) for DI 3.30,,Advanced +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-2.csv new file mode 100644 index 0000000..a772543 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-2.csv @@ -0,0 +1,35 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,RW,Relay Output 2.6,Basic +106,6,RW,Relay Output 2.7,Basic +107,7,RW,Relay Output 2.8,Basic +108,8,RW,Relay Output 2.9,Basic +109,9,RW,Relay Output 2.10,Basic +110,10,RW,Relay Output 2.11,Basic +111,11,RW,Relay Output 2.12,Basic +112,12,RW,Relay Output 2.13,Basic +113,13,RW,Relay Output 2.14,Basic +114,14,RW,Relay Output 2.15,Basic +115,15,RW,Relay Output 2.16,Basic +116,16,RW,Relay Output 2.17,Basic +117,17,RW,Relay Output 2.18,Basic +118,18,RW,Relay Output 2.19,Basic +119,19,RW,Relay Output 2.20,Basic +120,20,RW,Relay Output 2.21,Basic +121,21,RW,Relay Output 2.22,Basic +122,22,RW,Relay Output 2.23,Basic +123,23,RW,Relay Output 2.24,Basic +124,24,RW,Relay Output 2.25,Basic +125,25,RW,Relay Output 2.26,Basic +126,26,RW,Relay Output 2.27,Basic +127,27,RW,Relay Output 2.28,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-3.csv new file mode 100644 index 0000000..95feb36 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Coils-group-3.csv @@ -0,0 +1,35 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,RW,Relay Output 3.6,Basic +206,6,RW,Relay Output 3.7,Basic +207,7,RW,Relay Output 3.8,Basic +208,8,RW,Relay Output 3.9,Basic +209,9,RW,Relay Output 3.10,Basic +210,10,RW,Relay Output 3.11,Basic +211,11,RW,Relay Output 3.12,Basic +212,12,RW,Relay Output 3.13,Basic +213,13,RW,Relay Output 3.14,Basic +214,14,RW,Relay Output 3.15,Basic +215,15,RW,Relay Output 3.16,Basic +216,16,RW,Relay Output 3.17,Basic +217,17,RW,Relay Output 3.18,Basic +218,18,RW,Relay Output 3.19,Basic +219,19,RW,Relay Output 3.20,Basic +220,20,RW,Relay Output 3.21,Basic +221,21,RW,Relay Output 3.22,Basic +222,22,RW,Relay Output 3.23,Basic +223,23,RW,Relay Output 3.24,Basic +224,24,RW,Relay Output 3.25,Basic +225,25,RW,Relay Output 3.26,Basic +226,26,RW,Relay Output 3.27,Basic +227,27,RW,Relay Output 3.28,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-2.csv new file mode 100644 index 0000000..ab6a715 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-2.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,RW,MixedBits,Relay Output 2.1,0,Basic +100,0,1,RW,MixedBits,Relay Output 2.2,1,Basic +100,0,1,RW,MixedBits,Relay Output 2.3,2,Basic +100,0,1,RW,MixedBits,Relay Output 2.4,3,Basic +100,0,1,RW,MixedBits,Relay Output 2.5,4,Basic +100,0,1,RW,MixedBits,Relay Output 2.6,5,Basic +100,0,1,RW,MixedBits,Relay Output 2.7,6,Basic +100,0,1,RW,MixedBits,Relay Output 2.8,7,Basic +100,0,1,RW,MixedBits,Relay Output 2.9,8,Basic +100,0,1,RW,MixedBits,Relay Output 2.10,9,Basic +100,0,1,RW,MixedBits,Relay Output 2.11,10,Basic +100,0,1,RW,MixedBits,Relay Output 2.12,11,Basic +100,0,1,RW,MixedBits,Relay Output 2.13,12,Basic +100,0,1,RW,MixedBits,Relay Output 2.14,13,Basic +100,0,1,RW,MixedBits,Relay Output 2.15,14,Basic +100,0,1,RW,MixedBits,Relay Output 2.16,15,Basic +101,1,1,RW,MixedBits,Relay Output 2.17,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.18,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.19,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.20,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.21,4,Basic +101,1,1,RW,MixedBits,Relay Output 2.22,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.23,6,Basic +101,1,1,RW,MixedBits,Relay Output 2.24,7,Basic +101,1,1,RW,MixedBits,Relay Output 2.25,8,Basic +101,1,1,RW,MixedBits,Relay Output 2.26,9,Basic +101,1,1,RW,MixedBits,Relay Output 2.27,10,Basic +101,1,1,RW,MixedBits,Relay Output 2.28,11,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,1,W,Word,Reserved - Do Not Use,,Reserved +104,4,1,W,Word,Reserved - Do Not Use,,Reserved +105,5,1,W,Word,Reserved - Do Not Use,,Reserved +106,6,1,W,Word,Reserved - Do Not Use,,Reserved +107,7,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.6,5,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.7,6,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.8,7,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.9,8,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.10,9,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.11,10,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.12,11,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.13,12,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.14,13,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.15,14,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.16,15,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.17,0,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.18,1,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.19,2,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.20,3,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.21,4,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.22,5,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.23,6,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.24,7,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.25,8,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.26,9,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.27,10,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.28,11,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.6,5,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.7,6,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.8,7,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.9,8,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.10,9,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.11,10,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.12,11,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.13,12,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.14,13,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.15,14,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.16,15,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.17,0,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.18,1,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.19,2,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.20,3,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.21,4,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.22,5,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.23,6,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.24,7,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.25,8,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.26,9,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.27,10,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.28,11,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,W,Word,Reserved - Do Not Use,,Reserved +1111,1011,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-3.csv new file mode 100644 index 0000000..2964a1a --- /dev/null +++ b/unipi/modbus_maps/Neuron_L403/Neuron_L403-Registers-group-3.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,RW,MixedBits,Relay Output 3.1,0,Basic +200,0,1,RW,MixedBits,Relay Output 3.2,1,Basic +200,0,1,RW,MixedBits,Relay Output 3.3,2,Basic +200,0,1,RW,MixedBits,Relay Output 3.4,3,Basic +200,0,1,RW,MixedBits,Relay Output 3.5,4,Basic +200,0,1,RW,MixedBits,Relay Output 3.6,5,Basic +200,0,1,RW,MixedBits,Relay Output 3.7,6,Basic +200,0,1,RW,MixedBits,Relay Output 3.8,7,Basic +200,0,1,RW,MixedBits,Relay Output 3.9,8,Basic +200,0,1,RW,MixedBits,Relay Output 3.10,9,Basic +200,0,1,RW,MixedBits,Relay Output 3.11,10,Basic +200,0,1,RW,MixedBits,Relay Output 3.12,11,Basic +200,0,1,RW,MixedBits,Relay Output 3.13,12,Basic +200,0,1,RW,MixedBits,Relay Output 3.14,13,Basic +200,0,1,RW,MixedBits,Relay Output 3.15,14,Basic +200,0,1,RW,MixedBits,Relay Output 3.16,15,Basic +201,1,1,RW,MixedBits,Relay Output 3.17,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.18,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.19,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.20,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.21,4,Basic +201,1,1,RW,MixedBits,Relay Output 3.22,5,Basic +201,1,1,RW,MixedBits,Relay Output 3.23,6,Basic +201,1,1,RW,MixedBits,Relay Output 3.24,7,Basic +201,1,1,RW,MixedBits,Relay Output 3.25,8,Basic +201,1,1,RW,MixedBits,Relay Output 3.26,9,Basic +201,1,1,RW,MixedBits,Relay Output 3.27,10,Basic +201,1,1,RW,MixedBits,Relay Output 3.28,11,Basic +202,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +203,3,1,W,Word,Reserved - Do Not Use,,Reserved +204,4,1,W,Word,Reserved - Do Not Use,,Reserved +205,5,1,W,Word,Reserved - Do Not Use,,Reserved +206,6,1,W,Word,Reserved - Do Not Use,,Reserved +207,7,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.6,5,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.7,6,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.8,7,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.9,8,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.10,9,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.11,10,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.12,11,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.13,12,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.14,13,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.15,14,Advanced +207,7,1,RW,MixedBits,Synchronised DO/RO 3.16,15,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.17,0,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.18,1,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.19,2,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.20,3,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.21,4,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.22,5,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.23,6,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.24,7,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.25,8,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.26,9,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.27,10,Advanced +208,8,1,RW,MixedBits,Synchronised DO/RO 3.28,11,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.6,5,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.7,6,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.8,7,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.9,8,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.10,9,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.11,10,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.12,11,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.13,12,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.14,13,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.15,14,Advanced +209,9,1,RW,MixedBits,Synchronised DO/RO Lock 3.16,15,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.17,0,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.18,1,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.19,2,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.20,3,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.21,4,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.22,5,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.23,6,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.24,7,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.25,8,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.26,9,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.27,10,Advanced +210,10,1,RW,MixedBits,Synchronised DO/RO Lock 3.28,11,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +700,500,1,W,Word,Reserved - Do Not Use,,Reserved +701,501,1,W,Word,Reserved - Do Not Use,,Reserved +702,502,1,W,Word,Reserved - Do Not Use,,Reserved +703,503,1,W,Word,Reserved - Do Not Use,,Reserved +704,504,1,W,Word,Reserved - Do Not Use,,Reserved +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,W,Word,Reserved - Do Not Use,,Reserved +1211,1011,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-2.csv new file mode 100644 index 0000000..4fd8928 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-2.csv @@ -0,0 +1,33 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +109,9,R,Digital Input 2.5,Basic +110,10,R,Digital Input 2.6,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1115,1015,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1116,1016,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1119,1019,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1120,1020,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1121,1021,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-3.csv new file mode 100644 index 0000000..26b8f07 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Coils-group-3.csv @@ -0,0 +1,77 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,RW,Relay Output 3.6,Basic +206,6,RW,Relay Output 3.7,Basic +207,7,RW,Relay Output 3.8,Basic +208,8,RW,Relay Output 3.9,Basic +209,9,RW,Relay Output 3.10,Basic +210,10,RW,Relay Output 3.11,Basic +211,11,RW,Relay Output 3.12,Basic +212,12,RW,Relay Output 3.13,Basic +213,13,RW,Relay Output 3.14,Basic +214,14,R,Digital Input 3.1,Basic +215,15,R,Digital Input 3.2,Basic +216,16,R,Digital Input 3.3,Basic +217,17,R,Digital Input 3.4,Basic +218,18,R,Digital Input 3.5,Basic +219,19,R,Digital Input 3.6,Basic +220,20,R,Digital Input 3.7,Basic +221,21,R,Digital Input 3.8,Basic +222,22,R,Digital Input 3.9,Basic +223,23,R,Digital Input 3.10,Basic +224,24,R,Digital Input 3.11,Basic +225,25,R,Digital Input 3.12,Basic +226,26,R,Digital Input 3.13,Basic +227,27,R,Digital Input 3.14,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1207,1007,RW,Enable DirectSwitch on DI 3.1,Advanced +1208,1008,RW,Enable DirectSwitch on DI 3.2,Advanced +1209,1009,RW,Enable DirectSwitch on DI 3.3,Advanced +1210,1010,RW,Enable DirectSwitch on DI 3.4,Advanced +1211,1011,RW,Enable DirectSwitch on DI 3.5,Advanced +1212,1012,RW,Enable DirectSwitch on DI 3.6,Advanced +1213,1013,RW,Enable DirectSwitch on DI 3.7,Advanced +1214,1014,RW,Enable DirectSwitch on DI 3.8,Advanced +1215,1015,RW,Enable DirectSwitch on DI 3.9,Advanced +1216,1016,RW,Enable DirectSwitch on DI 3.10,Advanced +1217,1017,RW,Enable DirectSwitch on DI 3.11,Advanced +1218,1018,RW,Enable DirectSwitch on DI 3.12,Advanced +1219,1019,RW,Enable DirectSwitch on DI 3.13,Advanced +1220,1020,RW,Enable DirectSwitch on DI 3.14,Advanced +1221,1021,RW,Invert DirectSwitch Polarity on DI 3.1,Advanced +1222,1022,RW,Invert DirectSwitch Polarity on DI 3.2,Advanced +1223,1023,RW,Invert DirectSwitch Polarity on DI 3.3,Advanced +1224,1024,RW,Invert DirectSwitch Polarity on DI 3.4,Advanced +1225,1025,RW,Invert DirectSwitch Polarity on DI 3.5,Advanced +1226,1026,RW,Invert DirectSwitch Polarity on DI 3.6,Advanced +1227,1027,RW,Invert DirectSwitch Polarity on DI 3.7,Advanced +1228,1028,RW,Invert DirectSwitch Polarity on DI 3.8,Advanced +1229,1029,RW,Invert DirectSwitch Polarity on DI 3.9,Advanced +1230,1030,RW,Invert DirectSwitch Polarity on DI 3.10,Advanced +1231,1031,RW,Invert DirectSwitch Polarity on DI 3.11,Advanced +1232,1032,RW,Invert DirectSwitch Polarity on DI 3.12,Advanced +1233,1033,RW,Invert DirectSwitch Polarity on DI 3.13,Advanced +1234,1034,RW,Invert DirectSwitch Polarity on DI 3.14,Advanced +1235,1035,RW,Enable DirectSwitch Toggle Mode on DI 3.1,Advanced +1236,1036,RW,Enable DirectSwitch Toggle Mode on DI 3.2,Advanced +1237,1037,RW,Enable DirectSwitch Toggle Mode on DI 3.3,Advanced +1238,1038,RW,Enable DirectSwitch Toggle Mode on DI 3.4,Advanced +1239,1039,RW,Enable DirectSwitch Toggle Mode on DI 3.5,Advanced +1240,1040,RW,Enable DirectSwitch Toggle Mode on DI 3.6,Advanced +1241,1041,RW,Enable DirectSwitch Toggle Mode on DI 3.7,Advanced +1242,1042,RW,Enable DirectSwitch Toggle Mode on DI 3.8,Advanced +1243,1043,RW,Enable DirectSwitch Toggle Mode on DI 3.9,Advanced +1244,1044,RW,Enable DirectSwitch Toggle Mode on DI 3.10,Advanced +1245,1045,RW,Enable DirectSwitch Toggle Mode on DI 3.11,Advanced +1246,1046,RW,Enable DirectSwitch Toggle Mode on DI 3.12,Advanced +1247,1047,RW,Enable DirectSwitch Toggle Mode on DI 3.13,Advanced +1248,1048,RW,Enable DirectSwitch Toggle Mode on DI 3.14,Advanced diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-2.csv new file mode 100644 index 0000000..e826033 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-2.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,2,RW,DWord,Counter of Digital Input 2.5,,Basic +126,26,2,RW,DWord,Counter of Digital Input 2.6,,Basic +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-3.csv new file mode 100644 index 0000000..4df3aef --- /dev/null +++ b/unipi/modbus_maps/Neuron_L503/Neuron_L503-Registers-group-3.csv @@ -0,0 +1,162 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +200,0,1,R,MixedBits,Digital Input 3.5,4,Basic +200,0,1,R,MixedBits,Digital Input 3.6,5,Basic +200,0,1,R,MixedBits,Digital Input 3.7,6,Basic +200,0,1,R,MixedBits,Digital Input 3.8,7,Basic +200,0,1,R,MixedBits,Digital Input 3.9,8,Basic +200,0,1,R,MixedBits,Digital Input 3.10,9,Basic +200,0,1,R,MixedBits,Digital Input 3.11,10,Basic +200,0,1,R,MixedBits,Digital Input 3.12,11,Basic +200,0,1,R,MixedBits,Digital Input 3.13,12,Basic +200,0,1,R,MixedBits,Digital Input 3.14,13,Basic +201,1,1,RW,MixedBits,Relay Output 3.1,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.2,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.3,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.5,4,Basic +201,1,1,RW,MixedBits,Relay Output 3.6,5,Basic +201,1,1,RW,MixedBits,Relay Output 3.7,6,Basic +201,1,1,RW,MixedBits,Relay Output 3.8,7,Basic +201,1,1,RW,MixedBits,Relay Output 3.9,8,Basic +201,1,1,RW,MixedBits,Relay Output 3.10,9,Basic +201,1,1,RW,MixedBits,Relay Output 3.11,10,Basic +201,1,1,RW,MixedBits,Relay Output 3.12,11,Basic +201,1,1,RW,MixedBits,Relay Output 3.13,12,Basic +201,1,1,RW,MixedBits,Relay Output 3.14,13,Basic +202,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +203,3,2,RW,DWord,Counter of Digital Input 3.1,,Basic +205,5,2,RW,DWord,Counter of Digital Input 3.2,,Basic +207,7,2,RW,DWord,Counter of Digital Input 3.3,,Basic +209,9,2,RW,DWord,Counter of Digital Input 3.4,,Basic +211,11,2,RW,DWord,Counter of Digital Input 3.5,,Basic +213,13,2,RW,DWord,Counter of Digital Input 3.6,,Basic +215,15,2,RW,DWord,Counter of Digital Input 3.7,,Basic +217,17,2,RW,DWord,Counter of Digital Input 3.8,,Basic +219,19,2,RW,DWord,Counter of Digital Input 3.9,,Basic +221,21,2,RW,DWord,Counter of Digital Input 3.10,,Basic +223,23,2,RW,DWord,Counter of Digital Input 3.11,,Basic +225,25,2,RW,DWord,Counter of Digital Input 3.12,,Basic +227,27,2,RW,DWord,Counter of Digital Input 3.13,,Basic +229,29,2,RW,DWord,Counter of Digital Input 3.14,,Basic +231,31,1,W,Word,Reserved - Do Not Use,,Reserved +232,32,1,W,Word,Reserved - Do Not Use,,Reserved +233,33,1,W,Word,Reserved - Do Not Use,,Reserved +234,34,1,W,Word,Reserved - Do Not Use,,Reserved +235,35,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.6,5,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.7,6,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.8,7,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.9,8,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.10,9,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.11,10,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.12,11,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.13,12,Advanced +235,35,1,RW,MixedBits,Synchronised DO/RO 3.14,13,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.6,5,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.7,6,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.8,7,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.9,8,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.10,9,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.11,10,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.12,11,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.13,12,Advanced +236,36,1,RW,MixedBits,Synchronised DO/RO Lock 3.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +700,500,1,W,Word,Reserved - Do Not Use,,Reserved +701,501,1,W,Word,Reserved - Do Not Use,,Reserved +702,502,1,W,Word,Reserved - Do Not Use,,Reserved +703,503,1,W,Word,Reserved - Do Not Use,,Reserved +704,504,1,W,Word,Reserved - Do Not Use,,Reserved +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,Word,Debounce time (in 100us) for DI 3.5,,Advanced +1215,1015,1,RW,Word,Debounce time (in 100us) for DI 3.6,,Advanced +1216,1016,1,RW,Word,Debounce time (in 100us) for DI 3.7,,Advanced +1217,1017,1,RW,Word,Debounce time (in 100us) for DI 3.8,,Advanced +1218,1018,1,RW,Word,Debounce time (in 100us) for DI 3.9,,Advanced +1219,1019,1,RW,Word,Debounce time (in 100us) for DI 3.10,,Advanced +1220,1020,1,RW,Word,Debounce time (in 100us) for DI 3.11,,Advanced +1221,1021,1,RW,Word,Debounce time (in 100us) for DI 3.12,,Advanced +1222,1022,1,RW,Word,Debounce time (in 100us) for DI 3.13,,Advanced +1223,1023,1,RW,Word,Debounce time (in 100us) for DI 3.14,,Advanced +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.1,0,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.2,1,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.3,2,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.4,3,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.5,4,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.6,5,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.7,6,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.8,7,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.9,8,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.10,9,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.11,10,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.12,11,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.13,12,Basic +1224,1024,1,RW,MixedBits,Enable DirectSwitch on DI 3.14,13,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.1,0,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.2,1,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.3,2,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.4,3,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.5,4,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.6,5,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.7,6,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.8,7,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.9,8,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.10,9,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.11,10,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.12,11,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.13,12,Basic +1225,1025,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.14,13,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.1,0,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.2,1,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.3,2,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.4,3,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.5,4,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.6,5,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.7,6,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.8,7,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.9,8,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.10,9,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.11,10,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.12,11,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.13,12,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.14,13,Basic +1227,1027,1,W,Word,Reserved - Do Not Use,,Reserved +1228,1028,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-2.csv new file mode 100644 index 0000000..4fd8928 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-2.csv @@ -0,0 +1,33 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +109,9,R,Digital Input 2.5,Basic +110,10,R,Digital Input 2.6,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1115,1015,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1116,1016,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1119,1019,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1120,1020,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1121,1021,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-3.csv new file mode 100644 index 0000000..4084ca8 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Coils-group-3.csv @@ -0,0 +1,33 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,R,Digital Input 3.1,Basic +206,6,R,Digital Input 3.2,Basic +207,7,R,Digital Input 3.3,Basic +208,8,R,Digital Input 3.4,Basic +209,9,R,Digital Input 3.5,Basic +210,10,R,Digital Input 3.6,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1207,1007,RW,Enable DirectSwitch on DI 3.1,Advanced +1208,1008,RW,Enable DirectSwitch on DI 3.2,Advanced +1209,1009,RW,Enable DirectSwitch on DI 3.3,Advanced +1210,1010,RW,Enable DirectSwitch on DI 3.4,Advanced +1211,1011,RW,Enable DirectSwitch on DI 3.5,Advanced +1212,1012,RW,Invert DirectSwitch Polarity on DI 3.1,Advanced +1213,1013,RW,Invert DirectSwitch Polarity on DI 3.2,Advanced +1214,1014,RW,Invert DirectSwitch Polarity on DI 3.3,Advanced +1215,1015,RW,Invert DirectSwitch Polarity on DI 3.4,Advanced +1216,1016,RW,Invert DirectSwitch Polarity on DI 3.5,Advanced +1217,1017,RW,Enable DirectSwitch Toggle Mode on DI 3.1,Advanced +1218,1018,RW,Enable DirectSwitch Toggle Mode on DI 3.2,Advanced +1219,1019,RW,Enable DirectSwitch Toggle Mode on DI 3.3,Advanced +1220,1020,RW,Enable DirectSwitch Toggle Mode on DI 3.4,Advanced +1221,1021,RW,Enable DirectSwitch Toggle Mode on DI 3.5,Advanced diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-2.csv new file mode 100644 index 0000000..e826033 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-2.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,2,RW,DWord,Counter of Digital Input 2.5,,Basic +126,26,2,RW,DWord,Counter of Digital Input 2.6,,Basic +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-3.csv new file mode 100644 index 0000000..eaed91a --- /dev/null +++ b/unipi/modbus_maps/Neuron_L513/Neuron_L513-Registers-group-3.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +200,0,1,R,MixedBits,Digital Input 3.5,4,Basic +200,0,1,R,MixedBits,Digital Input 3.6,5,Basic +201,1,1,RW,MixedBits,Relay Output 3.1,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.2,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.3,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.5,4,Basic +202,2,1,RW,Word,Analog Output Value 3.1 (0..4000 ~ 0..10V),,Basic +203,3,1,RW,Word,Analog Output Value 3.2 (0..4000 ~ 0..10V),,Basic +204,4,1,RW,Word,Analog Output Value 3.3 (0..4000 ~ 0..10V),,Basic +205,5,1,RW,Word,Analog Output Value 3.4 (0..4000 ~ 0..10V),,Basic +206,6,2,R,Real,Analog Input Value 3.1,,Basic +208,8,2,R,Real,Analog Input Value 3.2,,Basic +210,10,2,R,Real,Analog Input Value 3.3,,Basic +212,12,2,R,Real,Analog Input Value 3.4,,Basic +214,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +215,15,1,R,Word,Length of RS485 TX Queue 3.1,,Obsolete +216,16,2,RW,DWord,Counter of Digital Input 3.1,,Basic +218,18,2,RW,DWord,Counter of Digital Input 3.2,,Basic +220,20,2,RW,DWord,Counter of Digital Input 3.3,,Basic +222,22,2,RW,DWord,Counter of Digital Input 3.4,,Basic +224,24,2,RW,DWord,Counter of Digital Input 3.5,,Basic +226,26,2,RW,DWord,Counter of Digital Input 3.6,,Basic +228,28,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 3.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 3.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 3.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 3.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 3.1,,Basic +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,Word,Debounce time (in 100us) for DI 3.5,,Advanced +1215,1015,1,RW,Word,Debounce time (in 100us) for DI 3.6,,Advanced +1216,1016,1,RW,MixedBits,Enable DirectSwitch on DI 3.1,0,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch on DI 3.2,1,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch on DI 3.3,2,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch on DI 3.4,3,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch on DI 3.5,4,Basic +1217,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.1,0,Basic +1217,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.2,1,Basic +1217,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.3,2,Basic +1217,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.4,3,Basic +1217,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.5,4,Basic +1218,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.1,0,Basic +1218,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.2,1,Basic +1218,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.3,2,Basic +1218,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.4,3,Basic +1218,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.5,4,Basic +1219,1019,1,RW,Word,Analog Input Configuration(U/I/R) 3.1,,Basic +1220,1020,1,RW,Word,Analog Input Configuration(U/I/R) 3.2,,Basic +1221,1021,1,RW,Word,Analog Input Configuration(U/I/R) 3.3,,Basic +1222,1022,1,RW,Word,Analog Input Configuration(U/I/R) 3.4,,Basic +1223,1023,1,RW,MixedBits,RS485 Configuration 3.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-2.csv new file mode 100644 index 0000000..b548b32 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-2.csv @@ -0,0 +1,28 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1115,1015,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1116,1016,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-3.csv new file mode 100644 index 0000000..29b213e --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Coils-group-3.csv @@ -0,0 +1,79 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,RW,Relay Output 3.6,Basic +206,6,RW,Relay Output 3.7,Basic +207,7,RW,Relay Output 3.8,Basic +208,8,RW,Relay Output 3.9,Basic +209,9,RW,Relay Output 3.10,Basic +210,10,RW,Relay Output 3.11,Basic +211,11,RW,Relay Output 3.12,Basic +212,12,RW,Relay Output 3.13,Basic +213,13,RW,Relay Output 3.14,Basic +214,14,R,Digital Input 3.1,Basic +215,15,R,Digital Input 3.2,Basic +216,16,R,Digital Input 3.3,Basic +217,17,R,Digital Input 3.4,Basic +218,18,R,Digital Input 3.5,Basic +219,19,R,Digital Input 3.6,Basic +220,20,R,Digital Input 3.7,Basic +221,21,R,Digital Input 3.8,Basic +222,22,R,Digital Input 3.9,Basic +223,23,R,Digital Input 3.10,Basic +224,24,R,Digital Input 3.11,Basic +225,25,R,Digital Input 3.12,Basic +226,26,R,Digital Input 3.13,Basic +227,27,R,Digital Input 3.14,Basic +228,28,R,Digital Input 3.15,Basic +229,29,R,Digital Input 3.16,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1207,1007,RW,Enable DirectSwitch on DI 3.1,Advanced +1208,1008,RW,Enable DirectSwitch on DI 3.2,Advanced +1209,1009,RW,Enable DirectSwitch on DI 3.3,Advanced +1210,1010,RW,Enable DirectSwitch on DI 3.4,Advanced +1211,1011,RW,Enable DirectSwitch on DI 3.5,Advanced +1212,1012,RW,Enable DirectSwitch on DI 3.6,Advanced +1213,1013,RW,Enable DirectSwitch on DI 3.7,Advanced +1214,1014,RW,Enable DirectSwitch on DI 3.8,Advanced +1215,1015,RW,Enable DirectSwitch on DI 3.9,Advanced +1216,1016,RW,Enable DirectSwitch on DI 3.10,Advanced +1217,1017,RW,Enable DirectSwitch on DI 3.11,Advanced +1218,1018,RW,Enable DirectSwitch on DI 3.12,Advanced +1219,1019,RW,Enable DirectSwitch on DI 3.13,Advanced +1220,1020,RW,Enable DirectSwitch on DI 3.14,Advanced +1221,1021,RW,Invert DirectSwitch Polarity on DI 3.1,Advanced +1222,1022,RW,Invert DirectSwitch Polarity on DI 3.2,Advanced +1223,1023,RW,Invert DirectSwitch Polarity on DI 3.3,Advanced +1224,1024,RW,Invert DirectSwitch Polarity on DI 3.4,Advanced +1225,1025,RW,Invert DirectSwitch Polarity on DI 3.5,Advanced +1226,1026,RW,Invert DirectSwitch Polarity on DI 3.6,Advanced +1227,1027,RW,Invert DirectSwitch Polarity on DI 3.7,Advanced +1228,1028,RW,Invert DirectSwitch Polarity on DI 3.8,Advanced +1229,1029,RW,Invert DirectSwitch Polarity on DI 3.9,Advanced +1230,1030,RW,Invert DirectSwitch Polarity on DI 3.10,Advanced +1231,1031,RW,Invert DirectSwitch Polarity on DI 3.11,Advanced +1232,1032,RW,Invert DirectSwitch Polarity on DI 3.12,Advanced +1233,1033,RW,Invert DirectSwitch Polarity on DI 3.13,Advanced +1234,1034,RW,Invert DirectSwitch Polarity on DI 3.14,Advanced +1235,1035,RW,Enable DirectSwitch Toggle Mode on DI 3.1,Advanced +1236,1036,RW,Enable DirectSwitch Toggle Mode on DI 3.2,Advanced +1237,1037,RW,Enable DirectSwitch Toggle Mode on DI 3.3,Advanced +1238,1038,RW,Enable DirectSwitch Toggle Mode on DI 3.4,Advanced +1239,1039,RW,Enable DirectSwitch Toggle Mode on DI 3.5,Advanced +1240,1040,RW,Enable DirectSwitch Toggle Mode on DI 3.6,Advanced +1241,1041,RW,Enable DirectSwitch Toggle Mode on DI 3.7,Advanced +1242,1042,RW,Enable DirectSwitch Toggle Mode on DI 3.8,Advanced +1243,1043,RW,Enable DirectSwitch Toggle Mode on DI 3.9,Advanced +1244,1044,RW,Enable DirectSwitch Toggle Mode on DI 3.10,Advanced +1245,1045,RW,Enable DirectSwitch Toggle Mode on DI 3.11,Advanced +1246,1046,RW,Enable DirectSwitch Toggle Mode on DI 3.12,Advanced +1247,1047,RW,Enable DirectSwitch Toggle Mode on DI 3.13,Advanced +1248,1048,RW,Enable DirectSwitch Toggle Mode on DI 3.14,Advanced diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-2.csv new file mode 100644 index 0000000..dcc3424 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-2.csv @@ -0,0 +1,89 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,1,W,Word,Reserved - Do Not Use,,Reserved +125,25,1,W,Word,Reserved - Do Not Use,,Reserved +126,26,1,W,Word,Reserved - Do Not Use,,Reserved +127,27,1,W,Word,Reserved - Do Not Use,,Reserved +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1117,1017,1,W,Word,Reserved - Do Not Use,,Reserved +1118,1018,1,W,Word,Reserved - Do Not Use,,Reserved +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-3.csv new file mode 100644 index 0000000..e7b8eaf --- /dev/null +++ b/unipi/modbus_maps/Neuron_L523/Neuron_L523-Registers-group-3.csv @@ -0,0 +1,168 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +200,0,1,R,MixedBits,Digital Input 3.5,4,Basic +200,0,1,R,MixedBits,Digital Input 3.6,5,Basic +200,0,1,R,MixedBits,Digital Input 3.7,6,Basic +200,0,1,R,MixedBits,Digital Input 3.8,7,Basic +200,0,1,R,MixedBits,Digital Input 3.9,8,Basic +200,0,1,R,MixedBits,Digital Input 3.10,9,Basic +200,0,1,R,MixedBits,Digital Input 3.11,10,Basic +200,0,1,R,MixedBits,Digital Input 3.12,11,Basic +200,0,1,R,MixedBits,Digital Input 3.13,12,Basic +200,0,1,R,MixedBits,Digital Input 3.14,13,Basic +200,0,1,R,MixedBits,Digital Input 3.15,14,Basic +200,0,1,R,MixedBits,Digital Input 3.16,15,Basic +201,1,1,RW,MixedBits,Relay Output 3.1,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.2,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.3,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.5,4,Basic +201,1,1,RW,MixedBits,Relay Output 3.6,5,Basic +201,1,1,RW,MixedBits,Relay Output 3.7,6,Basic +201,1,1,RW,MixedBits,Relay Output 3.8,7,Basic +201,1,1,RW,MixedBits,Relay Output 3.9,8,Basic +201,1,1,RW,MixedBits,Relay Output 3.10,9,Basic +201,1,1,RW,MixedBits,Relay Output 3.11,10,Basic +201,1,1,RW,MixedBits,Relay Output 3.12,11,Basic +201,1,1,RW,MixedBits,Relay Output 3.13,12,Basic +201,1,1,RW,MixedBits,Relay Output 3.14,13,Basic +202,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +203,3,2,RW,DWord,Counter of Digital Input 3.1,,Basic +205,5,2,RW,DWord,Counter of Digital Input 3.2,,Basic +207,7,2,RW,DWord,Counter of Digital Input 3.3,,Basic +209,9,2,RW,DWord,Counter of Digital Input 3.4,,Basic +211,11,2,RW,DWord,Counter of Digital Input 3.5,,Basic +213,13,2,RW,DWord,Counter of Digital Input 3.6,,Basic +215,15,2,RW,DWord,Counter of Digital Input 3.7,,Basic +217,17,2,RW,DWord,Counter of Digital Input 3.8,,Basic +219,19,2,RW,DWord,Counter of Digital Input 3.9,,Basic +221,21,2,RW,DWord,Counter of Digital Input 3.10,,Basic +223,23,2,RW,DWord,Counter of Digital Input 3.11,,Basic +225,25,2,RW,DWord,Counter of Digital Input 3.12,,Basic +227,27,2,RW,DWord,Counter of Digital Input 3.13,,Basic +229,29,2,RW,DWord,Counter of Digital Input 3.14,,Basic +231,31,2,RW,DWord,Counter of Digital Input 3.15,,Basic +233,33,2,RW,DWord,Counter of Digital Input 3.16,,Basic +235,35,1,W,Word,Reserved - Do Not Use,,Reserved +236,36,1,W,Word,Reserved - Do Not Use,,Reserved +237,37,1,W,Word,Reserved - Do Not Use,,Reserved +238,38,1,W,Word,Reserved - Do Not Use,,Reserved +239,39,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.6,5,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.7,6,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.8,7,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.9,8,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.10,9,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.11,10,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.12,11,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.13,12,Advanced +239,39,1,RW,MixedBits,Synchronised DO/RO 3.14,13,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.6,5,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.7,6,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.8,7,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.9,8,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.10,9,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.11,10,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.12,11,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.13,12,Advanced +240,40,1,RW,MixedBits,Synchronised DO/RO Lock 3.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +700,500,1,W,Word,Reserved - Do Not Use,,Reserved +701,501,1,W,Word,Reserved - Do Not Use,,Reserved +702,502,1,W,Word,Reserved - Do Not Use,,Reserved +703,503,1,W,Word,Reserved - Do Not Use,,Reserved +704,504,1,W,Word,Reserved - Do Not Use,,Reserved +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,Word,Debounce time (in 100us) for DI 3.5,,Advanced +1215,1015,1,RW,Word,Debounce time (in 100us) for DI 3.6,,Advanced +1216,1016,1,RW,Word,Debounce time (in 100us) for DI 3.7,,Advanced +1217,1017,1,RW,Word,Debounce time (in 100us) for DI 3.8,,Advanced +1218,1018,1,RW,Word,Debounce time (in 100us) for DI 3.9,,Advanced +1219,1019,1,RW,Word,Debounce time (in 100us) for DI 3.10,,Advanced +1220,1020,1,RW,Word,Debounce time (in 100us) for DI 3.11,,Advanced +1221,1021,1,RW,Word,Debounce time (in 100us) for DI 3.12,,Advanced +1222,1022,1,RW,Word,Debounce time (in 100us) for DI 3.13,,Advanced +1223,1023,1,RW,Word,Debounce time (in 100us) for DI 3.14,,Advanced +1224,1024,1,RW,Word,Debounce time (in 100us) for DI 3.15,,Advanced +1225,1025,1,RW,Word,Debounce time (in 100us) for DI 3.16,,Advanced +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.1,0,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.2,1,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.3,2,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.4,3,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.5,4,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.6,5,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.7,6,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.8,7,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.9,8,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.10,9,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.11,10,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.12,11,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.13,12,Basic +1226,1026,1,RW,MixedBits,Enable DirectSwitch on DI 3.14,13,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.1,0,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.2,1,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.3,2,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.4,3,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.5,4,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.6,5,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.7,6,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.8,7,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.9,8,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.10,9,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.11,10,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.12,11,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.13,12,Basic +1227,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.14,13,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.1,0,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.2,1,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.3,2,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.4,3,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.5,4,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.6,5,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.7,6,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.8,7,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.9,8,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.10,9,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.11,10,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.12,11,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.13,12,Basic +1228,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.14,13,Basic +1229,1029,1,W,Word,Reserved - Do Not Use,,Reserved +1230,1030,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-1.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-2.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-2.csv new file mode 100644 index 0000000..b548b32 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-2.csv @@ -0,0 +1,28 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1115,1015,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1116,1016,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-3.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-3.csv new file mode 100644 index 0000000..8ae9ce0 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Coils-group-3.csv @@ -0,0 +1,28 @@ +Via Unit 0,Via Unit 3,R/W,Content,Category +200,0,RW,Relay Output 3.1,Basic +201,1,RW,Relay Output 3.2,Basic +202,2,RW,Relay Output 3.3,Basic +203,3,RW,Relay Output 3.4,Basic +204,4,RW,Relay Output 3.5,Basic +205,5,R,Digital Input 3.1,Basic +206,6,R,Digital Input 3.2,Basic +207,7,R,Digital Input 3.3,Basic +208,8,R,Digital Input 3.4,Basic +1200,1000,RW,MWD reset indication,Advanced +1202,1002,R,Reset group MCU,Advanced +1203,1003,RW,Save current configuration and use on startup,Advanced +1204,1004,RW,(Internal) Firmware programming toggle,Expert +1205,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1206,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1207,1007,RW,Enable DirectSwitch on DI 3.1,Advanced +1208,1008,RW,Enable DirectSwitch on DI 3.2,Advanced +1209,1009,RW,Enable DirectSwitch on DI 3.3,Advanced +1210,1010,RW,Enable DirectSwitch on DI 3.4,Advanced +1211,1011,RW,Invert DirectSwitch Polarity on DI 3.1,Advanced +1212,1012,RW,Invert DirectSwitch Polarity on DI 3.2,Advanced +1213,1013,RW,Invert DirectSwitch Polarity on DI 3.3,Advanced +1214,1014,RW,Invert DirectSwitch Polarity on DI 3.4,Advanced +1215,1015,RW,Enable DirectSwitch Toggle Mode on DI 3.1,Advanced +1216,1016,RW,Enable DirectSwitch Toggle Mode on DI 3.2,Advanced +1217,1017,RW,Enable DirectSwitch Toggle Mode on DI 3.3,Advanced +1218,1018,RW,Enable DirectSwitch Toggle Mode on DI 3.4,Advanced diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-1.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-2.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-2.csv new file mode 100644 index 0000000..dcc3424 --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-2.csv @@ -0,0 +1,89 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,1,W,Word,Reserved - Do Not Use,,Reserved +125,25,1,W,Word,Reserved - Do Not Use,,Reserved +126,26,1,W,Word,Reserved - Do Not Use,,Reserved +127,27,1,W,Word,Reserved - Do Not Use,,Reserved +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1117,1017,1,W,Word,Reserved - Do Not Use,,Reserved +1118,1018,1,W,Word,Reserved - Do Not Use,,Reserved +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-3.csv b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-3.csv new file mode 100644 index 0000000..61dad5a --- /dev/null +++ b/unipi/modbus_maps/Neuron_L533/Neuron_L533-Registers-group-3.csv @@ -0,0 +1,89 @@ +Via Unit 0,Via Unit 3,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +200,0,1,R,MixedBits,Digital Input 3.1,0,Basic +200,0,1,R,MixedBits,Digital Input 3.2,1,Basic +200,0,1,R,MixedBits,Digital Input 3.3,2,Basic +200,0,1,R,MixedBits,Digital Input 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.1,0,Basic +201,1,1,RW,MixedBits,Relay Output 3.2,1,Basic +201,1,1,RW,MixedBits,Relay Output 3.3,2,Basic +201,1,1,RW,MixedBits,Relay Output 3.4,3,Basic +201,1,1,RW,MixedBits,Relay Output 3.5,4,Basic +202,2,1,RW,Word,Analog Output Value 3.1 (0..4000 ~ 0..10V),,Basic +203,3,1,RW,Word,Analog Output Value 3.2 (0..4000 ~ 0..10V),,Basic +204,4,1,RW,Word,Analog Output Value 3.3 (0..4000 ~ 0..10V),,Basic +205,5,1,RW,Word,Analog Output Value 3.4 (0..4000 ~ 0..10V),,Basic +206,6,2,R,Real,Analog Input Value 3.1,,Basic +208,8,2,R,Real,Analog Input Value 3.2,,Basic +210,10,2,R,Real,Analog Input Value 3.3,,Basic +212,12,2,R,Real,Analog Input Value 3.4,,Basic +214,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +215,15,1,R,Word,Length of RS485 TX Queue 3.1,,Obsolete +216,16,2,RW,DWord,Counter of Digital Input 3.1,,Basic +218,18,2,RW,DWord,Counter of Digital Input 3.2,,Basic +220,20,2,RW,DWord,Counter of Digital Input 3.3,,Basic +222,22,2,RW,DWord,Counter of Digital Input 3.4,,Basic +224,24,1,W,Word,Reserved - Do Not Use,,Reserved +225,25,1,W,Word,Reserved - Do Not Use,,Reserved +226,26,1,W,Word,Reserved - Do Not Use,,Reserved +227,27,1,W,Word,Reserved - Do Not Use,,Reserved +228,28,1,RW,MixedBits,Synchronised DO/RO 3.1,0,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.2,1,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.3,2,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.4,3,Advanced +228,28,1,RW,MixedBits,Synchronised DO/RO 3.5,4,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.1,0,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.2,1,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.3,2,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.4,3,Advanced +229,29,1,RW,MixedBits,Synchronised DO/RO Lock 3.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 3.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 3.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 3.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 3.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 3.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 3.1,,Basic +705,505,1,W,Word,Reserved - Do Not Use,,Reserved +706,506,1,W,Word,Reserved - Do Not Use,,Reserved +707,507,1,W,Word,Reserved - Do Not Use,,Reserved +708,508,1,W,Word,Reserved - Do Not Use,,Reserved +709,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1200,1000,1,R,Word,Firmware Version,,Expert +1201,1001,1,R,Word,Number of I/Os,,Advanced +1202,1002,1,R,Word,Number of peripherals,,Advanced +1203,1003,1,R,Word,Firmware ID,,Expert +1204,1004,1,R,Word,Hardware ID,,Expert +1205,1005,2,R,DWord,PCB Serial Number,,Expert +1207,1007,1,RW,Word,Interrupt Mask,,Expert +1208,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1209,1009,1,R,Word,VRef of MCU,,Expert +1210,1010,1,RW,Word,Debounce time (in 100us) for DI 3.1,,Advanced +1211,1011,1,RW,Word,Debounce time (in 100us) for DI 3.2,,Advanced +1212,1012,1,RW,Word,Debounce time (in 100us) for DI 3.3,,Advanced +1213,1013,1,RW,Word,Debounce time (in 100us) for DI 3.4,,Advanced +1214,1014,1,RW,MixedBits,Enable DirectSwitch on DI 3.1,0,Basic +1214,1014,1,RW,MixedBits,Enable DirectSwitch on DI 3.2,1,Basic +1214,1014,1,RW,MixedBits,Enable DirectSwitch on DI 3.3,2,Basic +1214,1014,1,RW,MixedBits,Enable DirectSwitch on DI 3.4,3,Basic +1215,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.1,0,Basic +1215,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.2,1,Basic +1215,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.3,2,Basic +1215,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 3.4,3,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.1,0,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.2,1,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.3,2,Basic +1216,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 3.4,3,Basic +1217,1017,1,W,Word,Reserved - Do Not Use,,Reserved +1218,1018,1,W,Word,Reserved - Do Not Use,,Reserved +1219,1019,1,RW,Word,Analog Input Configuration(U/I/R) 3.1,,Basic +1220,1020,1,RW,Word,Analog Input Configuration(U/I/R) 3.2,,Basic +1221,1021,1,RW,Word,Analog Input Configuration(U/I/R) 3.3,,Basic +1222,1022,1,RW,Word,Analog Input Configuration(U/I/R) 3.4,,Basic +1223,1023,1,RW,MixedBits,RS485 Configuration 3.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-2.csv new file mode 100644 index 0000000..8528a96 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Coils-group-2.csv @@ -0,0 +1,47 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,RW,Relay Output 2.6,Basic +106,6,RW,Relay Output 2.7,Basic +107,7,RW,Relay Output 2.8,Basic +108,8,R,Digital Input 2.1,Basic +109,9,R,Digital Input 2.2,Basic +110,10,R,Digital Input 2.3,Basic +111,11,R,Digital Input 2.4,Basic +112,12,R,Digital Input 2.5,Basic +113,13,R,Digital Input 2.6,Basic +114,14,R,Digital Input 2.7,Basic +115,15,R,Digital Input 2.8,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Enable DirectSwitch on DI 2.6,Advanced +1113,1013,RW,Enable DirectSwitch on DI 2.7,Advanced +1114,1014,RW,Enable DirectSwitch on DI 2.8,Advanced +1115,1015,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1116,1016,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1117,1017,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1118,1018,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1119,1019,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1120,1020,RW,Invert DirectSwitch Polarity on DI 2.6,Advanced +1121,1021,RW,Invert DirectSwitch Polarity on DI 2.7,Advanced +1122,1022,RW,Invert DirectSwitch Polarity on DI 2.8,Advanced +1123,1023,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1124,1024,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1125,1025,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1126,1026,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1127,1027,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced +1128,1028,RW,Enable DirectSwitch Toggle Mode on DI 2.6,Advanced +1129,1029,RW,Enable DirectSwitch Toggle Mode on DI 2.7,Advanced +1130,1030,RW,Enable DirectSwitch Toggle Mode on DI 2.8,Advanced diff --git a/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-2.csv new file mode 100644 index 0000000..9b112ec --- /dev/null +++ b/unipi/modbus_maps/Neuron_M103/Neuron_M103-Registers-group-2.csv @@ -0,0 +1,108 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +100,0,1,R,MixedBits,Digital Input 2.7,6,Basic +100,0,1,R,MixedBits,Digital Input 2.8,7,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +101,1,1,RW,MixedBits,Relay Output 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.7,6,Basic +101,1,1,RW,MixedBits,Relay Output 2.8,7,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,2,RW,DWord,Counter of Digital Input 2.1,,Basic +105,5,2,RW,DWord,Counter of Digital Input 2.2,,Basic +107,7,2,RW,DWord,Counter of Digital Input 2.3,,Basic +109,9,2,RW,DWord,Counter of Digital Input 2.4,,Basic +111,11,2,RW,DWord,Counter of Digital Input 2.5,,Basic +113,13,2,RW,DWord,Counter of Digital Input 2.6,,Basic +115,15,2,RW,DWord,Counter of Digital Input 2.7,,Basic +117,17,2,RW,DWord,Counter of Digital Input 2.8,,Basic +119,19,1,W,Word,Reserved - Do Not Use,,Reserved +120,20,1,W,Word,Reserved - Do Not Use,,Reserved +121,21,1,W,Word,Reserved - Do Not Use,,Reserved +122,22,1,W,Word,Reserved - Do Not Use,,Reserved +123,23,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.6,5,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.7,6,Advanced +123,23,1,RW,MixedBits,Synchronised DO/RO 2.8,7,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.6,5,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.7,6,Advanced +124,24,1,RW,MixedBits,Synchronised DO/RO Lock 2.8,7,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,Word,Debounce time (in 100us) for DI 2.7,,Advanced +1117,1017,1,RW,Word,Debounce time (in 100us) for DI 2.8,,Advanced +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.6,5,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.7,6,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch on DI 2.8,7,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.6,5,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.7,6,Basic +1119,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.8,7,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.6,5,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.7,6,Basic +1120,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.8,7,Basic +1121,1021,1,W,Word,Reserved - Do Not Use,,Reserved +1122,1022,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-2.csv new file mode 100644 index 0000000..ae02ec8 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Coils-group-2.csv @@ -0,0 +1,79 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,RW,Relay Output 2.6,Basic +106,6,RW,Relay Output 2.7,Basic +107,7,RW,Relay Output 2.8,Basic +108,8,RW,Relay Output 2.9,Basic +109,9,RW,Relay Output 2.10,Basic +110,10,RW,Relay Output 2.11,Basic +111,11,RW,Relay Output 2.12,Basic +112,12,RW,Relay Output 2.13,Basic +113,13,RW,Relay Output 2.14,Basic +114,14,R,Digital Input 2.1,Basic +115,15,R,Digital Input 2.2,Basic +116,16,R,Digital Input 2.3,Basic +117,17,R,Digital Input 2.4,Basic +118,18,R,Digital Input 2.5,Basic +119,19,R,Digital Input 2.6,Basic +120,20,R,Digital Input 2.7,Basic +121,21,R,Digital Input 2.8,Basic +122,22,R,Digital Input 2.9,Basic +123,23,R,Digital Input 2.10,Basic +124,24,R,Digital Input 2.11,Basic +125,25,R,Digital Input 2.12,Basic +126,26,R,Digital Input 2.13,Basic +127,27,R,Digital Input 2.14,Basic +128,28,R,Digital Input 2.15,Basic +129,29,R,Digital Input 2.16,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Enable DirectSwitch on DI 2.6,Advanced +1113,1013,RW,Enable DirectSwitch on DI 2.7,Advanced +1114,1014,RW,Enable DirectSwitch on DI 2.8,Advanced +1115,1015,RW,Enable DirectSwitch on DI 2.9,Advanced +1116,1016,RW,Enable DirectSwitch on DI 2.10,Advanced +1117,1017,RW,Enable DirectSwitch on DI 2.11,Advanced +1118,1018,RW,Enable DirectSwitch on DI 2.12,Advanced +1119,1019,RW,Enable DirectSwitch on DI 2.13,Advanced +1120,1020,RW,Enable DirectSwitch on DI 2.14,Advanced +1121,1021,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1122,1022,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1123,1023,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1124,1024,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1125,1025,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1126,1026,RW,Invert DirectSwitch Polarity on DI 2.6,Advanced +1127,1027,RW,Invert DirectSwitch Polarity on DI 2.7,Advanced +1128,1028,RW,Invert DirectSwitch Polarity on DI 2.8,Advanced +1129,1029,RW,Invert DirectSwitch Polarity on DI 2.9,Advanced +1130,1030,RW,Invert DirectSwitch Polarity on DI 2.10,Advanced +1131,1031,RW,Invert DirectSwitch Polarity on DI 2.11,Advanced +1132,1032,RW,Invert DirectSwitch Polarity on DI 2.12,Advanced +1133,1033,RW,Invert DirectSwitch Polarity on DI 2.13,Advanced +1134,1034,RW,Invert DirectSwitch Polarity on DI 2.14,Advanced +1135,1035,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1136,1036,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1137,1037,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1138,1038,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1139,1039,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced +1140,1040,RW,Enable DirectSwitch Toggle Mode on DI 2.6,Advanced +1141,1041,RW,Enable DirectSwitch Toggle Mode on DI 2.7,Advanced +1142,1042,RW,Enable DirectSwitch Toggle Mode on DI 2.8,Advanced +1143,1043,RW,Enable DirectSwitch Toggle Mode on DI 2.9,Advanced +1144,1044,RW,Enable DirectSwitch Toggle Mode on DI 2.10,Advanced +1145,1045,RW,Enable DirectSwitch Toggle Mode on DI 2.11,Advanced +1146,1046,RW,Enable DirectSwitch Toggle Mode on DI 2.12,Advanced +1147,1047,RW,Enable DirectSwitch Toggle Mode on DI 2.13,Advanced +1148,1048,RW,Enable DirectSwitch Toggle Mode on DI 2.14,Advanced diff --git a/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-2.csv new file mode 100644 index 0000000..195f063 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M203/Neuron_M203-Registers-group-2.csv @@ -0,0 +1,168 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +100,0,1,R,MixedBits,Digital Input 2.7,6,Basic +100,0,1,R,MixedBits,Digital Input 2.8,7,Basic +100,0,1,R,MixedBits,Digital Input 2.9,8,Basic +100,0,1,R,MixedBits,Digital Input 2.10,9,Basic +100,0,1,R,MixedBits,Digital Input 2.11,10,Basic +100,0,1,R,MixedBits,Digital Input 2.12,11,Basic +100,0,1,R,MixedBits,Digital Input 2.13,12,Basic +100,0,1,R,MixedBits,Digital Input 2.14,13,Basic +100,0,1,R,MixedBits,Digital Input 2.15,14,Basic +100,0,1,R,MixedBits,Digital Input 2.16,15,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +101,1,1,RW,MixedBits,Relay Output 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.7,6,Basic +101,1,1,RW,MixedBits,Relay Output 2.8,7,Basic +101,1,1,RW,MixedBits,Relay Output 2.9,8,Basic +101,1,1,RW,MixedBits,Relay Output 2.10,9,Basic +101,1,1,RW,MixedBits,Relay Output 2.11,10,Basic +101,1,1,RW,MixedBits,Relay Output 2.12,11,Basic +101,1,1,RW,MixedBits,Relay Output 2.13,12,Basic +101,1,1,RW,MixedBits,Relay Output 2.14,13,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,2,RW,DWord,Counter of Digital Input 2.1,,Basic +105,5,2,RW,DWord,Counter of Digital Input 2.2,,Basic +107,7,2,RW,DWord,Counter of Digital Input 2.3,,Basic +109,9,2,RW,DWord,Counter of Digital Input 2.4,,Basic +111,11,2,RW,DWord,Counter of Digital Input 2.5,,Basic +113,13,2,RW,DWord,Counter of Digital Input 2.6,,Basic +115,15,2,RW,DWord,Counter of Digital Input 2.7,,Basic +117,17,2,RW,DWord,Counter of Digital Input 2.8,,Basic +119,19,2,RW,DWord,Counter of Digital Input 2.9,,Basic +121,21,2,RW,DWord,Counter of Digital Input 2.10,,Basic +123,23,2,RW,DWord,Counter of Digital Input 2.11,,Basic +125,25,2,RW,DWord,Counter of Digital Input 2.12,,Basic +127,27,2,RW,DWord,Counter of Digital Input 2.13,,Basic +129,29,2,RW,DWord,Counter of Digital Input 2.14,,Basic +131,31,2,RW,DWord,Counter of Digital Input 2.15,,Basic +133,33,2,RW,DWord,Counter of Digital Input 2.16,,Basic +135,35,1,W,Word,Reserved - Do Not Use,,Reserved +136,36,1,W,Word,Reserved - Do Not Use,,Reserved +137,37,1,W,Word,Reserved - Do Not Use,,Reserved +138,38,1,W,Word,Reserved - Do Not Use,,Reserved +139,39,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.6,5,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.7,6,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.8,7,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.9,8,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.10,9,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.11,10,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.12,11,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.13,12,Advanced +139,39,1,RW,MixedBits,Synchronised DO/RO 2.14,13,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.6,5,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.7,6,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.8,7,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.9,8,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.10,9,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.11,10,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.12,11,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.13,12,Advanced +140,40,1,RW,MixedBits,Synchronised DO/RO Lock 2.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,Word,Debounce time (in 100us) for DI 2.7,,Advanced +1117,1017,1,RW,Word,Debounce time (in 100us) for DI 2.8,,Advanced +1118,1018,1,RW,Word,Debounce time (in 100us) for DI 2.9,,Advanced +1119,1019,1,RW,Word,Debounce time (in 100us) for DI 2.10,,Advanced +1120,1020,1,RW,Word,Debounce time (in 100us) for DI 2.11,,Advanced +1121,1021,1,RW,Word,Debounce time (in 100us) for DI 2.12,,Advanced +1122,1022,1,RW,Word,Debounce time (in 100us) for DI 2.13,,Advanced +1123,1023,1,RW,Word,Debounce time (in 100us) for DI 2.14,,Advanced +1124,1024,1,RW,Word,Debounce time (in 100us) for DI 2.15,,Advanced +1125,1025,1,RW,Word,Debounce time (in 100us) for DI 2.16,,Advanced +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.6,5,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.7,6,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.8,7,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.9,8,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.10,9,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.11,10,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.12,11,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.13,12,Basic +1126,1026,1,RW,MixedBits,Enable DirectSwitch on DI 2.14,13,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.6,5,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.7,6,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.8,7,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.9,8,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.10,9,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.11,10,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.12,11,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.13,12,Basic +1127,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.14,13,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.6,5,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.7,6,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.8,7,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.9,8,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.10,9,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.11,10,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.12,11,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.13,12,Basic +1128,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.14,13,Basic +1129,1029,1,W,Word,Reserved - Do Not Use,,Reserved +1130,1030,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-2.csv new file mode 100644 index 0000000..7487ca8 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Coils-group-2.csv @@ -0,0 +1,37 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,R,Digital Input 2.1,Basic +101,1,R,Digital Input 2.2,Basic +102,2,R,Digital Input 2.3,Basic +103,3,R,Digital Input 2.4,Basic +104,4,R,Digital Input 2.5,Basic +105,5,R,Digital Input 2.6,Basic +106,6,R,Digital Input 2.7,Basic +107,7,R,Digital Input 2.8,Basic +108,8,R,Digital Input 2.9,Basic +109,9,R,Digital Input 2.10,Basic +110,10,R,Digital Input 2.11,Basic +111,11,R,Digital Input 2.12,Basic +112,12,R,Digital Input 2.13,Basic +113,13,R,Digital Input 2.14,Basic +114,14,R,Digital Input 2.15,Basic +115,15,R,Digital Input 2.16,Basic +116,16,R,Digital Input 2.17,Basic +117,17,R,Digital Input 2.18,Basic +118,18,R,Digital Input 2.19,Basic +119,19,R,Digital Input 2.20,Basic +120,20,R,Digital Input 2.21,Basic +121,21,R,Digital Input 2.22,Basic +122,22,R,Digital Input 2.23,Basic +123,23,R,Digital Input 2.24,Basic +124,24,R,Digital Input 2.25,Basic +125,25,R,Digital Input 2.26,Basic +126,26,R,Digital Input 2.27,Basic +127,27,R,Digital Input 2.28,Basic +128,28,R,Digital Input 2.29,Basic +129,29,R,Digital Input 2.30,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-2.csv new file mode 100644 index 0000000..eea2691 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M303/Neuron_M303-Registers-group-2.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +100,0,1,R,MixedBits,Digital Input 2.7,6,Basic +100,0,1,R,MixedBits,Digital Input 2.8,7,Basic +100,0,1,R,MixedBits,Digital Input 2.9,8,Basic +100,0,1,R,MixedBits,Digital Input 2.10,9,Basic +100,0,1,R,MixedBits,Digital Input 2.11,10,Basic +100,0,1,R,MixedBits,Digital Input 2.12,11,Basic +100,0,1,R,MixedBits,Digital Input 2.13,12,Basic +100,0,1,R,MixedBits,Digital Input 2.14,13,Basic +100,0,1,R,MixedBits,Digital Input 2.15,14,Basic +100,0,1,R,MixedBits,Digital Input 2.16,15,Basic +101,1,1,R,MixedBits,Digital Input 2.17,0,Basic +101,1,1,R,MixedBits,Digital Input 2.18,1,Basic +101,1,1,R,MixedBits,Digital Input 2.19,2,Basic +101,1,1,R,MixedBits,Digital Input 2.20,3,Basic +101,1,1,R,MixedBits,Digital Input 2.21,4,Basic +101,1,1,R,MixedBits,Digital Input 2.22,5,Basic +101,1,1,R,MixedBits,Digital Input 2.23,6,Basic +101,1,1,R,MixedBits,Digital Input 2.24,7,Basic +101,1,1,R,MixedBits,Digital Input 2.25,8,Basic +101,1,1,R,MixedBits,Digital Input 2.26,9,Basic +101,1,1,R,MixedBits,Digital Input 2.27,10,Basic +101,1,1,R,MixedBits,Digital Input 2.28,11,Basic +101,1,1,R,MixedBits,Digital Input 2.29,12,Basic +101,1,1,R,MixedBits,Digital Input 2.30,13,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,2,RW,DWord,Counter of Digital Input 2.1,,Basic +105,5,2,RW,DWord,Counter of Digital Input 2.2,,Basic +107,7,2,RW,DWord,Counter of Digital Input 2.3,,Basic +109,9,2,RW,DWord,Counter of Digital Input 2.4,,Basic +111,11,2,RW,DWord,Counter of Digital Input 2.5,,Basic +113,13,2,RW,DWord,Counter of Digital Input 2.6,,Basic +115,15,2,RW,DWord,Counter of Digital Input 2.7,,Basic +117,17,2,RW,DWord,Counter of Digital Input 2.8,,Basic +119,19,2,RW,DWord,Counter of Digital Input 2.9,,Basic +121,21,2,RW,DWord,Counter of Digital Input 2.10,,Basic +123,23,2,RW,DWord,Counter of Digital Input 2.11,,Basic +125,25,2,RW,DWord,Counter of Digital Input 2.12,,Basic +127,27,2,RW,DWord,Counter of Digital Input 2.13,,Basic +129,29,2,RW,DWord,Counter of Digital Input 2.14,,Basic +131,31,2,RW,DWord,Counter of Digital Input 2.15,,Basic +133,33,2,RW,DWord,Counter of Digital Input 2.16,,Basic +135,35,2,RW,DWord,Counter of Digital Input 2.17,,Basic +137,37,2,RW,DWord,Counter of Digital Input 2.18,,Basic +139,39,2,RW,DWord,Counter of Digital Input 2.19,,Basic +141,41,2,RW,DWord,Counter of Digital Input 2.20,,Basic +143,43,2,RW,DWord,Counter of Digital Input 2.21,,Basic +145,45,2,RW,DWord,Counter of Digital Input 2.22,,Basic +147,47,2,RW,DWord,Counter of Digital Input 2.23,,Basic +149,49,2,RW,DWord,Counter of Digital Input 2.24,,Basic +151,51,2,RW,DWord,Counter of Digital Input 2.25,,Basic +153,53,2,RW,DWord,Counter of Digital Input 2.26,,Basic +155,55,2,RW,DWord,Counter of Digital Input 2.27,,Basic +157,57,2,RW,DWord,Counter of Digital Input 2.28,,Basic +159,59,2,RW,DWord,Counter of Digital Input 2.29,,Basic +161,61,2,RW,DWord,Counter of Digital Input 2.30,,Basic +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,Word,Debounce time (in 100us) for DI 2.7,,Advanced +1117,1017,1,RW,Word,Debounce time (in 100us) for DI 2.8,,Advanced +1118,1018,1,RW,Word,Debounce time (in 100us) for DI 2.9,,Advanced +1119,1019,1,RW,Word,Debounce time (in 100us) for DI 2.10,,Advanced +1120,1020,1,RW,Word,Debounce time (in 100us) for DI 2.11,,Advanced +1121,1021,1,RW,Word,Debounce time (in 100us) for DI 2.12,,Advanced +1122,1022,1,RW,Word,Debounce time (in 100us) for DI 2.13,,Advanced +1123,1023,1,RW,Word,Debounce time (in 100us) for DI 2.14,,Advanced +1124,1024,1,RW,Word,Debounce time (in 100us) for DI 2.15,,Advanced +1125,1025,1,RW,Word,Debounce time (in 100us) for DI 2.16,,Advanced +1126,1026,1,RW,Word,Debounce time (in 100us) for DI 2.17,,Advanced +1127,1027,1,RW,Word,Debounce time (in 100us) for DI 2.18,,Advanced +1128,1028,1,RW,Word,Debounce time (in 100us) for DI 2.19,,Advanced +1129,1029,1,RW,Word,Debounce time (in 100us) for DI 2.20,,Advanced +1130,1030,1,RW,Word,Debounce time (in 100us) for DI 2.21,,Advanced +1131,1031,1,RW,Word,Debounce time (in 100us) for DI 2.22,,Advanced +1132,1032,1,RW,Word,Debounce time (in 100us) for DI 2.23,,Advanced +1133,1033,1,RW,Word,Debounce time (in 100us) for DI 2.24,,Advanced +1134,1034,1,RW,Word,Debounce time (in 100us) for DI 2.25,,Advanced +1135,1035,1,RW,Word,Debounce time (in 100us) for DI 2.26,,Advanced +1136,1036,1,RW,Word,Debounce time (in 100us) for DI 2.27,,Advanced +1137,1037,1,RW,Word,Debounce time (in 100us) for DI 2.28,,Advanced +1138,1038,1,RW,Word,Debounce time (in 100us) for DI 2.29,,Advanced +1139,1039,1,RW,Word,Debounce time (in 100us) for DI 2.30,,Advanced +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-2.csv new file mode 100644 index 0000000..a772543 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Coils-group-2.csv @@ -0,0 +1,35 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,RW,Relay Output 2.6,Basic +106,6,RW,Relay Output 2.7,Basic +107,7,RW,Relay Output 2.8,Basic +108,8,RW,Relay Output 2.9,Basic +109,9,RW,Relay Output 2.10,Basic +110,10,RW,Relay Output 2.11,Basic +111,11,RW,Relay Output 2.12,Basic +112,12,RW,Relay Output 2.13,Basic +113,13,RW,Relay Output 2.14,Basic +114,14,RW,Relay Output 2.15,Basic +115,15,RW,Relay Output 2.16,Basic +116,16,RW,Relay Output 2.17,Basic +117,17,RW,Relay Output 2.18,Basic +118,18,RW,Relay Output 2.19,Basic +119,19,RW,Relay Output 2.20,Basic +120,20,RW,Relay Output 2.21,Basic +121,21,RW,Relay Output 2.22,Basic +122,22,RW,Relay Output 2.23,Basic +123,23,RW,Relay Output 2.24,Basic +124,24,RW,Relay Output 2.25,Basic +125,25,RW,Relay Output 2.26,Basic +126,26,RW,Relay Output 2.27,Basic +127,27,RW,Relay Output 2.28,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-2.csv new file mode 100644 index 0000000..ab6a715 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M403/Neuron_M403-Registers-group-2.csv @@ -0,0 +1,120 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,RW,MixedBits,Relay Output 2.1,0,Basic +100,0,1,RW,MixedBits,Relay Output 2.2,1,Basic +100,0,1,RW,MixedBits,Relay Output 2.3,2,Basic +100,0,1,RW,MixedBits,Relay Output 2.4,3,Basic +100,0,1,RW,MixedBits,Relay Output 2.5,4,Basic +100,0,1,RW,MixedBits,Relay Output 2.6,5,Basic +100,0,1,RW,MixedBits,Relay Output 2.7,6,Basic +100,0,1,RW,MixedBits,Relay Output 2.8,7,Basic +100,0,1,RW,MixedBits,Relay Output 2.9,8,Basic +100,0,1,RW,MixedBits,Relay Output 2.10,9,Basic +100,0,1,RW,MixedBits,Relay Output 2.11,10,Basic +100,0,1,RW,MixedBits,Relay Output 2.12,11,Basic +100,0,1,RW,MixedBits,Relay Output 2.13,12,Basic +100,0,1,RW,MixedBits,Relay Output 2.14,13,Basic +100,0,1,RW,MixedBits,Relay Output 2.15,14,Basic +100,0,1,RW,MixedBits,Relay Output 2.16,15,Basic +101,1,1,RW,MixedBits,Relay Output 2.17,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.18,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.19,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.20,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.21,4,Basic +101,1,1,RW,MixedBits,Relay Output 2.22,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.23,6,Basic +101,1,1,RW,MixedBits,Relay Output 2.24,7,Basic +101,1,1,RW,MixedBits,Relay Output 2.25,8,Basic +101,1,1,RW,MixedBits,Relay Output 2.26,9,Basic +101,1,1,RW,MixedBits,Relay Output 2.27,10,Basic +101,1,1,RW,MixedBits,Relay Output 2.28,11,Basic +102,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +103,3,1,W,Word,Reserved - Do Not Use,,Reserved +104,4,1,W,Word,Reserved - Do Not Use,,Reserved +105,5,1,W,Word,Reserved - Do Not Use,,Reserved +106,6,1,W,Word,Reserved - Do Not Use,,Reserved +107,7,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.6,5,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.7,6,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.8,7,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.9,8,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.10,9,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.11,10,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.12,11,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.13,12,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.14,13,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.15,14,Advanced +107,7,1,RW,MixedBits,Synchronised DO/RO 2.16,15,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.17,0,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.18,1,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.19,2,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.20,3,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.21,4,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.22,5,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.23,6,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.24,7,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.25,8,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.26,9,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.27,10,Advanced +108,8,1,RW,MixedBits,Synchronised DO/RO 2.28,11,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.6,5,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.7,6,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.8,7,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.9,8,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.10,9,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.11,10,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.12,11,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.13,12,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.14,13,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.15,14,Advanced +109,9,1,RW,MixedBits,Synchronised DO/RO Lock 2.16,15,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.17,0,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.18,1,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.19,2,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.20,3,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.21,4,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.22,5,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.23,6,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.24,7,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.25,8,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.26,9,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.27,10,Advanced +110,10,1,RW,MixedBits,Synchronised DO/RO Lock 2.28,11,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,W,Word,Reserved - Do Not Use,,Reserved +1111,1011,1,W,Word,Reserved - Do Not Use,,Reserved +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-2.csv new file mode 100644 index 0000000..4fd8928 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Coils-group-2.csv @@ -0,0 +1,33 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +109,9,R,Digital Input 2.5,Basic +110,10,R,Digital Input 2.6,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Enable DirectSwitch on DI 2.5,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1115,1015,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1116,1016,RW,Invert DirectSwitch Polarity on DI 2.5,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1119,1019,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1120,1020,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced +1121,1021,RW,Enable DirectSwitch Toggle Mode on DI 2.5,Advanced diff --git a/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-2.csv new file mode 100644 index 0000000..e826033 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M503/Neuron_M503-Registers-group-2.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +100,0,1,R,MixedBits,Digital Input 2.5,4,Basic +100,0,1,R,MixedBits,Digital Input 2.6,5,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,2,RW,DWord,Counter of Digital Input 2.5,,Basic +126,26,2,RW,DWord,Counter of Digital Input 2.6,,Basic +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,Word,Debounce time (in 100us) for DI 2.5,,Advanced +1115,1015,1,RW,Word,Debounce time (in 100us) for DI 2.6,,Advanced +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch on DI 2.5,4,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1117,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.5,4,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1118,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.5,4,Basic +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-2.csv new file mode 100644 index 0000000..b548b32 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Coils-group-2.csv @@ -0,0 +1,28 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +100,0,RW,Relay Output 2.1,Basic +101,1,RW,Relay Output 2.2,Basic +102,2,RW,Relay Output 2.3,Basic +103,3,RW,Relay Output 2.4,Basic +104,4,RW,Relay Output 2.5,Basic +105,5,R,Digital Input 2.1,Basic +106,6,R,Digital Input 2.2,Basic +107,7,R,Digital Input 2.3,Basic +108,8,R,Digital Input 2.4,Basic +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1107,1007,RW,Enable DirectSwitch on DI 2.1,Advanced +1108,1008,RW,Enable DirectSwitch on DI 2.2,Advanced +1109,1009,RW,Enable DirectSwitch on DI 2.3,Advanced +1110,1010,RW,Enable DirectSwitch on DI 2.4,Advanced +1111,1011,RW,Invert DirectSwitch Polarity on DI 2.1,Advanced +1112,1012,RW,Invert DirectSwitch Polarity on DI 2.2,Advanced +1113,1013,RW,Invert DirectSwitch Polarity on DI 2.3,Advanced +1114,1014,RW,Invert DirectSwitch Polarity on DI 2.4,Advanced +1115,1015,RW,Enable DirectSwitch Toggle Mode on DI 2.1,Advanced +1116,1016,RW,Enable DirectSwitch Toggle Mode on DI 2.2,Advanced +1117,1017,RW,Enable DirectSwitch Toggle Mode on DI 2.3,Advanced +1118,1018,RW,Enable DirectSwitch Toggle Mode on DI 2.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-2.csv new file mode 100644 index 0000000..dcc3424 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M523/Neuron_M523-Registers-group-2.csv @@ -0,0 +1,89 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,Digital Input 2.1,0,Basic +100,0,1,R,MixedBits,Digital Input 2.2,1,Basic +100,0,1,R,MixedBits,Digital Input 2.3,2,Basic +100,0,1,R,MixedBits,Digital Input 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.1,0,Basic +101,1,1,RW,MixedBits,Relay Output 2.2,1,Basic +101,1,1,RW,MixedBits,Relay Output 2.3,2,Basic +101,1,1,RW,MixedBits,Relay Output 2.4,3,Basic +101,1,1,RW,MixedBits,Relay Output 2.5,4,Basic +102,2,1,RW,Word,Analog Output Value 2.1 (0..4000 ~ 0..10V),,Basic +103,3,1,RW,Word,Analog Output Value 2.2 (0..4000 ~ 0..10V),,Basic +104,4,1,RW,Word,Analog Output Value 2.3 (0..4000 ~ 0..10V),,Basic +105,5,1,RW,Word,Analog Output Value 2.4 (0..4000 ~ 0..10V),,Basic +106,6,2,R,Real,Analog Input Value 2.1,,Basic +108,8,2,R,Real,Analog Input Value 2.2,,Basic +110,10,2,R,Real,Analog Input Value 2.3,,Basic +112,12,2,R,Real,Analog Input Value 2.4,,Basic +114,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +115,15,1,R,Word,Length of RS485 TX Queue 2.1,,Obsolete +116,16,2,RW,DWord,Counter of Digital Input 2.1,,Basic +118,18,2,RW,DWord,Counter of Digital Input 2.2,,Basic +120,20,2,RW,DWord,Counter of Digital Input 2.3,,Basic +122,22,2,RW,DWord,Counter of Digital Input 2.4,,Basic +124,24,1,W,Word,Reserved - Do Not Use,,Reserved +125,25,1,W,Word,Reserved - Do Not Use,,Reserved +126,26,1,W,Word,Reserved - Do Not Use,,Reserved +127,27,1,W,Word,Reserved - Do Not Use,,Reserved +128,28,1,RW,MixedBits,Synchronised DO/RO 2.1,0,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.2,1,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.3,2,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.4,3,Advanced +128,28,1,RW,MixedBits,Synchronised DO/RO 2.5,4,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.1,0,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.2,1,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.3,2,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.4,3,Advanced +129,29,1,RW,MixedBits,Synchronised DO/RO Lock 2.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 2.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 2.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 2.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 2.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 2.1,,Basic +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +1110,1010,1,RW,Word,Debounce time (in 100us) for DI 2.1,,Advanced +1111,1011,1,RW,Word,Debounce time (in 100us) for DI 2.2,,Advanced +1112,1012,1,RW,Word,Debounce time (in 100us) for DI 2.3,,Advanced +1113,1013,1,RW,Word,Debounce time (in 100us) for DI 2.4,,Advanced +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.1,0,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.2,1,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.3,2,Basic +1114,1014,1,RW,MixedBits,Enable DirectSwitch on DI 2.4,3,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.1,0,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.2,1,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.3,2,Basic +1115,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 2.4,3,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.1,0,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.2,1,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.3,2,Basic +1116,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 2.4,3,Basic +1117,1017,1,W,Word,Reserved - Do Not Use,,Reserved +1118,1018,1,W,Word,Reserved - Do Not Use,,Reserved +1119,1019,1,RW,Word,Analog Input Configuration(U/I/R) 2.1,,Basic +1120,1020,1,RW,Word,Analog Input Configuration(U/I/R) 2.2,,Basic +1121,1021,1,RW,Word,Analog Input Configuration(U/I/R) 2.3,,Basic +1122,1022,1,RW,Word,Analog Input Configuration(U/I/R) 2.4,,Basic +1123,1023,1,RW,MixedBits,RS485 Configuration 2.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-1.csv b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-2.csv b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-2.csv new file mode 100644 index 0000000..225a1e3 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Coils-group-2.csv @@ -0,0 +1,7 @@ +Via Unit 0,Via Unit 2,R/W,Content,Category +1100,1000,RW,MWD reset indication,Advanced +1102,1002,R,Reset group MCU,Advanced +1103,1003,RW,Save current configuration and use on startup,Advanced +1104,1004,RW,(Internal) Firmware programming toggle,Expert +1105,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1106,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-1.csv b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-2.csv b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-2.csv new file mode 100644 index 0000000..d5be959 --- /dev/null +++ b/unipi/modbus_maps/Neuron_M603/Neuron_M603-Registers-group-2.csv @@ -0,0 +1,51 @@ +Via Unit 0,Via Unit 2,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +100,0,1,R,MixedBits,LIGHT status register,,Advanced +101,1,1,R,Word,LIGHT RX counter 2.1,,Basic +102,2,1,R,Word,LIGHT RX option field 2.1,,Basic +103,3,1,R,Word,LIGHT RX data 2.1,,Basic +104,4,1,R,Word,LIGHT RX counter 2.2,,Basic +105,5,1,R,Word,LIGHT RX option field 2.2,,Basic +106,6,1,R,Word,LIGHT RX data 2.2,,Basic +107,7,1,R,Word,LIGHT RX counter 2.3,,Basic +108,8,1,R,Word,LIGHT RX option field 2.3,,Basic +109,9,1,R,Word,LIGHT RX data 2.3,,Basic +110,10,1,R,Word,LIGHT RX counter 2.4,,Basic +111,11,1,R,Word,LIGHT RX option field 2.4,,Basic +112,12,1,R,Word,LIGHT RX data 2.4,,Basic +113,13,1,RW,Word,LIGHT TX option field 2.5,,Basic +114,14,1,RW,Word,LIGHT TX data 2.1,,Basic +115,15,1,RW,Word,LIGHT TX option field 2.6,,Basic +116,16,1,RW,Word,LIGHT TX data 2.2,,Basic +117,17,1,RW,Word,LIGHT TX option field 2.7,,Basic +118,18,1,RW,Word,LIGHT TX data 2.3,,Basic +119,19,1,RW,Word,LIGHT TX option field 2.8,,Basic +120,20,1,RW,Word,LIGHT TX data 2.4,,Basic +121,21,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 2.1,,Obsolete +600,500,1,W,Word,Reserved - Do Not Use,,Reserved +601,501,1,W,Word,Reserved - Do Not Use,,Reserved +602,502,1,W,Word,Reserved - Do Not Use,,Reserved +603,503,1,W,Word,Reserved - Do Not Use,,Reserved +604,504,1,W,Word,Reserved - Do Not Use,,Reserved +605,505,1,W,Word,Reserved - Do Not Use,,Reserved +606,506,1,W,Word,Reserved - Do Not Use,,Reserved +607,507,1,W,Word,Reserved - Do Not Use,,Reserved +608,508,1,W,Word,Reserved - Do Not Use,,Reserved +609,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1100,1000,1,R,Word,Firmware Version,,Expert +1101,1001,1,R,Word,Number of I/Os,,Advanced +1102,1002,1,R,Word,Number of peripherals,,Advanced +1103,1003,1,R,Word,Firmware ID,,Expert +1104,1004,1,R,Word,Hardware ID,,Expert +1105,1005,2,R,DWord,PCB Serial Number,,Expert +1107,1007,1,RW,Word,Interrupt Mask,,Expert +1108,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1109,1009,1,R,Word,VRef of MCU,,Expert +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_S103/Neuron_S103-Coils-group-1.csv b/unipi/modbus_maps/Neuron_S103/Neuron_S103-Coils-group-1.csv new file mode 100644 index 0000000..352eaa6 --- /dev/null +++ b/unipi/modbus_maps/Neuron_S103/Neuron_S103-Coils-group-1.csv @@ -0,0 +1,32 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Digital Output 1.1,Basic +1,1,RW,Digital Output 1.2,Basic +2,2,RW,Digital Output 1.3,Basic +3,3,RW,Digital Output 1.4,Basic +4,4,R,Digital Input 1.1,Basic +5,5,R,Digital Input 1.2,Basic +6,6,R,Digital Input 1.3,Basic +7,7,R,Digital Input 1.4,Basic +8,8,RW,User Programmable LED 1.1,Basic +9,9,RW,User Programmable LED 1.2,Basic +10,10,RW,User Programmable LED 1.3,Basic +11,11,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1001,1001,RW,Enable/Disable 1Wire Bus,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1015,1015,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1016,1016,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced diff --git a/unipi/modbus_maps/Neuron_S103/Neuron_S103-Registers-group-1.csv b/unipi/modbus_maps/Neuron_S103/Neuron_S103-Registers-group-1.csv new file mode 100644 index 0000000..6db3e81 --- /dev/null +++ b/unipi/modbus_maps/Neuron_S103/Neuron_S103-Registers-group-1.csv @@ -0,0 +1,97 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +1,1,1,RW,MixedBits,Digital Output 1.1,0,Basic +1,1,1,RW,MixedBits,Digital Output 1.2,1,Basic +1,1,1,RW,MixedBits,Digital Output 1.3,2,Basic +1,1,1,RW,MixedBits,Digital Output 1.4,3,Basic +2,2,1,RW,Word,Analog Output (raw value) 1.1,,Obsolete +3,3,1,R,Word,Analog Input (raw value) 1.1,,Obsolete +4,4,1,R,Word,Analog Input/Output (raw value) 1.1,,Obsolete +5,5,1,R,Word,VRefInt of MCU,,Expert +6,6,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +7,7,1,R,Word,Length of RS485 TX Queue 1.1,,Obsolete +8,8,2,RW,DWord,Counter of Digital Input 1.1,,Basic +10,10,2,RW,DWord,Counter of Digital Input 1.2,,Basic +12,12,2,RW,DWord,Counter of Digital Input 1.3,,Basic +14,14,2,RW,DWord,Counter of Digital Input 1.4,,Basic +16,16,1,RW,Word,PWM Duty Cycle of DO 1.1,,Basic +17,17,1,RW,Word,PWM Duty Cycle of DO 1.2,,Basic +18,18,1,RW,Word,PWM Duty Cycle of DO 1.3,,Basic +19,19,1,RW,Word,PWM Duty Cycle of DO 1.4,,Basic +20,20,1,RW,MixedBits,User LED 1.1,0,Basic +20,20,1,RW,MixedBits,User LED 1.2,1,Basic +20,20,1,RW,MixedBits,User LED 1.3,2,Basic +20,20,1,RW,MixedBits,User LED 1.4,3,Basic +21,21,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +21,21,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +22,22,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1014,1014,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1015,1015,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1017,1017,1,RW,Word,PWM Group prescaler,,Basic +1018,1018,1,RW,Word,PWM Group cycle length,,Basic +1019,1019,1,RW,Word,Analog Output Configuration(U/I/R-measure) 1.1,,Basic +1020,1020,1,RW,Word,Analog Output Voltage deviation 1.1,,Expert +1021,1021,1,RW,Word,Analog Output Voltage offset 1.1,,Expert +1022,1022,1,RW,Word,Analog Output Current deviation 1.1,,Expert +1023,1023,1,RW,Word,Analog Output Current offset 1.1,,Expert +1024,1024,1,RW,Word,Analog Input Configuration(U/I) 1.1,,Basic +1025,1025,1,RW,Word,Analog Input Voltage deviation 1.1,,Expert +1026,1026,1,RW,Word,Analog Input Voltage offset 1.1,,Expert +1027,1027,1,RW,Word,Analog Input Current deviation 1.1,,Expert +1028,1028,1,RW,Word,Analog Input Current offset 1.1,,Expert +1029,1029,1,RW,Word,Analog Input/Output Voltage deviation (input side) 1.1,,Expert +1030,1030,1,RW,Word,Analog Input/Output Voltage offset (input side) 1.1,,Expert +1031,1031,1,RW,MixedBits,RS485 Configuration 1.1,,Obsolete +,2000,220,W,Word,Reserved - Do Not Use,,Reserved +3000,3000,2,RW,Real,Analog Output value 1.1,,Basic +3002,3002,2,R,Real,Analog Input value 1.1,,Basic +3004,3004,2,R,Real,(Internal) Analog Output measured voltage value 1.1,,Expert diff --git a/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Coils-group-1.csv b/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Coils-group-1.csv new file mode 100644 index 0000000..cb409c4 --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Coils-group-1.csv @@ -0,0 +1,59 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Relay Output 1.1,Basic +1,1,RW,Relay Output 1.2,Basic +2,2,RW,Relay Output 1.3,Basic +3,3,RW,Relay Output 1.4,Basic +4,4,RW,Relay Output 1.5,Basic +5,5,RW,Relay Output 1.6,Basic +6,6,RW,Relay Output 1.7,Basic +7,7,RW,Relay Output 1.8,Basic +8,8,R,Digital Input 1.1,Basic +9,9,R,Digital Input 1.2,Basic +10,10,R,Digital Input 1.3,Basic +11,11,R,Digital Input 1.4,Basic +12,12,R,Digital Input 1.5,Basic +13,13,R,Digital Input 1.6,Basic +14,14,R,Digital Input 1.7,Basic +15,15,R,Digital Input 1.8,Basic +16,16,R,Digital Input 1.9,Basic +17,17,R,Digital Input 1.10,Basic +18,18,R,Digital Input 1.11,Basic +19,19,R,Digital Input 1.12,Basic +20,20,R,Digital Input 1.13,Basic +21,21,R,Digital Input 1.14,Basic +22,22,R,Digital Input 1.15,Basic +23,23,R,Digital Input 1.16,Basic +24,24,RW,User Programmable LED 1.1,Basic +25,25,RW,User Programmable LED 1.2,Basic +26,26,RW,User Programmable LED 1.3,Basic +27,27,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Enable DirectSwitch on DI 1.5,Advanced +1012,1012,RW,Enable DirectSwitch on DI 1.6,Advanced +1013,1013,RW,Enable DirectSwitch on DI 1.7,Advanced +1014,1014,RW,Enable DirectSwitch on DI 1.8,Advanced +1015,1015,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1016,1016,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1017,1017,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1018,1018,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1019,1019,RW,Invert DirectSwitch Polarity on DI 1.5,Advanced +1020,1020,RW,Invert DirectSwitch Polarity on DI 1.6,Advanced +1021,1021,RW,Invert DirectSwitch Polarity on DI 1.7,Advanced +1022,1022,RW,Invert DirectSwitch Polarity on DI 1.8,Advanced +1023,1023,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1024,1024,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1025,1025,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1026,1026,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced +1027,1027,RW,Enable DirectSwitch Toggle Mode on DI 1.5,Advanced +1028,1028,RW,Enable DirectSwitch Toggle Mode on DI 1.6,Advanced +1029,1029,RW,Enable DirectSwitch Toggle Mode on DI 1.7,Advanced +1030,1030,RW,Enable DirectSwitch Toggle Mode on DI 1.8,Advanced diff --git a/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Registers-group-1.csv b/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Registers-group-1.csv new file mode 100644 index 0000000..bd65cae --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS10/Neuron_xS10-Registers-group-1.csv @@ -0,0 +1,138 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +0,0,1,R,MixedBits,Digital Input 1.5,4,Basic +0,0,1,R,MixedBits,Digital Input 1.6,5,Basic +0,0,1,R,MixedBits,Digital Input 1.7,6,Basic +0,0,1,R,MixedBits,Digital Input 1.8,7,Basic +0,0,1,R,MixedBits,Digital Input 1.9,8,Basic +0,0,1,R,MixedBits,Digital Input 1.10,9,Basic +0,0,1,R,MixedBits,Digital Input 1.11,10,Basic +0,0,1,R,MixedBits,Digital Input 1.12,11,Basic +0,0,1,R,MixedBits,Digital Input 1.13,12,Basic +0,0,1,R,MixedBits,Digital Input 1.14,13,Basic +0,0,1,R,MixedBits,Digital Input 1.15,14,Basic +0,0,1,R,MixedBits,Digital Input 1.16,15,Basic +1,1,1,RW,MixedBits,Relay Output 1.1,0,Basic +1,1,1,RW,MixedBits,Relay Output 1.2,1,Basic +1,1,1,RW,MixedBits,Relay Output 1.3,2,Basic +1,1,1,RW,MixedBits,Relay Output 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.5,4,Basic +1,1,1,RW,MixedBits,Relay Output 1.6,5,Basic +1,1,1,RW,MixedBits,Relay Output 1.7,6,Basic +1,1,1,RW,MixedBits,Relay Output 1.8,7,Basic +2,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +3,3,2,RW,DWord,Counter of Digital Input 1.1,,Basic +5,5,2,RW,DWord,Counter of Digital Input 1.2,,Basic +7,7,2,RW,DWord,Counter of Digital Input 1.3,,Basic +9,9,2,RW,DWord,Counter of Digital Input 1.4,,Basic +11,11,2,RW,DWord,Counter of Digital Input 1.5,,Basic +13,13,2,RW,DWord,Counter of Digital Input 1.6,,Basic +15,15,2,RW,DWord,Counter of Digital Input 1.7,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.8,,Basic +19,19,2,RW,DWord,Counter of Digital Input 1.9,,Basic +21,21,2,RW,DWord,Counter of Digital Input 1.10,,Basic +23,23,2,RW,DWord,Counter of Digital Input 1.11,,Basic +25,25,2,RW,DWord,Counter of Digital Input 1.12,,Basic +27,27,2,RW,DWord,Counter of Digital Input 1.13,,Basic +29,29,2,RW,DWord,Counter of Digital Input 1.14,,Basic +31,31,2,RW,DWord,Counter of Digital Input 1.15,,Basic +33,33,2,RW,DWord,Counter of Digital Input 1.16,,Basic +35,35,1,W,Word,Reserved - Do Not Use,,Reserved +36,36,1,W,Word,Reserved - Do Not Use,,Reserved +37,37,1,W,Word,Reserved - Do Not Use,,Reserved +38,38,1,W,Word,Reserved - Do Not Use,,Reserved +39,39,1,RW,MixedBits,User LED 1.1,0,Basic +39,39,1,RW,MixedBits,User LED 1.2,1,Basic +39,39,1,RW,MixedBits,User LED 1.3,2,Basic +39,39,1,RW,MixedBits,User LED 1.4,3,Basic +40,40,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.5,4,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.6,5,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.7,6,Advanced +40,40,1,RW,MixedBits,Synchronised DO/RO 1.8,7,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.5,4,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.6,5,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.7,6,Advanced +41,41,1,RW,MixedBits,Synchronised DO/RO Lock 1.8,7,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,Word,Debounce time (in 100us) for DI 1.5,,Advanced +1015,1015,1,RW,Word,Debounce time (in 100us) for DI 1.6,,Advanced +1016,1016,1,RW,Word,Debounce time (in 100us) for DI 1.7,,Advanced +1017,1017,1,RW,Word,Debounce time (in 100us) for DI 1.8,,Advanced +1018,1018,1,RW,Word,Debounce time (in 100us) for DI 1.9,,Advanced +1019,1019,1,RW,Word,Debounce time (in 100us) for DI 1.10,,Advanced +1020,1020,1,RW,Word,Debounce time (in 100us) for DI 1.11,,Advanced +1021,1021,1,RW,Word,Debounce time (in 100us) for DI 1.12,,Advanced +1022,1022,1,RW,Word,Debounce time (in 100us) for DI 1.13,,Advanced +1023,1023,1,RW,Word,Debounce time (in 100us) for DI 1.14,,Advanced +1024,1024,1,RW,Word,Debounce time (in 100us) for DI 1.15,,Advanced +1025,1025,1,RW,Word,Debounce time (in 100us) for DI 1.16,,Advanced +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.5,4,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.6,5,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.7,6,Basic +1026,1026,1,RW,MixedBits,Enable DirectSwitch on DI 1.8,7,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.5,4,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.6,5,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.7,6,Basic +1027,1027,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.8,7,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.5,4,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.6,5,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.7,6,Basic +1028,1028,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.8,7,Basic +1029,1029,1,W,Word,Reserved - Do Not Use,,Reserved +1030,1030,1,W,Word,Reserved - Do Not Use,,Reserved +1031,1031,1,RW,MixedBits,RS485 Configuration,,Basic +1032,1032,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Coils-group-1.csv b/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Coils-group-1.csv new file mode 100644 index 0000000..14f4d4b --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Coils-group-1.csv @@ -0,0 +1,35 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,R,Digital Input 1.1,Basic +1,1,R,Digital Input 1.2,Basic +2,2,R,Digital Input 1.3,Basic +3,3,R,Digital Input 1.4,Basic +4,4,R,Digital Input 1.5,Basic +5,5,R,Digital Input 1.6,Basic +6,6,R,Digital Input 1.7,Basic +7,7,R,Digital Input 1.8,Basic +8,8,R,Digital Input 1.9,Basic +9,9,R,Digital Input 1.10,Basic +10,10,R,Digital Input 1.11,Basic +11,11,R,Digital Input 1.12,Basic +12,12,R,Digital Input 1.13,Basic +13,13,R,Digital Input 1.14,Basic +14,14,R,Digital Input 1.15,Basic +15,15,R,Digital Input 1.16,Basic +16,16,R,Digital Input 1.17,Basic +17,17,R,Digital Input 1.18,Basic +18,18,R,Digital Input 1.19,Basic +19,19,R,Digital Input 1.20,Basic +20,20,R,Digital Input 1.21,Basic +21,21,R,Digital Input 1.22,Basic +22,22,R,Digital Input 1.23,Basic +23,23,R,Digital Input 1.24,Basic +24,24,RW,User Programmable LED 1.1,Basic +25,25,RW,User Programmable LED 1.2,Basic +26,26,RW,User Programmable LED 1.3,Basic +27,27,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert diff --git a/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Registers-group-1.csv b/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Registers-group-1.csv new file mode 100644 index 0000000..caa9835 --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS30/Neuron_xS30-Registers-group-1.csv @@ -0,0 +1,108 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +0,0,1,R,MixedBits,Digital Input 1.5,4,Basic +0,0,1,R,MixedBits,Digital Input 1.6,5,Basic +0,0,1,R,MixedBits,Digital Input 1.7,6,Basic +0,0,1,R,MixedBits,Digital Input 1.8,7,Basic +0,0,1,R,MixedBits,Digital Input 1.9,8,Basic +0,0,1,R,MixedBits,Digital Input 1.10,9,Basic +0,0,1,R,MixedBits,Digital Input 1.11,10,Basic +0,0,1,R,MixedBits,Digital Input 1.12,11,Basic +0,0,1,R,MixedBits,Digital Input 1.13,12,Basic +0,0,1,R,MixedBits,Digital Input 1.14,13,Basic +0,0,1,R,MixedBits,Digital Input 1.15,14,Basic +0,0,1,R,MixedBits,Digital Input 1.16,15,Basic +1,1,1,R,MixedBits,Digital Input 1.17,0,Basic +1,1,1,R,MixedBits,Digital Input 1.18,1,Basic +1,1,1,R,MixedBits,Digital Input 1.19,2,Basic +1,1,1,R,MixedBits,Digital Input 1.20,3,Basic +1,1,1,R,MixedBits,Digital Input 1.21,4,Basic +1,1,1,R,MixedBits,Digital Input 1.22,5,Basic +1,1,1,R,MixedBits,Digital Input 1.23,6,Basic +1,1,1,R,MixedBits,Digital Input 1.24,7,Basic +2,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +3,3,2,RW,DWord,Counter of Digital Input 1.1,,Basic +5,5,2,RW,DWord,Counter of Digital Input 1.2,,Basic +7,7,2,RW,DWord,Counter of Digital Input 1.3,,Basic +9,9,2,RW,DWord,Counter of Digital Input 1.4,,Basic +11,11,2,RW,DWord,Counter of Digital Input 1.5,,Basic +13,13,2,RW,DWord,Counter of Digital Input 1.6,,Basic +15,15,2,RW,DWord,Counter of Digital Input 1.7,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.8,,Basic +19,19,2,RW,DWord,Counter of Digital Input 1.9,,Basic +21,21,2,RW,DWord,Counter of Digital Input 1.10,,Basic +23,23,2,RW,DWord,Counter of Digital Input 1.11,,Basic +25,25,2,RW,DWord,Counter of Digital Input 1.12,,Basic +27,27,2,RW,DWord,Counter of Digital Input 1.13,,Basic +29,29,2,RW,DWord,Counter of Digital Input 1.14,,Basic +31,31,2,RW,DWord,Counter of Digital Input 1.15,,Basic +33,33,2,RW,DWord,Counter of Digital Input 1.16,,Basic +35,35,2,RW,DWord,Counter of Digital Input 1.17,,Basic +37,37,2,RW,DWord,Counter of Digital Input 1.18,,Basic +39,39,2,RW,DWord,Counter of Digital Input 1.19,,Basic +41,41,2,RW,DWord,Counter of Digital Input 1.20,,Basic +43,43,2,RW,DWord,Counter of Digital Input 1.21,,Basic +45,45,2,RW,DWord,Counter of Digital Input 1.22,,Basic +47,47,2,RW,DWord,Counter of Digital Input 1.23,,Basic +49,49,2,RW,DWord,Counter of Digital Input 1.24,,Basic +51,51,1,RW,MixedBits,User LED 1.1,0,Basic +51,51,1,RW,MixedBits,User LED 1.2,1,Basic +51,51,1,RW,MixedBits,User LED 1.3,2,Basic +51,51,1,RW,MixedBits,User LED 1.4,3,Basic +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,Word,Debounce time (in 100us) for DI 1.5,,Advanced +1015,1015,1,RW,Word,Debounce time (in 100us) for DI 1.6,,Advanced +1016,1016,1,RW,Word,Debounce time (in 100us) for DI 1.7,,Advanced +1017,1017,1,RW,Word,Debounce time (in 100us) for DI 1.8,,Advanced +1018,1018,1,RW,Word,Debounce time (in 100us) for DI 1.9,,Advanced +1019,1019,1,RW,Word,Debounce time (in 100us) for DI 1.10,,Advanced +1020,1020,1,RW,Word,Debounce time (in 100us) for DI 1.11,,Advanced +1021,1021,1,RW,Word,Debounce time (in 100us) for DI 1.12,,Advanced +1022,1022,1,RW,Word,Debounce time (in 100us) for DI 1.13,,Advanced +1023,1023,1,RW,Word,Debounce time (in 100us) for DI 1.14,,Advanced +1024,1024,1,RW,Word,Debounce time (in 100us) for DI 1.15,,Advanced +1025,1025,1,RW,Word,Debounce time (in 100us) for DI 1.16,,Advanced +1026,1026,1,RW,Word,Debounce time (in 100us) for DI 1.17,,Advanced +1027,1027,1,RW,Word,Debounce time (in 100us) for DI 1.18,,Advanced +1028,1028,1,RW,Word,Debounce time (in 100us) for DI 1.19,,Advanced +1029,1029,1,RW,Word,Debounce time (in 100us) for DI 1.20,,Advanced +1030,1030,1,RW,Word,Debounce time (in 100us) for DI 1.21,,Advanced +1031,1031,1,RW,Word,Debounce time (in 100us) for DI 1.22,,Advanced +1032,1032,1,RW,Word,Debounce time (in 100us) for DI 1.23,,Advanced +1033,1033,1,RW,Word,Debounce time (in 100us) for DI 1.24,,Advanced +1034,1034,1,RW,MixedBits,RS485 Configuration,,Basic +1035,1035,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Coils-group-1.csv b/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Coils-group-1.csv new file mode 100644 index 0000000..3ea8842 --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Coils-group-1.csv @@ -0,0 +1,57 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Relay Output 1.1,Basic +1,1,RW,Relay Output 1.2,Basic +2,2,RW,Relay Output 1.3,Basic +3,3,RW,Relay Output 1.4,Basic +4,4,RW,Relay Output 1.5,Basic +5,5,RW,Relay Output 1.6,Basic +6,6,RW,Relay Output 1.7,Basic +7,7,RW,Relay Output 1.8,Basic +8,8,RW,Relay Output 1.9,Basic +9,9,RW,Relay Output 1.10,Basic +10,10,RW,Relay Output 1.11,Basic +11,11,RW,Relay Output 1.12,Basic +12,12,RW,Relay Output 1.13,Basic +13,13,RW,Relay Output 1.14,Basic +14,14,R,Digital Input 1.1,Basic +15,15,R,Digital Input 1.2,Basic +16,16,R,Digital Input 1.3,Basic +17,17,R,Digital Input 1.4,Basic +18,18,R,Digital Input 1.5,Basic +19,19,R,Digital Input 1.6,Basic +20,20,R,Digital Input 1.7,Basic +21,21,R,Digital Input 1.8,Basic +22,22,RW,User Programmable LED 1.1,Basic +23,23,RW,User Programmable LED 1.2,Basic +24,24,RW,User Programmable LED 1.3,Basic +25,25,RW,User Programmable LED 1.4,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Enable DirectSwitch on DI 1.5,Advanced +1012,1012,RW,Enable DirectSwitch on DI 1.6,Advanced +1013,1013,RW,Enable DirectSwitch on DI 1.7,Advanced +1014,1014,RW,Enable DirectSwitch on DI 1.8,Advanced +1015,1015,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1016,1016,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1017,1017,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1018,1018,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1019,1019,RW,Invert DirectSwitch Polarity on DI 1.5,Advanced +1020,1020,RW,Invert DirectSwitch Polarity on DI 1.6,Advanced +1021,1021,RW,Invert DirectSwitch Polarity on DI 1.7,Advanced +1022,1022,RW,Invert DirectSwitch Polarity on DI 1.8,Advanced +1023,1023,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1024,1024,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1025,1025,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1026,1026,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced +1027,1027,RW,Enable DirectSwitch Toggle Mode on DI 1.5,Advanced +1028,1028,RW,Enable DirectSwitch Toggle Mode on DI 1.6,Advanced +1029,1029,RW,Enable DirectSwitch Toggle Mode on DI 1.7,Advanced +1030,1030,RW,Enable DirectSwitch Toggle Mode on DI 1.8,Advanced diff --git a/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Registers-group-1.csv b/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Registers-group-1.csv new file mode 100644 index 0000000..9cf2470 --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS40/Neuron_xS40-Registers-group-1.csv @@ -0,0 +1,132 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +0,0,1,R,MixedBits,Digital Input 1.5,4,Basic +0,0,1,R,MixedBits,Digital Input 1.6,5,Basic +0,0,1,R,MixedBits,Digital Input 1.7,6,Basic +0,0,1,R,MixedBits,Digital Input 1.8,7,Basic +1,1,1,RW,MixedBits,Relay Output 1.1,0,Basic +1,1,1,RW,MixedBits,Relay Output 1.2,1,Basic +1,1,1,RW,MixedBits,Relay Output 1.3,2,Basic +1,1,1,RW,MixedBits,Relay Output 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.5,4,Basic +1,1,1,RW,MixedBits,Relay Output 1.6,5,Basic +1,1,1,RW,MixedBits,Relay Output 1.7,6,Basic +1,1,1,RW,MixedBits,Relay Output 1.8,7,Basic +1,1,1,RW,MixedBits,Relay Output 1.9,8,Basic +1,1,1,RW,MixedBits,Relay Output 1.10,9,Basic +1,1,1,RW,MixedBits,Relay Output 1.11,10,Basic +1,1,1,RW,MixedBits,Relay Output 1.12,11,Basic +1,1,1,RW,MixedBits,Relay Output 1.13,12,Basic +1,1,1,RW,MixedBits,Relay Output 1.14,13,Basic +2,2,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +3,3,2,RW,DWord,Counter of Digital Input 1.1,,Basic +5,5,2,RW,DWord,Counter of Digital Input 1.2,,Basic +7,7,2,RW,DWord,Counter of Digital Input 1.3,,Basic +9,9,2,RW,DWord,Counter of Digital Input 1.4,,Basic +11,11,2,RW,DWord,Counter of Digital Input 1.5,,Basic +13,13,2,RW,DWord,Counter of Digital Input 1.6,,Basic +15,15,2,RW,DWord,Counter of Digital Input 1.7,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.8,,Basic +19,19,1,W,Word,Reserved - Do Not Use,,Reserved +20,20,1,W,Word,Reserved - Do Not Use,,Reserved +21,21,1,W,Word,Reserved - Do Not Use,,Reserved +22,22,1,W,Word,Reserved - Do Not Use,,Reserved +23,23,1,RW,MixedBits,User LED 1.1,0,Basic +23,23,1,RW,MixedBits,User LED 1.2,1,Basic +23,23,1,RW,MixedBits,User LED 1.3,2,Basic +23,23,1,RW,MixedBits,User LED 1.4,3,Basic +24,24,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.5,4,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.6,5,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.7,6,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.8,7,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.9,8,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.10,9,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.11,10,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.12,11,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.13,12,Advanced +24,24,1,RW,MixedBits,Synchronised DO/RO 1.14,13,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.5,4,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.6,5,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.7,6,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.8,7,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.9,8,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.10,9,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.11,10,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.12,11,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.13,12,Advanced +25,25,1,RW,MixedBits,Synchronised DO/RO Lock 1.14,13,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,Word,Debounce time (in 100us) for DI 1.5,,Advanced +1015,1015,1,RW,Word,Debounce time (in 100us) for DI 1.6,,Advanced +1016,1016,1,RW,Word,Debounce time (in 100us) for DI 1.7,,Advanced +1017,1017,1,RW,Word,Debounce time (in 100us) for DI 1.8,,Advanced +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.5,4,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.6,5,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.7,6,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch on DI 1.8,7,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.5,4,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.6,5,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.7,6,Basic +1019,1019,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.8,7,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.5,4,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.6,5,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.7,6,Basic +1020,1020,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.8,7,Basic +1021,1021,1,W,Word,Reserved - Do Not Use,,Reserved +1022,1022,1,W,Word,Reserved - Do Not Use,,Reserved +1023,1023,1,RW,MixedBits,RS485 Configuration,,Basic +1024,1024,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Coils-group-1.csv b/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Coils-group-1.csv new file mode 100644 index 0000000..89177df --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Coils-group-1.csv @@ -0,0 +1,33 @@ +Via Unit 0,Via Unit 1,R/W,Content,Category +0,0,RW,Relay Output 1.1,Basic +1,1,RW,Relay Output 1.2,Basic +2,2,RW,Relay Output 1.3,Basic +3,3,RW,Relay Output 1.4,Basic +4,4,RW,Relay Output 1.5,Basic +5,5,R,Digital Input 1.1,Basic +6,6,R,Digital Input 1.2,Basic +7,7,R,Digital Input 1.3,Basic +8,8,R,Digital Input 1.4,Basic +9,9,R,Digital Input 1.5,Basic +10,10,R,Digital Input 1.6,Basic +1000,1000,RW,MWD reset indication,Advanced +1002,1002,R,Reset group MCU,Advanced +1003,1003,RW,Save current configuration and use on startup,Advanced +1004,1004,RW,(Internal) Firmware programming toggle,Expert +1005,1005,RW,(Internal) Firmware reprogramming toggle,Expert +1006,1006,RW,(Internal) Firmware calibration programming toggle,Expert +1007,1007,RW,Enable DirectSwitch on DI 1.1,Advanced +1008,1008,RW,Enable DirectSwitch on DI 1.2,Advanced +1009,1009,RW,Enable DirectSwitch on DI 1.3,Advanced +1010,1010,RW,Enable DirectSwitch on DI 1.4,Advanced +1011,1011,RW,Enable DirectSwitch on DI 1.5,Advanced +1012,1012,RW,Invert DirectSwitch Polarity on DI 1.1,Advanced +1013,1013,RW,Invert DirectSwitch Polarity on DI 1.2,Advanced +1014,1014,RW,Invert DirectSwitch Polarity on DI 1.3,Advanced +1015,1015,RW,Invert DirectSwitch Polarity on DI 1.4,Advanced +1016,1016,RW,Invert DirectSwitch Polarity on DI 1.5,Advanced +1017,1017,RW,Enable DirectSwitch Toggle Mode on DI 1.1,Advanced +1018,1018,RW,Enable DirectSwitch Toggle Mode on DI 1.2,Advanced +1019,1019,RW,Enable DirectSwitch Toggle Mode on DI 1.3,Advanced +1020,1020,RW,Enable DirectSwitch Toggle Mode on DI 1.4,Advanced +1021,1021,RW,Enable DirectSwitch Toggle Mode on DI 1.5,Advanced diff --git a/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Registers-group-1.csv b/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Registers-group-1.csv new file mode 100644 index 0000000..cda0655 --- /dev/null +++ b/unipi/modbus_maps/Neuron_xS50/Neuron_xS50-Registers-group-1.csv @@ -0,0 +1,92 @@ +Via Unit 0,Via Unit 1,Register Count,R/W,Data Type,Content,Start Bit Nr.,Category +0,0,1,R,MixedBits,Digital Input 1.1,0,Basic +0,0,1,R,MixedBits,Digital Input 1.2,1,Basic +0,0,1,R,MixedBits,Digital Input 1.3,2,Basic +0,0,1,R,MixedBits,Digital Input 1.4,3,Basic +0,0,1,R,MixedBits,Digital Input 1.5,4,Basic +0,0,1,R,MixedBits,Digital Input 1.6,5,Basic +1,1,1,RW,MixedBits,Relay Output 1.1,0,Basic +1,1,1,RW,MixedBits,Relay Output 1.2,1,Basic +1,1,1,RW,MixedBits,Relay Output 1.3,2,Basic +1,1,1,RW,MixedBits,Relay Output 1.4,3,Basic +1,1,1,RW,MixedBits,Relay Output 1.5,4,Basic +2,2,1,RW,Word,Analog Output Value 1.1 (0..4000 ~ 0..10V),,Basic +3,3,1,RW,Word,Analog Output Value 1.2 (0..4000 ~ 0..10V),,Basic +4,4,1,RW,Word,Analog Output Value 1.3 (0..4000 ~ 0..10V),,Basic +5,5,1,RW,Word,Analog Output Value 1.4 (0..4000 ~ 0..10V),,Basic +6,6,2,R,Real,Analog Input Value 1.1,,Basic +8,8,2,R,Real,Analog Input Value 1.2,,Basic +10,10,2,R,Real,Analog Input Value 1.3,,Basic +12,12,2,R,Real,Analog Input Value 1.4,,Basic +14,14,1,RW,MixedBits,Group MasterWatchDog (MWD) Status,,Advanced +15,15,2,RW,DWord,Counter of Digital Input 1.1,,Basic +17,17,2,RW,DWord,Counter of Digital Input 1.2,,Basic +19,19,2,RW,DWord,Counter of Digital Input 1.3,,Basic +21,21,2,RW,DWord,Counter of Digital Input 1.4,,Basic +23,23,2,RW,DWord,Counter of Digital Input 1.5,,Basic +25,25,2,RW,DWord,Counter of Digital Input 1.6,,Basic +27,27,1,RW,MixedBits,Synchronised DO/RO 1.1,0,Advanced +27,27,1,RW,MixedBits,Synchronised DO/RO 1.2,1,Advanced +27,27,1,RW,MixedBits,Synchronised DO/RO 1.3,2,Advanced +27,27,1,RW,MixedBits,Synchronised DO/RO 1.4,3,Advanced +27,27,1,RW,MixedBits,Synchronised DO/RO 1.5,4,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO Lock 1.1,0,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO Lock 1.2,1,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO Lock 1.3,2,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO Lock 1.4,3,Advanced +28,28,1,RW,MixedBits,Synchronised DO/RO Lock 1.5,4,Advanced +,100,2,RW,DWord,(Internal) RS485 Full Mode Configuration 1.1,,Obsolete +,500,1,RW,Word,RS485 TERMIOS CFlags 1.1,,Expert +,501,1,RW,Word,RS485 TERMIOS LFlags 1.1,,Expert +,502,1,RW,Word,RS485 TERMIOS IFlags 1.1,,Expert +,503,1,RW,Word,RS485 TERMIOS LDisc 1.1,,Expert +,504,1,RW,Word,RS485 ModBus Timeout 1.1,,Basic +505,505,1,W,Word,Reserved - Do Not Use,,Reserved +506,506,1,W,Word,Reserved - Do Not Use,,Reserved +507,507,1,W,Word,Reserved - Do Not Use,,Reserved +508,508,1,W,Word,Reserved - Do Not Use,,Reserved +509,509,1,W,Word,Reserved - Do Not Use,,Reserved +,510,1,RW,Word,(Internal) Stored Firmware Version,,Expert +,511,1,RW,Word,(Internal) Stored Firmware Revision,,Expert +,512,1,RW,Word,(Internal) Stored Base Firmware Revision,,Expert +,513,1,RW,Word,(Internal) Stored Expanded Flash Magic Value,,Expert +,514,1,RW,Word,(Internal) Stored PCB Revision,,Expert +,515,1,RW,Word,(Internal) Stored PCB Serial Number,,Expert +,516,1,RW,Word,(Internal) Stored HW Revision Number,,Expert +1000,1000,1,R,Word,Firmware Version,,Expert +1001,1001,1,R,Word,Number of I/Os,,Advanced +1002,1002,1,R,Word,Number of peripherals,,Advanced +1003,1003,1,R,Word,Firmware ID,,Expert +1004,1004,1,R,Word,Hardware ID,,Expert +1005,1005,2,R,DWord,PCB Serial Number,,Expert +1007,1007,1,RW,Word,Interrupt Mask,,Expert +1008,1008,1,RW,Word,Group MasterWatchDog (MWD) Timeout (in 1ms),,Advanced +1009,1009,1,R,Word,VRef of MCU,,Expert +1010,1010,1,RW,Word,Debounce time (in 100us) for DI 1.1,,Advanced +1011,1011,1,RW,Word,Debounce time (in 100us) for DI 1.2,,Advanced +1012,1012,1,RW,Word,Debounce time (in 100us) for DI 1.3,,Advanced +1013,1013,1,RW,Word,Debounce time (in 100us) for DI 1.4,,Advanced +1014,1014,1,RW,Word,Debounce time (in 100us) for DI 1.5,,Advanced +1015,1015,1,RW,Word,Debounce time (in 100us) for DI 1.6,,Advanced +1016,1016,1,RW,MixedBits,Enable DirectSwitch on DI 1.1,0,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch on DI 1.2,1,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch on DI 1.3,2,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch on DI 1.4,3,Basic +1016,1016,1,RW,MixedBits,Enable DirectSwitch on DI 1.5,4,Basic +1017,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.1,0,Basic +1017,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.2,1,Basic +1017,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.3,2,Basic +1017,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.4,3,Basic +1017,1017,1,RW,MixedBits,Invert DirectSwitch Polarity on DI 1.5,4,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.1,0,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.2,1,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.3,2,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.4,3,Basic +1018,1018,1,RW,MixedBits,Enable DirectSwitch Toggle on DI 1.5,4,Basic +1019,1019,1,RW,Word,Analog Input Configuration(U/I/R) 1.1,,Basic +1020,1020,1,RW,Word,Analog Input Configuration(U/I/R) 1.2,,Basic +1021,1021,1,RW,Word,Analog Input Configuration(U/I/R) 1.3,,Basic +1022,1022,1,RW,Word,Analog Input Configuration(U/I/R) 1.4,,Basic +1023,1023,1,RW,MixedBits,RS485 Configuration,,Basic +1024,1024,1,RW,MixedBits,Modbus Address Configuration (1-254),,Basic +,2000,220,W,Word,Reserved - Do Not Use,,Reserved diff --git a/unipi/neuron.cpp b/unipi/neuron.cpp new file mode 100644 index 0000000..cca214d --- /dev/null +++ b/unipi/neuron.cpp @@ -0,0 +1,854 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "neuron.h" +#include "extern-plugininfo.h" + +#include +#include +#include + +Neuron::Neuron(NeuronTypes neuronType, QModbusTcpClient *modbusInterface, QObject *parent) : + QObject(parent), + m_modbusInterface(modbusInterface), + m_neuronType(neuronType) +{ + m_inputPollingTimer = new QTimer(this); + connect(m_inputPollingTimer, &QTimer::timeout, this, &Neuron::onInputPollingTimer); + m_inputPollingTimer->setTimerType(Qt::TimerType::PreciseTimer); + m_inputPollingTimer->setInterval(200); + + m_outputPollingTimer = new QTimer(this); + connect(m_outputPollingTimer, &QTimer::timeout, this, &Neuron::onOutputPollingTimer); + m_outputPollingTimer->setTimerType(Qt::TimerType::PreciseTimer); + m_outputPollingTimer->setInterval(1000); + + if (m_modbusInterface->state() == QModbusDevice::State::ConnectedState) { + m_inputPollingTimer->start(); + m_outputPollingTimer->start(); + } + + connect(m_modbusInterface, &QModbusDevice::stateChanged, this, [this] (QModbusDevice::State state) { + if (state == QModbusDevice::State::ConnectedState) { + if (m_inputPollingTimer) + m_inputPollingTimer->start(); + if (m_outputPollingTimer) + m_outputPollingTimer->start(); + emit connectionStateChanged(true); + } else { + if (m_inputPollingTimer) + m_inputPollingTimer->stop(); + if (m_outputPollingTimer) + m_outputPollingTimer->stop(); + emit connectionStateChanged(false); + } + }); +} + +Neuron::~Neuron(){ + if (m_inputPollingTimer) { + m_inputPollingTimer->stop(); + m_inputPollingTimer->deleteLater(); + m_inputPollingTimer = nullptr; + } + if (m_outputPollingTimer) { + m_outputPollingTimer->stop(); + m_outputPollingTimer->deleteLater(); + m_outputPollingTimer = nullptr; + } +} + +bool Neuron::init() +{ + if (!loadModbusMap()) { + return false; + } + + if (!m_modbusInterface) { + qWarning(dcUniPi()) << "Modbus TCP interface not available"; + return false; + } + + if (m_modbusInterface->connectDevice()) { + qWarning(dcUniPi()) << "Could not connect to modbus TCP device"; + return false; + } + return true; +} + +QString Neuron::type() +{ + switch (m_neuronType) { + case NeuronTypes::S103: + return "S103"; + case NeuronTypes::M103: + return "M103"; + case NeuronTypes::M203: + return "M203"; + case NeuronTypes::M303: + return "M303"; + case NeuronTypes::M403: + return "M403"; + case NeuronTypes::M503: + return "M503"; + case NeuronTypes::M523: + return "M523"; + case NeuronTypes::L203: + return "L203"; + case NeuronTypes::L303: + return "L303"; + case NeuronTypes::L403: + return "L403"; + case NeuronTypes::L503: + return "L503"; + case NeuronTypes::L513: + return "L513"; + case NeuronTypes::L523: + return "L523"; + case NeuronTypes::L533: + return "L533"; + } + return "Unknown"; +} + +QList Neuron::digitalInputs() +{ + return m_modbusDigitalInputRegisters.keys(); +} + +QList Neuron::digitalOutputs() +{ + return m_modbusDigitalOutputRegisters.keys(); +} + +QList Neuron::analogInputs() +{ + return m_modbusAnalogInputRegisters.keys(); +} + +QList Neuron::analogOutputs() +{ + return m_modbusAnalogOutputRegisters.keys(); +} + +QList Neuron::userLEDs() +{ + return m_modbusUserLEDRegisters.keys(); +} + + +bool Neuron::loadModbusMap() +{ + QStringList fileCoilList; + QStringList fileRegisterList; + + switch (m_neuronType) { + case NeuronTypes::S103: + fileCoilList.append(QString("/Neuron_S103/Neuron_S103-Coils-group-1.csv")); + break; + case NeuronTypes::M103: + fileCoilList.append(QString("/Neuron_M103/Neuron_M103-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M103/Neuron_M103-Coils-group-2.csv")); + break; + case NeuronTypes::M203: + fileCoilList.append(QString("/Neuron_M203/Neuron_M203-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M203/Neuron_M203-Coils-group-2.csv")); + break; + case NeuronTypes::M303: + fileCoilList.append(QString("/Neuron_M303/Neuron_M303-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M303/Neuron_M303-Coils-group-2.csv")); + break; + case NeuronTypes::M403: + fileCoilList.append(QString("/Neuron_M403/Neuron_M403-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M403/Neuron_M403-Coils-group-2.csv")); + break; + case NeuronTypes::M503: + fileCoilList.append(QString("/Neuron_M503/Neuron_M503-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M503/Neuron_M503-Coils-group-2.csv")); + break; + case NeuronTypes::M523: + fileCoilList.append(QString("/Neuron_M523/Neuron_M523-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_M523/Neuron_M523-Coils-group-2.csv")); + break; + case NeuronTypes::L203: + fileCoilList.append(QString("/Neuron_L203/Neuron_L203-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L203/Neuron_L203-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L203/Neuron_L203-Coils-group-3.csv")); + break; + case NeuronTypes::L303: + fileCoilList.append(QString("/Neuron_L303/Neuron_L303-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L303/Neuron_L303-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L303/Neuron_L303-Coils-group-3.csv")); + break; + case NeuronTypes::L403: + fileCoilList.append(QString("/Neuron_L403/Neuron_L403-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L403/Neuron_L403-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L403/Neuron_L403-Coils-group-3.csv")); + break; + case NeuronTypes::L503: + fileCoilList.append(QString("/Neuron_L503/Neuron_L503-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L503/Neuron_L503-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L503/Neuron_L503-Coils-group-3.csv")); + break; + case NeuronTypes::L513: + fileCoilList.append(QString("/Neuron_L513/Neuron_L513-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L513/Neuron_L513-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L513/Neuron_L513-Coils-group-3.csv")); + break; + case NeuronTypes::L523: + fileCoilList.append(QString("/Neuron_L523/Neuron_L523-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L523/Neuron_L523-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L523/Neuron_L523-Coils-group-3.csv")); + break; + case NeuronTypes::L533: + fileCoilList.append(QString("/Neuron_L533/Neuron_L533-Coils-group-1.csv")); + fileCoilList.append(QString("/Neuron_L533/Neuron_L533-Coils-group-2.csv")); + fileCoilList.append(QString("/Neuron_L533/Neuron_L533-Coils-group-3.csv")); + break; + } + + foreach(QString relativeFilePath, fileCoilList) { + QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath; + qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath; + QFile *csvFile = new QFile(absoluteFilePath); + if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) { + qCWarning(dcUniPi()) << csvFile->errorString() << "Path:" << absoluteFilePath; + csvFile->deleteLater(); + return false; + } + QTextStream *textStream = new QTextStream(csvFile); + while (!textStream->atEnd()) { + QString line = textStream->readLine(); + QStringList list = line.split(','); + if (list.length() <= 4) { + qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName(); + csvFile->deleteLater(); + return false; + } + if (list[4] == "Basic") { + QString circuit = list[3].split(" ").last(); + if (list[3].contains("Digital Input", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalInputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found input register" << circuit << list[0].toInt(); + } else if (list[3].contains("Digital Output", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found output register" << circuit << list[0].toInt(); + } else if (list[3].contains("Relay Output", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found relay register" << circuit << list[0].toInt(); + } else if (list[3].contains("User Programmable LED", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusUserLEDRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found user programmable led" << circuit << list[0].toInt(); + } + } + } + csvFile->close(); + csvFile->deleteLater(); + } + + switch (m_neuronType) { + case NeuronTypes::S103: + fileRegisterList.append(QString("/Neuron_S103/Neuron_S103-Registers-group-1.csv")); + break; + case NeuronTypes::M103: + fileRegisterList.append(QString("/Neuron_M103/Neuron_M103-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M103/Neuron_M103-Registers-group-2.csv")); + break; + case NeuronTypes::M203: + fileRegisterList.append(QString("/Neuron_M203/Neuron_M203-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M203/Neuron_M203-Registers-group-2.csv")); + break; + case NeuronTypes::M303: + fileRegisterList.append(QString("/Neuron_M303/Neuron_M303-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M303/Neuron_M303-Registers-group-2.csv")); + break; + case NeuronTypes::M403: + fileRegisterList.append(QString("/Neuron_M403/Neuron_M403-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M403/Neuron_M403-Registers-group-2.csv")); + break; + case NeuronTypes::M503: + fileRegisterList.append(QString("/Neuron_M503/Neuron_M503-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M503/Neuron_M503-Registers-group-2.csv")); + break; + case NeuronTypes::M523: + fileRegisterList.append(QString("/Neuron_M523/Neuron_M523-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_M523/Neuron_M523-Registers-group-2.csv")); + break; + case NeuronTypes::L203: + fileRegisterList.append(QString("/Neuron_L203/Neuron_L203-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L203/Neuron_L203-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L203/Neuron_L203-Registers-group-3.csv")); + break; + case NeuronTypes::L303: + fileRegisterList.append(QString("/Neuron_L303/Neuron_L303-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L303/Neuron_L303-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L303/Neuron_L303-Registers-group-3.csv")); + break; + case NeuronTypes::L403: + fileRegisterList.append(QString("/Neuron_L403/Neuron_L403-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L403/Neuron_L403-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L403/Neuron_L403-Registers-group-3.csv")); + break; + case NeuronTypes::L503: + fileRegisterList.append(QString("/Neuron_L503/Neuron_L503-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L503/Neuron_L503-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L503/Neuron_L503-Registers-group-3.csv")); + break; + case NeuronTypes::L513: + fileRegisterList.append(QString("/Neuron_L513/Neuron_L513-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L513/Neuron_L513-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L513/Neuron_L513-Registers-group-3.csv")); + break; + case NeuronTypes::L523: + fileRegisterList.append(QString("/Neuron_L523/Neuron_L523-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L523/Neuron_L523-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L523/Neuron_L523-Registers-group-3.csv")); + break; + case NeuronTypes::L533: + fileRegisterList.append(QString("/Neuron_L533/Neuron_L533-Registers-group-1.csv")); + fileRegisterList.append(QString("/Neuron_L533/Neuron_L533-Registers-group-2.csv")); + fileRegisterList.append(QString("/Neuron_L533/Neuron_L533-Registers-group-3.csv")); + break; + } + foreach (QString relativeFilePath, fileRegisterList) { + QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath; + qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath; + QFile *csvFile = new QFile(absoluteFilePath); + if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) { + qCWarning(dcUniPi()) << csvFile->errorString() << "Path:" << absoluteFilePath; + csvFile->deleteLater(); + return false; + } + QTextStream *textStream = new QTextStream(csvFile); + while (!textStream->atEnd()) { + QString line = textStream->readLine(); + QStringList list = line.split(','); + if (list.length() <= 5) { + qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName(); + csvFile->deleteLater(); + return false; + } + if (list.last() == "Basic") { + QString circuit = list[5].split(" ").last(); + if (list[5].contains("Analog Input Value", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusAnalogInputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found analog input register" << circuit << list[0].toInt(); + } else if (list[5].contains("Analog Output Value", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusAnalogOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found analog output register" << circuit << list[0].toInt(); + } + } + } + csvFile->close(); + csvFile->deleteLater(); + } + return true; +} + + +bool Neuron::modbusWriteRequest(const Request &request) +{ + if (!m_modbusInterface) + return false; + + if (QModbusReply *reply = m_modbusInterface->sendWriteRequest(request.data, m_slaveAddress)) { + if (!reply->isFinished()) { + connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); + connect(reply, &QModbusReply::finished, this, [reply, request, this] { + + if (!m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(m_writeRequestQueue.takeFirst()); + } + + if (reply->error() == QModbusDevice::NoError) { + requestExecuted(request.id, true); + const QModbusDataUnit unit = reply->result(); + int modbusAddress = unit.startAddress(); + if(m_modbusDigitalOutputRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusDigitalOutputRegisters.key(modbusAddress); + emit digitalOutputStatusChanged(circuit, unit.value(0)); + } else if(m_modbusAnalogOutputRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusAnalogOutputRegisters.key(modbusAddress); + emit analogOutputStatusChanged(circuit, unit.value(0)); + } else if(m_modbusUserLEDRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusUserLEDRegisters.key(modbusAddress); + emit userLEDStatusChanged(circuit, unit.value(0)); + } + } else { + requestExecuted(request.id, false); + qCWarning(dcUniPi()) << "Write response error:" << reply->error(); + emit requestError(request.id, reply->errorString()); + } + }); + QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater); + } else { + delete reply; // broadcast replies return immediately + return false; + } + } else { + qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString(); + return false; + } + return true; +} + + +bool Neuron::modbusReadRequest(const QModbusDataUnit &request) +{ + if (!m_modbusInterface) + return false; + + if (QModbusReply *reply = m_modbusInterface->sendReadRequest(request, m_slaveAddress)) { + if (!reply->isFinished()) { + connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); + connect(reply, &QModbusReply::finished, this, [reply, this] { + + int modbusAddress = 0; + + if (reply->error() == QModbusDevice::NoError) { + const QModbusDataUnit unit = reply->result(); + + for (int i = 0; i < static_cast(unit.valueCount()); i++) { + //qCDebug(dcUniPi()) << "Start Address:" << unit.startAddress() << "Register Type:" << unit.registerType() << "Value:" << unit.value(i); + modbusAddress = unit.startAddress() + i; + + if (m_previousModbusRegisterValue.contains(modbusAddress)) { + if (m_previousModbusRegisterValue.value(modbusAddress) == unit.value(i)) { + continue; + } else { + m_previousModbusRegisterValue.insert(modbusAddress, unit.value(i)); //update existing value + } + } else { + m_previousModbusRegisterValue.insert(modbusAddress, unit.value(i)); + } + + QString circuit; + switch (unit.registerType()) { + case QModbusDataUnit::RegisterType::Coils: + if(m_modbusDigitalInputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusDigitalInputRegisters.key(modbusAddress); + emit digitalInputStatusChanged(circuit, unit.value(i)); + } else if(m_modbusDigitalOutputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusDigitalOutputRegisters.key(modbusAddress); + emit digitalOutputStatusChanged(circuit, unit.value(i)); + } else if(m_modbusUserLEDRegisters.values().contains(modbusAddress)){ + circuit = m_modbusUserLEDRegisters.key(modbusAddress); + emit userLEDStatusChanged(circuit, unit.value(i)); + } else { + qCWarning(dcUniPi()) << "Received unrecorgnised modbus register" << modbusAddress; + } + break; + + case QModbusDataUnit::RegisterType::HoldingRegisters: + if(m_modbusAnalogOutputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusAnalogOutputRegisters.key(modbusAddress); + emit analogOutputStatusChanged(circuit, (unit.value(i) << 16 | unit.value(i+1))); + } else { + qCWarning(dcUniPi()) << "Received unrecognised modbus register" << modbusAddress; + } + break; + case QModbusDataUnit::RegisterType::InputRegisters: + if(m_modbusAnalogInputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusAnalogInputRegisters.key(modbusAddress); + emit analogInputStatusChanged(circuit, (unit.value(i) << 16 | unit.value(i+1))); + } else { + qCWarning(dcUniPi()) << "Received unrecognised modbus register" << modbusAddress; + } + break; + case QModbusDataUnit::RegisterType::DiscreteInputs: + case QModbusDataUnit::RegisterType::Invalid: + qCWarning(dcUniPi()) << "Invalide register type"; + break; + } + } + } else if (reply->error() == QModbusDevice::ProtocolError) { + qCWarning(dcUniPi()) << "Read response error:" << reply->errorString() << reply->rawResult().exceptionCode(); + } else { + qCWarning(dcUniPi()) << "Read response error:" << reply->error() << reply->errorString(); + } + }); + QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater); + } else { + delete reply; // broadcast replies return immediately + return false; + } + } else { + qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString(); + return false; + } + return true; +} + + +bool Neuron::getInputRegisters(QList registerList) +{ + if (registerList.isEmpty()) { + return true; + } + + std::sort(registerList.begin(), registerList.end()); + int previousReg = registerList.first(); //first register to read and starting point to get the following registers + int startAddress; + + QHash registerGroups; + + foreach (int reg, registerList) { + //qDebug(dcUniPi()) << "Register" << reg << "previous Register" << previousReg; + if (reg == previousReg) { //first register + startAddress = reg; + registerGroups.insert(startAddress, 1); + } else if (reg == (previousReg + 1)) { //next register in block + previousReg = reg; + registerGroups.insert(startAddress, (registerGroups.value(startAddress) + 1)); //update block length + } else { // new block + startAddress = reg; + previousReg = reg; + registerGroups.insert(startAddress, 1); + } + } + + foreach (int startAddress, registerGroups.keys()) { + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, startAddress, registerGroups.value(startAddress)); + if (m_readRequestQueue.isEmpty()) { + modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + } else { + m_readRequestQueue.append(request); + } + } + return true; +} + +bool Neuron::getHoldingRegisters(QList registerList) +{ + if (registerList.isEmpty()) { + return true; + } + + std::sort(registerList.begin(), registerList.end()); + int previousReg = registerList.first(); //first register to read and starting point to get the following registers + int startAddress; + + QHash registerGroups; + + foreach (int reg, registerList) { + //qDebug(dcUniPi()) << "Register" << reg << "previous Register" << previousReg; + if (reg == previousReg) { //first register + startAddress = reg; + registerGroups.insert(startAddress, 1); + } else if (reg == (previousReg + 1)) { //next register in block + previousReg = reg; + registerGroups.insert(startAddress, (registerGroups.value(startAddress) + 1)); //update block length + } else { // new block + startAddress = reg; + previousReg = reg; + registerGroups.insert(startAddress, 1); + } + } + + foreach (int startAddress, registerGroups.keys()) { + qDebug(dcUniPi()) << "Register" << startAddress << "length" << registerGroups.value(startAddress); + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, startAddress, registerGroups.value(startAddress)); + modbusReadRequest(request); + } + return true; +} + +bool Neuron::getCoils(QList registerList) +{ + if (registerList.isEmpty()) { + return true; + } + + std::sort(registerList.begin(), registerList.end()); + int previousReg = registerList.first(); //first register to read and starting point to get the following registers + int startAddress; + + QHash registerGroups; + + foreach (int reg, registerList) { + //qDebug(dcUniPi()) << "Register" << reg << "previous Register" << previousReg; + if (reg == previousReg) { //first register + startAddress = reg; + registerGroups.insert(startAddress, 1); + } else if (reg == (previousReg + 1)) { //next register in block + previousReg = reg; + registerGroups.insert(startAddress, (registerGroups.value(startAddress) + 1)); //update block length + } else { // new block + startAddress = reg; + previousReg = reg; + registerGroups.insert(startAddress, 1); + } + } + + foreach (int startAddress, registerGroups.keys()) { + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, startAddress, registerGroups.value(startAddress)); + if (m_readRequestQueue.isEmpty()) { + modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + } else { + m_readRequestQueue.append(request); + } + } + return true; +} + + +bool Neuron::getAllDigitalInputs() +{ + if (!m_modbusInterface) { + qCWarning(dcUniPi()) << "Neuron modbus interface not initialized"; + return false; + } + return getCoils(m_modbusDigitalInputRegisters.values()); +} + +bool Neuron::getAllDigitalOutputs() +{ + if (!m_modbusInterface) { + qCWarning(dcUniPi()) << "Neuron modbus interface not initialized"; + return false; + } + return getCoils(m_modbusDigitalOutputRegisters.values()); +} + +bool Neuron::getAllAnalogInputs() +{ + if (!m_modbusInterface) { + qCWarning(dcUniPi()) << "Neuron modbus interface not initialized"; + return false; + } + foreach(QString circuit, m_modbusAnalogInputRegisters.keys()) { + getAnalogInput(circuit); + } + return true; +} + +bool Neuron::getAllAnalogOutputs() +{ + if (!m_modbusInterface) { + qCWarning(dcUniPi()) << "Neuron modbus interface not initialized"; + return false; + } + foreach(QString circuit, m_modbusAnalogOutputRegisters.keys()) { + getAnalogOutput(circuit); + } + return true; +} + +bool Neuron::getDigitalInput(const QString &circuit) +{ + int modbusAddress = m_modbusDigitalInputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital Input" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + //return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + //m_readRequestQueue.append(request); //FIXME + } + return true; +} + +bool Neuron::getAnalogOutput(const QString &circuit) +{ + int modbusAddress = m_modbusAnalogInputRegisters.value(circuit); + qDebug(dcUniPi()) << "Reading analog Input" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, modbusAddress, 2); + if (m_readRequestQueue.isEmpty()) { + //return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + //m_readRequestQueue.append(request); //FIXME + } + return true; +} + + +QUuid Neuron::setDigitalOutput(const QString &circuit, bool value) +{ + int modbusAddress = m_modbusDigitalOutputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress << value; + + Request request; + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + request.data.setValue(0, static_cast(value)); + request.id = QUuid::createUuid(); + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + return request.id; +} + + +bool Neuron::getDigitalOutput(const QString &circuit) +{ + int modbusAddress = m_modbusDigitalOutputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital Output" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + + +QUuid Neuron::setAnalogOutput(const QString &circuit, double value) +{ + int modbusAddress = m_modbusAnalogOutputRegisters.value(circuit); + qDebug(dcUniPi()) << "Writing analog Output" << circuit << modbusAddress; + + if (!m_modbusInterface) + return ""; + + Request request; + request.id = QUuid::createUuid(); + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, modbusAddress, 2); + request.data.setValue(0, (static_cast(value) >> 16)); //FIXME + request.data.setValue(0, (static_cast(value) & 0xffff)); //FIXME + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + + return request.id; +} + + +bool Neuron::getAnalogInput(const QString &circuit) +{ + int modbusAddress = m_modbusAnalogInputRegisters.value(circuit); + qDebug(dcUniPi()) << "Reading analog Input" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, modbusAddress, 2); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + +QUuid Neuron::setUserLED(const QString &circuit, bool value) +{ + int modbusAddress = m_modbusUserLEDRegisters.value(circuit); + //qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress << value; + + if (!m_modbusInterface) + return ""; + + Request request; + request.id = QUuid::createUuid(); + + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + request.data.setValue(0, static_cast(value)); + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + + return request.id; +} + + +bool Neuron::getUserLED(const QString &circuit) +{ + int modbusAddress = m_modbusUserLEDRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital Output" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + //return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + //m_readRequestQueue.append(request); + } + return true; +} + + +void Neuron::onOutputPollingTimer() +{ + getAllDigitalOutputs(); + getAllAnalogOutputs(); +} + +void Neuron::onInputPollingTimer() +{ + getAllDigitalInputs(); + getAllAnalogInputs(); +} diff --git a/unipi/neuron.h b/unipi/neuron.h new file mode 100644 index 0000000..f982159 --- /dev/null +++ b/unipi/neuron.h @@ -0,0 +1,139 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef NEURON_H +#define NEURON_H + +#include +#include +#include +#include +#include + +class Neuron : public QObject +{ + Q_OBJECT +public: + + struct Request { + QUuid id; + QModbusDataUnit data; + }; + + enum NeuronTypes { + S103, + M103, + M203, + M303, + M403, + M503, + M523, + L203, + L303, + L403, + L503, + L513, + L523, + L533 + }; + + explicit Neuron(NeuronTypes neuronType, QModbusTcpClient *modbusInterface, QObject *parent = nullptr); + ~Neuron(); + + bool init(); + QString type(); + + QList digitalInputs(); + QList digitalOutputs(); + QList analogInputs(); + QList analogOutputs(); + QList userLEDs(); + + QUuid setDigitalOutput(const QString &circuit, bool value); + QUuid setAnalogOutput(const QString &circuit, double value); + QUuid setUserLED(const QString &circuit, bool value); + + bool getDigitalOutput(const QString &circuit); + bool getDigitalInput(const QString &circuit); + + bool getAnalogOutput(const QString &circuit); + bool getAnalogInput(const QString &circuit); + + bool getAllDigitalOutputs(); + bool getAllDigitalInputs(); + bool getAllAnalogInputs(); + bool getAllAnalogOutputs(); + + bool getUserLED(const QString &circuit); +private: + int m_slaveAddress = 0; + uint m_responseTimeoutTime = 2000; + + QTimer *m_inputPollingTimer = nullptr; + QTimer *m_outputPollingTimer = nullptr; + + QModbusTcpClient *m_modbusInterface = nullptr; + + QHash m_modbusDigitalOutputRegisters; + QHash m_modbusDigitalInputRegisters; + QHash m_modbusAnalogInputRegisters; + QHash m_modbusAnalogOutputRegisters; + QHash m_modbusUserLEDRegisters; + QList m_writeRequestQueue; + QList m_readRequestQueue; + + NeuronTypes m_neuronType = NeuronTypes::S103; + + QHash m_previousModbusRegisterValue; + + bool loadModbusMap(); + bool modbusReadRequest(const QModbusDataUnit &request); + bool modbusWriteRequest(const Request &request); + + bool getInputRegisters(QList registers); + bool getHoldingRegisters(QList registers); + bool getCoils(QList registers); + +signals: + void requestExecuted(const QUuid &requestId, bool success); + void requestError(const QUuid &requestId, const QString &error); + void digitalInputStatusChanged(const QString &circuit, bool value); + void digitalOutputStatusChanged(const QString &circuit, bool value); + void analogInputStatusChanged(const QString &circuit, double value); + void analogOutputStatusChanged(const QString &circuit, double value); + void userLEDStatusChanged(const QString &circuit, bool value); + void connectionStateChanged(bool state); + +public slots: + void onOutputPollingTimer(); + void onInputPollingTimer(); +}; + +#endif // NEURON_H diff --git a/unipi/neuronextension.cpp b/unipi/neuronextension.cpp new file mode 100644 index 0000000..cf578da --- /dev/null +++ b/unipi/neuronextension.cpp @@ -0,0 +1,733 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "neuronextension.h" +#include "extern-plugininfo.h" + +#include +#include +#include +#include + +NeuronExtension::NeuronExtension(ExtensionTypes extensionType, QModbusRtuSerialMaster *modbusInterface, int slaveAddress, QObject *parent) : + QObject(parent), + m_modbusInterface(modbusInterface), + m_slaveAddress(slaveAddress), + m_extensionType(extensionType) +{ + m_inputPollingTimer = new QTimer(this); + connect(m_inputPollingTimer, &QTimer::timeout, this, &NeuronExtension::onInputPollingTimer); + m_inputPollingTimer->setTimerType(Qt::TimerType::PreciseTimer); + m_inputPollingTimer->setInterval(200); + + m_outputPollingTimer = new QTimer(this); + connect(m_outputPollingTimer, &QTimer::timeout, this, &NeuronExtension::onOutputPollingTimer); + m_outputPollingTimer->setTimerType(Qt::TimerType::PreciseTimer); + m_outputPollingTimer->setInterval(1000); + + if (m_modbusInterface->state() == QModbusDevice::State::ConnectedState) { + m_inputPollingTimer->start(); + m_outputPollingTimer->start(); + } + + connect(m_modbusInterface, &QModbusDevice::stateChanged, this, [this] (QModbusDevice::State state) { + if (state == QModbusDevice::State::ConnectedState) { + if (m_inputPollingTimer) + m_inputPollingTimer->start(); + if (m_outputPollingTimer) + m_outputPollingTimer->start(); + emit connectionStateChanged(true); + } else { + if (m_inputPollingTimer) + m_inputPollingTimer->stop(); + if (m_outputPollingTimer) + m_outputPollingTimer->stop(); + emit connectionStateChanged(false); + } + }); +} + +NeuronExtension::~NeuronExtension(){ + if (m_inputPollingTimer) { + m_inputPollingTimer->stop(); + m_inputPollingTimer->deleteLater(); + m_inputPollingTimer = nullptr; + } + if (m_outputPollingTimer) { + m_outputPollingTimer->stop(); + m_outputPollingTimer->deleteLater(); + m_outputPollingTimer = nullptr; + } +} + +bool NeuronExtension::init() { + + if (!loadModbusMap()) { + return false; + } + + if (!m_modbusInterface) { + qWarning(dcUniPi()) << "Modbus RTU interface not available"; + return false; + } + + if (m_modbusInterface->connectDevice()) { + qWarning(dcUniPi()) << "Could not connect to RTU device"; + return false; + } + return true; +} + +QString NeuronExtension::type() +{ + switch(m_extensionType) { + case ExtensionTypes::xS10: + return "xS10"; + case ExtensionTypes::xS20: + return "xS20"; + case ExtensionTypes::xS30: + return "xS30"; + case ExtensionTypes::xS40: + return "xS40"; + case ExtensionTypes::xS50: + return "xS50"; + case ExtensionTypes::xS11: + return "xS11"; + case ExtensionTypes::xS51: + return "xS51"; + default: + return "Unknown"; + } +} + +int NeuronExtension::slaveAddress() +{ + return m_slaveAddress; +} + +void NeuronExtension::setSlaveAddress(int slaveAddress) +{ + m_slaveAddress = slaveAddress; +} + +QList NeuronExtension::digitalInputs() +{ + return m_modbusDigitalInputRegisters.keys(); +} + +QList NeuronExtension::digitalOutputs() +{ + return m_modbusDigitalOutputRegisters.keys(); +} + +QList NeuronExtension::analogInputs() +{ + return m_modbusAnalogInputRegisters.keys(); +} + +QList NeuronExtension::analogOutputs() +{ + return m_modbusAnalogOutputRegisters.keys(); +} + +QList NeuronExtension::userLEDs() +{ + return m_modbusUserLEDRegisters.keys(); +} + +bool NeuronExtension::loadModbusMap() +{ + QStringList fileCoilList; + QStringList fileRegisterList; + + switch(m_extensionType) { + case ExtensionTypes::xS10: + fileCoilList.append(QString("/Neuron_xS10/Neuron_xS10-Coils-group-1.csv")); + break; + case ExtensionTypes::xS20: + fileCoilList.append(QString("/Neuron_xS20/Neuron_xS20-Coils-group-1.csv")); + break; + case ExtensionTypes::xS30: + fileCoilList.append(QString("/Neuron_xS30/Neuron_xS30-Coils-group-1.csv")); + break; + case ExtensionTypes::xS40: + fileCoilList.append(QString("/Neuron_xS40/Neuron_xS40-Coils-group-1.csv")); + break; + case ExtensionTypes::xS50: + fileCoilList.append(QString("/Neuron_xS50/Neuron_xS50-Coils-group-1.csv")); + break; + case ExtensionTypes::xS11: + fileCoilList.append(QString("/Extension_xS11/Extension_xS11-Coils-group-1.csv")); + break; + case ExtensionTypes::xS51: + fileCoilList.append(QString("/Extension_xS51/Extension_xS51-Coils-group-1.csv")); + break; + } + + foreach (QString relativeFilePath, fileCoilList) { + QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath; + qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath; + QFile *csvFile = new QFile(absoluteFilePath); + if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) { + qCWarning(dcUniPi()) << csvFile->errorString() << absoluteFilePath; + csvFile->deleteLater(); + return false; + } + QTextStream *textStream = new QTextStream(csvFile); + while (!textStream->atEnd()) { + QString line = textStream->readLine(); + QStringList list = line.split(','); + if (list.length() <= 4) { + qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName(); + csvFile->deleteLater(); + return false; + } + if (list[4] == "Basic") { + QString circuit = list[3].split(" ").last(); + if (list[3].contains("Digital Input", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalInputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found input register" << circuit << list[0].toInt(); + } else if (list[3].contains("Digital Output", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found output register" << circuit << list[0].toInt(); + } else if (list[3].contains("Relay Output", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusDigitalOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found relay register" << circuit << list[0].toInt(); + } else if (list[3].contains("User Programmable LED", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusUserLEDRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found user programmable led" << circuit << list[0].toInt(); + } + } + } + csvFile->close(); + csvFile->deleteLater(); + } + + switch(m_extensionType) { + case ExtensionTypes::xS10: + fileRegisterList.append(QString("/Neuron_xS10/Neuron_xS10-Registers-group-1.csv")); + break; + case ExtensionTypes::xS20: + fileRegisterList.append(QString("/Neuron_xS20/Neuron_xS20-Registers-group-1.csv")); + break; + case ExtensionTypes::xS30: + fileRegisterList.append(QString("/Neuron_xS30/Neuron_xS30-Registers-group-1.csv")); + break; + case ExtensionTypes::xS40: + fileRegisterList.append(QString("/Neuron_xS40/Neuron_xS40-Registers-group-1.csv")); + break; + case ExtensionTypes::xS50: + fileRegisterList.append(QString("/Neuron_xS50/Neuron_xS50-Registers-group-1.csv")); + break; + case ExtensionTypes::xS11: + fileRegisterList.append(QString("/Extension_xS11/Extension_xS11-Registers-group-1.csv")); + break; + case ExtensionTypes::xS51: + fileRegisterList.append(QString("/Extension_xS51/Extension_xS51-Registers-group-1.csv")); + break; + } + + foreach (QString relativeFilePath, fileRegisterList) { + QString absoluteFilePath = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last() + "/nymea/modbus" + relativeFilePath; + qDebug(dcUniPi()) << "Open CSV File:" << absoluteFilePath; + QFile *csvFile = new QFile(absoluteFilePath); + if (!csvFile->open(QIODevice::ReadOnly | QIODevice::Text)) { + qCWarning(dcUniPi()) << csvFile->errorString() << absoluteFilePath; + csvFile->deleteLater(); + return false; + } + QTextStream *textStream = new QTextStream(csvFile); + while (!textStream->atEnd()) { + QString line = textStream->readLine(); + QStringList list = line.split(','); + if (list.length() <= 5) { + qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName(); + csvFile->deleteLater(); + return false; + } + if (list.last() == "Basic" && list[5].split(" ").length() > 3) { + if (list[5].split(" ").length() <= 3) { + qCWarning(dcUniPi()) << "currupted CSV file:" << csvFile->fileName(); + csvFile->deleteLater(); + return false; + } + QString circuit = list[5].split(" ").at(3); + if (list[5].contains("Analog Input Value", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusAnalogInputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found analog input register" << circuit << list[0].toInt(); + } else if (list[5].contains("Analog Output Value", Qt::CaseSensitivity::CaseInsensitive)) { + m_modbusAnalogOutputRegisters.insert(circuit, list[0].toInt()); + qDebug(dcUniPi()) << "Found analog output register" << circuit << list[0].toInt(); + } + } + } + csvFile->close(); + csvFile->deleteLater(); + } + return true; +} + +bool NeuronExtension::modbusReadRequest(const QModbusDataUnit &request) +{ + if (!m_modbusInterface) + return false; + + if (QModbusReply *reply = m_modbusInterface->sendReadRequest(request, m_slaveAddress)) { + if (!reply->isFinished()) { + connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); + connect(reply, &QModbusReply::finished, this, [reply, this] { + + int modbusAddress = 0; + + if (!m_readRequestQueue.isEmpty()) { + modbusReadRequest(m_readRequestQueue.takeFirst()); + } + + if (reply->error() == QModbusDevice::NoError) { + const QModbusDataUnit unit = reply->result(); + + for (int i = 0; i < static_cast(unit.valueCount()); i++) { + //qCDebug(dcUniPi()) << "Start Address:" << unit.startAddress() << "Register Type:" << unit.registerType() << "Value:" << unit.value(i); + modbusAddress = unit.startAddress() + i; + + if (m_previousModbusRegisterValue.contains(modbusAddress)) { + if (m_previousModbusRegisterValue.value(modbusAddress) == unit.value(i)) { + continue; + } else { + m_previousModbusRegisterValue.insert(modbusAddress, unit.value(i)); //update existing value + } + } else { + m_previousModbusRegisterValue.insert(modbusAddress, unit.value(i)); + } + + QString circuit; + switch (unit.registerType()) { + case QModbusDataUnit::RegisterType::Coils: + if(m_modbusDigitalInputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusDigitalInputRegisters.key(modbusAddress); + emit digitalInputStatusChanged(circuit, unit.value(i)); + } + + if(m_modbusDigitalOutputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusDigitalOutputRegisters.key(modbusAddress); + emit digitalOutputStatusChanged(circuit, unit.value(i)); + } + + if(m_modbusUserLEDRegisters.values().contains(modbusAddress)){ + circuit = m_modbusUserLEDRegisters.key(modbusAddress); + emit userLEDStatusChanged(circuit, unit.value(i)); + } + break; + + case QModbusDataUnit::RegisterType::InputRegisters: + if(m_modbusAnalogInputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusAnalogInputRegisters.key(modbusAddress); + emit analogInputStatusChanged(circuit, ((unit.value(i) << 16) | unit.value(i+1))); + } + break; + case QModbusDataUnit::RegisterType::HoldingRegisters: + if(m_modbusAnalogOutputRegisters.values().contains(modbusAddress)){ + circuit = m_modbusAnalogOutputRegisters.key(modbusAddress); + emit analogOutputStatusChanged(circuit, unit.value(i)); + } + break; + case QModbusDataUnit::RegisterType::DiscreteInputs: + case QModbusDataUnit::RegisterType::Invalid: + qCWarning(dcUniPi()) << "Invalide register type"; + break; + } + } + + } else if (reply->error() == QModbusDevice::ProtocolError) { + qCWarning(dcUniPi()) << "Read response error:" << reply->errorString() << reply->rawResult().exceptionCode(); + } else { + qCWarning(dcUniPi()) << "Read response error:" << reply->error(); + } + }); + QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater); + } else { + delete reply; // broadcast replies return immediately + return false; + } + } else { + qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString(); + return false; + } + return true; +} + + +bool NeuronExtension::modbusWriteRequest(const Request &request) +{ + if (!m_modbusInterface) + return false; + + if (QModbusReply *reply = m_modbusInterface->sendWriteRequest(request.data, m_slaveAddress)) { + if (!reply->isFinished()) { + connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); + connect(reply, &QModbusReply::finished, this, [reply, request, this] { + + if (!m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(m_writeRequestQueue.takeFirst()); + } + + if (reply->error() == QModbusDevice::NoError) { + requestExecuted(request.id, true); + const QModbusDataUnit unit = reply->result(); + int modbusAddress = unit.startAddress(); + if(m_modbusDigitalOutputRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusDigitalOutputRegisters.key(modbusAddress); + emit digitalOutputStatusChanged(circuit, unit.value(0)); + } else if(m_modbusAnalogOutputRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusAnalogOutputRegisters.key(modbusAddress); + emit analogOutputStatusChanged(circuit, unit.value(0)); + } else if(m_modbusUserLEDRegisters.values().contains(modbusAddress)){ + QString circuit = m_modbusUserLEDRegisters.key(modbusAddress); + emit userLEDStatusChanged(circuit, unit.value(0)); + } + } else { + requestExecuted(request.id, false); + qCWarning(dcUniPi()) << "Read response error:" << reply->error(); + emit requestError(request.id, reply->errorString()); + } + }); + QTimer::singleShot(m_responseTimeoutTime, reply, &QModbusReply::deleteLater); + } else { + delete reply; // broadcast replies return immediately + return false; + } + } else { + qCWarning(dcUniPi()) << "Read error: " << m_modbusInterface->errorString(); + return false; + } + return true; +} + + +bool NeuronExtension::getDigitalInput(const QString &circuit) +{ + int modbusAddress = m_modbusDigitalInputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital input" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + return ""; + } else { + m_readRequestQueue.append(request); + } + return true; +} + + +QUuid NeuronExtension::setDigitalOutput(const QString &circuit, bool value) +{ + int modbusAddress = m_modbusDigitalOutputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress; + + if (!m_modbusInterface) + return ""; + + Request request; + request.id = QUuid::createUuid(); + + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + request.data.setValue(0, static_cast(value)); + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + + return request.id; +} + +bool NeuronExtension::getDigitalOutput(const QString &circuit) +{ + int modbusAddress = m_modbusDigitalOutputRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital output" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + + +bool NeuronExtension::getAllDigitalInputs() +{ + if (!m_modbusInterface) + return false; + + QList requests; + QList registerList = m_modbusDigitalInputRegisters.values(); + + if (registerList.isEmpty()) { + return true; //device has no digital inputs + } + + std::sort(registerList.begin(), registerList.end()); + int previousReg = registerList.first(); //first register to read and starting point to get the following registers + int startAddress; + + QHash registerGroups; + + foreach (int reg, registerList) { + //qDebug(dcUniPi()) << "Register" << reg << "previous Register" << previousReg; + if (reg == previousReg) { //first register + startAddress = reg; + registerGroups.insert(startAddress, 1); + } else if (reg == (previousReg + 1)) { //next register in block + previousReg = reg; + registerGroups.insert(startAddress, (registerGroups.value(startAddress) + 1)); //update block length + } else { // new block + startAddress = reg; + previousReg = reg; + registerGroups.insert(startAddress, 1); + } + } + + foreach (int startAddress, registerGroups.keys()) { + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, startAddress, registerGroups.value(startAddress)); + if (m_readRequestQueue.isEmpty()) { + modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + } else { + m_readRequestQueue.append(request); + } + } + return true; +} + +bool NeuronExtension::getAllAnalogOutputs() +{ + if (!m_modbusInterface) + return false; + + foreach (QString circuit, m_modbusAnalogOutputRegisters.keys()) { + getAnalogOutput(circuit); + } + return true; +} + +bool NeuronExtension::getAllAnalogInputs() +{ + if (!m_modbusInterface) + return false; + + foreach (QString circuit, m_modbusAnalogInputRegisters.keys()) { + getAnalogInput(circuit); + } + return true; +} + +bool NeuronExtension::getAllDigitalOutputs() +{ + if (!m_modbusInterface) + return false; + + QList requests; + QList registerList = m_modbusDigitalOutputRegisters.values(); + + if (registerList.isEmpty()) { + return true; //device has no digital outputs + } + + std::sort(registerList.begin(), registerList.end()); + int previousReg = registerList.first(); //first register to read and starting point to get the following registers + int startAddress; + + QHash registerGroups; + + foreach (int reg, registerList) { + //qDebug(dcUniPi()) << "Register" << reg << "previous Register" << previousReg; + if (reg == previousReg) { //first register + startAddress = reg; + registerGroups.insert(startAddress, 1); + } else if (reg == (previousReg + 1)) { //next register in block + previousReg = reg; + registerGroups.insert(startAddress, (registerGroups.value(startAddress) + 1)); //update block length + } else { // new block + startAddress = reg; + previousReg = reg; + registerGroups.insert(startAddress, 1); + } + } + + foreach (int startAddress, registerGroups.keys()) { + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, startAddress, registerGroups.value(startAddress)); + if (m_readRequestQueue.isEmpty()) { + modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + } else { + m_readRequestQueue.append(request); + } + } + return true; +} + +QUuid NeuronExtension::setAnalogOutput(const QString &circuit, double value) +{ + int modbusAddress = m_modbusAnalogOutputRegisters.value(circuit); + if (!m_modbusInterface) + return ""; + + Request request; + request.id = QUuid::createUuid(); + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, modbusAddress, 1); + request.data.setValue(0, static_cast(value)); + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + + return request.id; +} + + +bool NeuronExtension::getAnalogOutput(const QString &circuit) +{ + int modbusAddress = m_modbusAnalogOutputRegisters.value(circuit); + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + + +bool NeuronExtension::getAnalogInput(const QString &circuit) +{ + int modbusAddress = m_modbusAnalogInputRegisters.value(circuit); + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, modbusAddress, 2); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + +QUuid NeuronExtension::setUserLED(const QString &circuit, bool value) +{ + int modbusAddress = m_modbusUserLEDRegisters.value(circuit); + //qDebug(dcUniPi()) << "Setting digital ouput" << circuit << modbusAddress << value; + + if (!m_modbusInterface) + return ""; + + Request request; + request.id = QUuid::createUuid(); + + request.data = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + request.data.setValue(0, static_cast(value)); + + if (m_writeRequestQueue.isEmpty()) { + modbusWriteRequest(request); + } else if (m_writeRequestQueue.length() > 100) { + return ""; + } else { + m_writeRequestQueue.append(request); + } + + return request.id; +} + + +bool NeuronExtension::getUserLED(const QString &circuit) +{ + int modbusAddress = m_modbusUserLEDRegisters.value(circuit); + //qDebug(dcUniPi()) << "Reading digital Output" << circuit << modbusAddress; + + if (!m_modbusInterface) + return false; + + QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::Coils, modbusAddress, 1); + if (m_readRequestQueue.isEmpty()) { + return modbusReadRequest(request); + } else if (m_readRequestQueue.length() > 100) { + qCWarning(dcUniPi()) << "Neuron extension: too many pending read requests"; + return false; + } else { + m_readRequestQueue.append(request); + } + return true; +} + + +void NeuronExtension::onOutputPollingTimer() +{ + getAllDigitalOutputs(); + getAllAnalogOutputs(); +} + +void NeuronExtension::onInputPollingTimer() +{ + getAllDigitalInputs(); + getAllAnalogInputs(); +} diff --git a/unipi/neuronextension.h b/unipi/neuronextension.h new file mode 100644 index 0000000..564c66b --- /dev/null +++ b/unipi/neuronextension.h @@ -0,0 +1,130 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef NEURONEXTENSION_H +#define NEURONEXTENSION_H + +#include +#include +#include +#include +#include + +class NeuronExtension : public QObject +{ + Q_OBJECT +public: + + struct Request { + QUuid id; + QModbusDataUnit data; + }; + + enum ExtensionTypes { + xS10, + xS20, + xS30, + xS40, + xS50, + xS11, + xS51 + }; + + explicit NeuronExtension(ExtensionTypes extensionType, QModbusRtuSerialMaster *modbusInterface, int slaveAddress, QObject *parent = nullptr); + ~NeuronExtension(); + + bool init(); + QString type(); + int slaveAddress(); + void setSlaveAddress(int slaveAddress); + + QList digitalInputs(); + QList digitalOutputs(); + QList analogInputs(); + QList analogOutputs(); + QList userLEDs(); + + QUuid setDigitalOutput(const QString &circuit, bool value); + bool getDigitalOutput(const QString &circuit); + bool getDigitalInput(const QString &circuit); + + QUuid setAnalogOutput(const QString &circuit, double value); + bool getAnalogOutput(const QString &circuit); + bool getAnalogInput(const QString &circuit); + + bool getAllDigitalOutputs(); + bool getAllDigitalInputs(); + bool getAllAnalogOutputs(); + bool getAllAnalogInputs(); + + QUuid setUserLED(const QString &circuit, bool value); + bool getUserLED(const QString &circuit); +private: + uint m_responseTimeoutTime = 2000; + + QTimer *m_inputPollingTimer = nullptr; + QTimer *m_outputPollingTimer = nullptr; + + QHash m_modbusDigitalOutputRegisters; + QHash m_modbusDigitalInputRegisters; + QHash m_modbusAnalogInputRegisters; + QHash m_modbusAnalogOutputRegisters; + QHash m_modbusUserLEDRegisters; + QList m_writeRequestQueue; + QList m_readRequestQueue; + + QModbusRtuSerialMaster *m_modbusInterface = nullptr; + int m_slaveAddress = 0; + ExtensionTypes m_extensionType = ExtensionTypes::xS10; + QHash m_previousModbusRegisterValue; + + bool loadModbusMap(); + bool modbusWriteRequest(const Request &request); + bool modbusReadRequest(const QModbusDataUnit &request); + +signals: + void requestExecuted(const QUuid &requestId, bool success); + void requestError(const QUuid &requestId, const QString &error); + void digitalInputStatusChanged(const QString &circuit, bool value); + void digitalOutputStatusChanged(const QString &circuit, bool value); + + void analogInputStatusChanged(const QString &circuit, double value); + void analogOutputStatusChanged(const QString &circuit, double value); + + void userLEDStatusChanged(const QString &circuit, bool value); + + void connectionStateChanged(bool state); + +private slots: + void onOutputPollingTimer(); + void onInputPollingTimer(); +}; + +#endif // NEURONEXTENSION_H diff --git a/unipi/translations/26cba644-35ae-40a6-9c48-924198893a5f-en_US.ts b/unipi/translations/26cba644-35ae-40a6-9c48-924198893a5f-en_US.ts new file mode 100644 index 0000000..6a35bd1 --- /dev/null +++ b/unipi/translations/26cba644-35ae-40a6-9c48-924198893a5f-en_US.ts @@ -0,0 +1,417 @@ + + + + + IntegrationPluginUniPi + + There is already a UniPi gateway in the system. + + + + Error setting up UniPi. + + + + Error setting up Neuron. + + + + Error unrecognized Neuron type. + + + + Error setting up Neuron Thing. + + + + Error unrecognized extension type. + + + + Error loading modbus map. + + + + + UniPi + + UniPi + The name of the vendor ({c82bfe27-d14d-40bd-b12f-ddba214b5fc5}) +---------- +The name of the plugin UniPi ({26cba644-35ae-40a6-9c48-924198893a5f}) + + + + Port + The name of the ParamType (ThingClass: uniPi, Type: plugin, ID: {5329655d-7e91-4b16-9abf-2abc82bf1b3c}) + + + + Power + The name of the ParamType (ThingClass: userLED, ActionType: power, ID: {38878388-9a2e-45b0-8f3e-c25073c9dc1d}) +---------- +The name of the ParamType (ThingClass: userLED, EventType: power, ID: {38878388-9a2e-45b0-8f3e-c25073c9dc1d}) +---------- +The name of the StateType ({38878388-9a2e-45b0-8f3e-c25073c9dc1d}) of ThingClass userLED +---------- +The name of the ParamType (ThingClass: digitalOutput, ActionType: power, ID: {470a0e30-a170-47ed-9ed3-c41db919555f}) +---------- +The name of the ParamType (ThingClass: digitalOutput, EventType: power, ID: {470a0e30-a170-47ed-9ed3-c41db919555f}) +---------- +The name of the StateType ({470a0e30-a170-47ed-9ed3-c41db919555f}) of ThingClass digitalOutput + + + + Digital input + The name of the ParamType (ThingClass: digitalInput, EventType: inputStatus, ID: {fa4f2764-b7ff-45e7-993b-b6af1840fd3d}) +---------- +The name of the StateType ({fa4f2764-b7ff-45e7-993b-b6af1840fd3d}) of ThingClass digitalInput +---------- +The name of the ThingClass ({0bec278a-98f1-416b-b496-6d00740f178a}) + + + + Digital input changed + The name of the EventType ({fa4f2764-b7ff-45e7-993b-b6af1840fd3d}) of ThingClass digitalInput + + + + Digital output + The name of the ThingClass ({f3a3c5ed-461a-4ca8-930b-df3af821b9e0}) + + + + digital output changed + The name of the EventType ({38878388-9a2e-45b0-8f3e-c25073c9dc1d}) of ThingClass userLED +---------- +The name of the EventType ({470a0e30-a170-47ed-9ed3-c41db919555f}) of ThingClass digitalOutput + + + + set digital output + The name of the ActionType ({38878388-9a2e-45b0-8f3e-c25073c9dc1d}) of ThingClass userLED +---------- +The name of the ActionType ({470a0e30-a170-47ed-9ed3-c41db919555f}) of ThingClass digitalOutput + + + + Analog output + The name of the ParamType (ThingClass: analogOutput, ActionType: outputValue, ID: {6d825eb8-6d2a-4ac3-9125-9df8173116c9}) +---------- +The name of the ParamType (ThingClass: analogOutput, EventType: outputValue, ID: {6d825eb8-6d2a-4ac3-9125-9df8173116c9}) +---------- +The name of the StateType ({6d825eb8-6d2a-4ac3-9125-9df8173116c9}) of ThingClass analogOutput +---------- +The name of the ThingClass ({9094a69f-f475-4050-a345-5ab52cb19774}) + + + + Analog output changed + The name of the EventType ({6d825eb8-6d2a-4ac3-9125-9df8173116c9}) of ThingClass analogOutput + + + + Set analog output + The name of the ActionType ({6d825eb8-6d2a-4ac3-9125-9df8173116c9}) of ThingClass analogOutput + + + + Analog Input + The name of the ThingClass ({06abd6a4-e655-4243-bc9c-9bd4ef5be2e6}) + + + + Analog input changed + The name of the EventType ({2296f575-cc53-48ef-9086-6a412abfdde5}) of ThingClass analogInput + + + + Analog input + The name of the ParamType (ThingClass: analogInput, EventType: inputValue, ID: {2296f575-cc53-48ef-9086-6a412abfdde5}) +---------- +The name of the StateType ({2296f575-cc53-48ef-9086-6a412abfdde5}) of ThingClass analogInput + + + + Address + The name of the ParamType (ThingClass: uniPi, Type: plugin, ID: {fa9d0407-72fd-4f61-ae8d-c95241ddb610}) + + + + Connection changed + The name of the EventType ({f95875de-d5d5-4e7f-8873-3fe2615a0b11}) of ThingClass neuronXS51 +---------- +The name of the EventType ({bf1acd53-f3c9-4654-a220-d36eb130cda2}) of ThingClass neuronXS11 +---------- +The name of the EventType ({25b0eaa7-14eb-49ea-a869-13b1ea3bd294}) of ThingClass neuronXS50 +---------- +The name of the EventType ({7caea8c3-ac29-42fb-835b-beec7fa1ce20}) of ThingClass neuronXS40 +---------- +The name of the EventType ({ed1adb91-54ec-430b-96ca-fb5ef5cf6628}) of ThingClass neuronXS30 +---------- +The name of the EventType ({7afb047f-4ca4-469c-9171-b6de52d27504}) of ThingClass neuronXS20 +---------- +The name of the EventType ({caf378cd-eb86-4779-8618-6f9c2bd58c17}) of ThingClass neuronXS10 +---------- +The name of the EventType ({fa82f6cc-4308-4d8b-96c1-2fb1a638e04d}) of ThingClass neuronL513 +---------- +The name of the EventType ({5e689958-02f0-4e0a-9bb3-e04a6fe1dd30}) of ThingClass neuronL503 +---------- +The name of the EventType ({3a020c62-e5f9-4909-98d4-5538a8d43d9d}) of ThingClass neuronL303 +---------- +The name of the EventType ({515a70d3-d599-426f-88a2-c5a651420812}) of ThingClass neuronL203 +---------- +The name of the EventType ({688d21a7-7658-4874-b02b-9340b2c9ba12}) of ThingClass neuronM503 +---------- +The name of the EventType ({0eb77f43-dc85-450f-ab2c-d150a739570d}) of ThingClass neuronM403 +---------- +The name of the EventType ({80528228-7ecd-444f-be59-e2ff89cb20a1}) of ThingClass neuronM303 +---------- +The name of the EventType ({c7318db4-ba50-4b80-95a7-2a890eaa16c4}) of ThingClass neuronM203 +---------- +The name of the EventType ({8ad0d4b2-8256-41a9-8438-003216383215}) of ThingClass neuronM103 +---------- +The name of the EventType ({e650bb92-2dff-44e2-9500-657efba14492}) of ThingClass neuronS103 +---------- +The name of the EventType ({5d11bb59-da27-42ac-a176-27215068bd6d}) of ThingClass neuronL403 +---------- +The name of the EventType ({ab505f67-35b8-4ca5-87a8-883ee85506b7}) of ThingClass uniPi1Lite +---------- +The name of the EventType ({6f4914c1-fce8-4b7a-a73b-ad8a2f4a08ec}) of ThingClass uniPi1 + + + + Connected + The name of the ParamType (ThingClass: neuronXS51, EventType: connected, ID: {f95875de-d5d5-4e7f-8873-3fe2615a0b11}) +---------- +The name of the StateType ({f95875de-d5d5-4e7f-8873-3fe2615a0b11}) of ThingClass neuronXS51 +---------- +The name of the ParamType (ThingClass: neuronXS11, EventType: connected, ID: {bf1acd53-f3c9-4654-a220-d36eb130cda2}) +---------- +The name of the StateType ({bf1acd53-f3c9-4654-a220-d36eb130cda2}) of ThingClass neuronXS11 +---------- +The name of the ParamType (ThingClass: neuronXS50, EventType: connected, ID: {25b0eaa7-14eb-49ea-a869-13b1ea3bd294}) +---------- +The name of the StateType ({25b0eaa7-14eb-49ea-a869-13b1ea3bd294}) of ThingClass neuronXS50 +---------- +The name of the ParamType (ThingClass: neuronXS40, EventType: connected, ID: {7caea8c3-ac29-42fb-835b-beec7fa1ce20}) +---------- +The name of the StateType ({7caea8c3-ac29-42fb-835b-beec7fa1ce20}) of ThingClass neuronXS40 +---------- +The name of the ParamType (ThingClass: neuronXS30, EventType: connected, ID: {ed1adb91-54ec-430b-96ca-fb5ef5cf6628}) +---------- +The name of the StateType ({ed1adb91-54ec-430b-96ca-fb5ef5cf6628}) of ThingClass neuronXS30 +---------- +The name of the ParamType (ThingClass: neuronXS20, EventType: connected, ID: {7afb047f-4ca4-469c-9171-b6de52d27504}) +---------- +The name of the StateType ({7afb047f-4ca4-469c-9171-b6de52d27504}) of ThingClass neuronXS20 +---------- +The name of the ParamType (ThingClass: neuronXS10, EventType: connected, ID: {caf378cd-eb86-4779-8618-6f9c2bd58c17}) +---------- +The name of the StateType ({caf378cd-eb86-4779-8618-6f9c2bd58c17}) of ThingClass neuronXS10 +---------- +The name of the ParamType (ThingClass: neuronL513, EventType: connected, ID: {fa82f6cc-4308-4d8b-96c1-2fb1a638e04d}) +---------- +The name of the StateType ({fa82f6cc-4308-4d8b-96c1-2fb1a638e04d}) of ThingClass neuronL513 +---------- +The name of the ParamType (ThingClass: neuronL503, EventType: connected, ID: {5e689958-02f0-4e0a-9bb3-e04a6fe1dd30}) +---------- +The name of the StateType ({5e689958-02f0-4e0a-9bb3-e04a6fe1dd30}) of ThingClass neuronL503 +---------- +The name of the ParamType (ThingClass: neuronL303, EventType: connected, ID: {3a020c62-e5f9-4909-98d4-5538a8d43d9d}) +---------- +The name of the StateType ({3a020c62-e5f9-4909-98d4-5538a8d43d9d}) of ThingClass neuronL303 +---------- +The name of the ParamType (ThingClass: neuronL203, EventType: connected, ID: {515a70d3-d599-426f-88a2-c5a651420812}) +---------- +The name of the StateType ({515a70d3-d599-426f-88a2-c5a651420812}) of ThingClass neuronL203 +---------- +The name of the ParamType (ThingClass: neuronM503, EventType: connected, ID: {688d21a7-7658-4874-b02b-9340b2c9ba12}) +---------- +The name of the StateType ({688d21a7-7658-4874-b02b-9340b2c9ba12}) of ThingClass neuronM503 +---------- +The name of the ParamType (ThingClass: neuronM403, EventType: connected, ID: {0eb77f43-dc85-450f-ab2c-d150a739570d}) +---------- +The name of the StateType ({0eb77f43-dc85-450f-ab2c-d150a739570d}) of ThingClass neuronM403 +---------- +The name of the ParamType (ThingClass: neuronM303, EventType: connected, ID: {80528228-7ecd-444f-be59-e2ff89cb20a1}) +---------- +The name of the StateType ({80528228-7ecd-444f-be59-e2ff89cb20a1}) of ThingClass neuronM303 +---------- +The name of the ParamType (ThingClass: neuronM203, EventType: connected, ID: {c7318db4-ba50-4b80-95a7-2a890eaa16c4}) +---------- +The name of the StateType ({c7318db4-ba50-4b80-95a7-2a890eaa16c4}) of ThingClass neuronM203 +---------- +The name of the ParamType (ThingClass: neuronM103, EventType: connected, ID: {8ad0d4b2-8256-41a9-8438-003216383215}) +---------- +The name of the StateType ({8ad0d4b2-8256-41a9-8438-003216383215}) of ThingClass neuronM103 +---------- +The name of the ParamType (ThingClass: neuronS103, EventType: connected, ID: {e650bb92-2dff-44e2-9500-657efba14492}) +---------- +The name of the StateType ({e650bb92-2dff-44e2-9500-657efba14492}) of ThingClass neuronS103 +---------- +The name of the ParamType (ThingClass: neuronL403, EventType: connected, ID: {5d11bb59-da27-42ac-a176-27215068bd6d}) +---------- +The name of the StateType ({5d11bb59-da27-42ac-a176-27215068bd6d}) of ThingClass neuronL403 +---------- +The name of the ParamType (ThingClass: uniPi1Lite, EventType: connected, ID: {ab505f67-35b8-4ca5-87a8-883ee85506b7}) +---------- +The name of the StateType ({ab505f67-35b8-4ca5-87a8-883ee85506b7}) of ThingClass uniPi1Lite +---------- +The name of the ParamType (ThingClass: uniPi1, EventType: connected, ID: {6f4914c1-fce8-4b7a-a73b-ad8a2f4a08ec}) +---------- +The name of the StateType ({6f4914c1-fce8-4b7a-a73b-ad8a2f4a08ec}) of ThingClass uniPi1 + + + + Baudrate + The name of the ParamType (ThingClass: uniPi, Type: plugin, ID: {a05aaedf-5345-4ab4-b471-8c7d106b473e}) + + + + Circuit + The name of the ParamType (ThingClass: userLED, Type: thing, ID: {88fffbd6-6469-47ce-bfba-700da90a6075}) +---------- +The name of the ParamType (ThingClass: analogInput, Type: thing, ID: {cc6eb664-9fd2-457d-9d0d-0eb9703db4a2}) +---------- +The name of the ParamType (ThingClass: analogOutput, Type: thing, ID: {46e606cc-67ee-4891-bc39-8fb0565c87da}) +---------- +The name of the ParamType (ThingClass: digitalOutput, Type: thing, ID: {c01d5bde-de5d-42c5-b462-79745827875a}) +---------- +The name of the ParamType (ThingClass: digitalInput, Type: thing, ID: {9c84d9b8-fdc7-41c1-9559-08f061ffc7a6}) + + + + Modbus slave address + The name of the ParamType (ThingClass: neuronXS51, Type: thing, ID: {8f40b075-ebed-4ce1-b9e7-a37bb31656c4}) +---------- +The name of the ParamType (ThingClass: neuronXS11, Type: thing, ID: {5b8d8149-f08a-451e-9766-08966f7f91c1}) +---------- +The name of the ParamType (ThingClass: neuronXS50, Type: thing, ID: {6d01f6b3-7c3c-4fc8-acf2-dc9811340a76}) +---------- +The name of the ParamType (ThingClass: neuronXS40, Type: thing, ID: {6b2da1ee-5cae-4325-913e-21d26d5909c3}) +---------- +The name of the ParamType (ThingClass: neuronXS30, Type: thing, ID: {956254a2-83f5-4f3c-8e79-e1b009a7e203}) +---------- +The name of the ParamType (ThingClass: neuronXS20, Type: thing, ID: {a5c97b47-580b-4ea3-8755-ef68380f5c2a}) +---------- +The name of the ParamType (ThingClass: neuronXS10, Type: thing, ID: {c105e97a-1e00-44fd-ac10-d43e731e43b0}) + + + + Neuron L203 + The name of the ThingClass ({366bac45-c602-4c45-9812-1d3d04b2c3db}) + + + + Neuron L303 + The name of the ThingClass ({fc1a9aab-8573-42fe-8ed4-4876795870c2}) + + + + Neuron L403 + The name of the ThingClass ({72637166-6730-4b2c-9b5d-4d2066c2fea8}) + + + + Neuron L503 + The name of the ThingClass ({58d33a7f-30ac-4d79-94a1-2013dc50743e}) + + + + Neuron L513 + The name of the ThingClass ({4b57e164-5f62-4518-afc1-15a659a2c402}) + + + + Neuron M103 + The name of the ThingClass ({58632506-8d06-4ad0-98d0-275ef8a88955}) + + + + Neuron M203 + The name of the ThingClass ({d254dbed-4cf0-4fe3-96da-9adfd8d1c912}) + + + + Neuron M303 + The name of the ThingClass ({6ee92fd5-c169-4050-aa3c-d8289bee20ec}) + + + + Neuron M403 + The name of the ThingClass ({0621f5f1-8531-4d44-800e-52f926c58b17}) + + + + Neuron M503 + The name of the ThingClass ({0d5a09de-daf8-469f-803c-520f763167df}) + + + + Neuron S103 + The name of the ThingClass ({c28dc232-6797-4aff-83dd-8d811d485482}) + + + + Neuron xS10 + The name of the ThingClass ({9bfe46d0-5dbd-432c-877f-1ff47faf6e17}) + + + + Neuron xS20 + The name of the ThingClass ({9e2e13bb-c18c-438f-989f-52363561ce85}) + + + + Neuron xS30 + The name of the ThingClass ({a1ec57b1-fcf9-4540-80c9-40f78cddc85f}) + + + + Neuron xS40 + The name of the ThingClass ({05c78946-48f4-4e1b-9d45-90fbd66c71c0}) + + + + Neuron xS50 + The name of the ThingClass ({c31f5e8c-a27c-49db-b5a8-dd065336b79a}) + + + + Parity + The name of the ParamType (ThingClass: uniPi, Type: plugin, ID: {24323f2c-87f9-4b46-aca9-9c98ca731008}) + + + + Serial port + The name of the ParamType (ThingClass: uniPi, Type: plugin, ID: {1e34aec6-0ff4-400d-80ff-32094612b325}) + + + + UniPi 1 + The name of the ThingClass ({f9f5d5eb-a768-40da-af62-55b0b486a5e5}) + + + + UniPi 1 Lite + The name of the ThingClass ({6ecc110c-f8dc-48af-affd-feef7944421d}) + + + + User LED + The name of the ThingClass ({6a87e9b3-7f3d-4b7c-8958-905ec039ef57}) + + + + Neuron xS11 + The name of the ThingClass ({f59bfba2-0455-49f2-b92d-badfec5dcc01}) + + + + Neuron xS51 + The name of the ThingClass ({0e11fbd3-8d4a-4fd8-aeeb-25ee2d134a17}) + + + + diff --git a/unipi/unipi.cpp b/unipi/unipi.cpp new file mode 100644 index 0000000..e249b14 --- /dev/null +++ b/unipi/unipi.cpp @@ -0,0 +1,410 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "unipi.h" +#include "extern-plugininfo.h" +#include +#include + +UniPi::UniPi(I2CManager *i2cManager, UniPiType unipiType, QObject *parent) : + QObject(parent), + m_i2cManager(i2cManager), + m_unipiType(unipiType) +{ + m_mcp23008 = new MCP23008("i2c-1", 0x20, this); + m_analogInputChannel1 = new MCP342XChannel("i2c-1", 0x68, 0, MCP342XChannel::Gain_1, this); + m_analogInputChannel2 = new MCP342XChannel("i2c-1", 0x68, 1, MCP342XChannel::Gain_1, this); + + m_analogOutput = new UniPiPwm(0, this); +} + +UniPi::~UniPi() +{ + m_mcp23008->deleteLater(); + + //m_i2cManager->close(m_analogInputChannel1); + m_analogInputChannel1->deleteLater(); + //m_i2cManager->close(m_analogInputChannel2); + m_analogInputChannel2->deleteLater(); + + Q_FOREACH (GpioMonitor *gpio, m_monitorGpios.keys()) { + gpio->disable(); + gpio->deleteLater(); + } + + m_analogOutput->disable(); + m_analogOutput->deleteLater(); +} + +bool UniPi::init() +{ + //init MCP23008 Outputs + if (m_mcp23008->init()) { + m_mcp23008->writeRegister(MCP23008::RegisterAddress::IODIR, 0x00); //set all pins as outputs + m_mcp23008->writeRegister(MCP23008::RegisterAddress::IPOL, 0x00); //set all pins to non inverted mode 1 = high + m_mcp23008->writeRegister(MCP23008::RegisterAddress::GPPU, 0x00); //disable all pull up resistors + m_mcp23008->writeRegister(MCP23008::RegisterAddress::OLAT, 0x00); //Set all outputs to low + } else { + qCWarning(dcUniPi()) << "Could not init MCP23008"; + return false; + } + + // In case of re-init + if (!m_monitorGpios.isEmpty()) { + foreach (GpioMonitor *gpio, m_monitorGpios.keys()) { + m_monitorGpios.remove(gpio); + gpio->deleteLater(); + } + } + + //Init Raspberry Pi Inputs + foreach (QString circuit, digitalInputs()){ + + int pin = getPinFromCircuit(circuit); + + GpioMonitor *gpioMonitor = new GpioMonitor(pin, this); + if (!gpioMonitor->enable()) { + qCWarning(dcUniPi()) << "Could not enable gpio monitor for pin" << pin; + return false; + } else { + QProcess::execute(QString("gpio -g mode %1 up").arg(pin)); + QTimer::singleShot(1000, this, [gpioMonitor, circuit, this]() { + emit digitalInputStatusChanged(circuit, gpioMonitor->value()); //set initial status + connect(gpioMonitor, &GpioMonitor::valueChanged, this, &UniPi::onInputValueChanged); + m_monitorGpios.insert(gpioMonitor, circuit); + }); + } + } + //Init Raspberry Pi PWM output + if (!m_analogOutput->exportPwm()) { + qCWarning(dcUniPi()) << "Error could not export analog output"; + return false; + } + + if (!m_analogOutput->enable()) { + qCWarning(dcUniPi()) << "Error could not enable analog output"; + return false; + } + m_analogOutput->setPolarity(UniPiPwm::PolarityNormal); + m_analogOutput->setFrequency(400); + m_analogOutput->setPercentage(0); + + if (!m_i2cManager->open(m_analogInputChannel1)) { + qCDebug(dcUniPi()) << "Failed to open analog channel 1"; + return false; + } + connect(m_analogInputChannel1, &MCP342XChannel::readingAvailable, this, [this] (const QByteArray &data){ + + if (data.length() < 3) { + qCWarning(dcUniPi()) << "Error reading data from analog channel 1" << data; + return; + } + qint16 rawValue = (static_cast(data[0]) << 8) | data[1]; + double voltage = (rawValue * 0.001 * 5.51)/2.00; + emit analogInputStatusChanged("AI1", voltage); + }); + m_i2cManager->startReading(m_analogInputChannel1, 5000); + + if (!m_i2cManager->open(m_analogInputChannel2)) { + qCDebug(dcUniPi()) << "Failed to open analog channel 2"; + return false; + } + connect(m_analogInputChannel2, &MCP342XChannel::readingAvailable, this, [this] (const QByteArray &data){ + + if (data.length() < 3) { + qCWarning(dcUniPi()) << "Error reading data from analog channel 2" << data; + return; + } + qint16 rawValue = (static_cast(data[0]) << 8) | data[1]; + double voltage = (rawValue * 0.001 * 5.51)/2.00; + emit analogInputStatusChanged("AI2", voltage); + }); + m_i2cManager->startReading(m_analogInputChannel2, 5000); + return true; +} + +QString UniPi::type() +{ + QString type; + switch (m_unipiType) { + case UniPiType::UniPi1: + type = "UniPi 1"; + break; + case UniPiType::UniPi1Lite: + type = "UniPi 1 Lite"; + break; + } + return type; +} + +QList UniPi::digitalInputs() +{ + QList inputs; + switch (m_unipiType) { + case UniPiType::UniPi1: + for (int i = 1; i < 15; ++i) { + inputs.append(QString("DI%1").arg(i)); + } + break; + case UniPiType::UniPi1Lite: + for (int i = 1; i < 7; ++i) { + inputs.append(QString("DI%1").arg(i)); + } + break; + } + return inputs; +} + +QList UniPi::digitalOutputs() +{ + QList outputs; + switch (m_unipiType) { + case UniPiType::UniPi1: + for (int i = 1; i < 9; ++i) { + outputs.append(QString("DO%1").arg(i)); + } + break; + case UniPiType::UniPi1Lite: + for (int i = 1; i < 7; ++i) { + outputs.append(QString("DO%1").arg(i)); + } + break; + } + return outputs; +} + +QList UniPi::analogInputs() +{ + QList inputs; + switch (m_unipiType) { + case UniPiType::UniPi1: + for (int i = 1; i < 3; ++i) { + inputs.append(QString("AI%1").arg(i)); + } + break; + case UniPiType::UniPi1Lite: + for (int i = 1; i < 3; ++i) { + inputs.append(QString("AI%1").arg(i)); + } + break; + } + return inputs; +} + +QList UniPi::analogOutputs() +{ + QList outputs; + outputs.append("AO"); + return outputs; +} + +int UniPi::getPinFromCircuit(const QString &circuit) +{ + int pin = 0; + if (circuit.startsWith("DI")) { //Raspberry Pi Input Pins + switch (circuit.mid(2, 2).toInt()) { + case 1: //DI01 GPIO04 Digital input + pin = 4; + break; + case 2: //DI02 GPIO17 Digital input + pin = 17; + break; + case 3: //DI03 GPIO27 Digital input + pin = 27; + break; + case 4: //DI04 GPIO23 Digital input + pin = 23; + break; + case 5: //DI05 GPIO22 Digital input + pin = 22; + break; + case 6: //DI06 GPIO24 Digital input + pin = 24; + break; + case 7: //I07 GPIO11 Digital Input + pin = 11; + break; + case 8: //I08 GPIO07 Digital Input + pin = 7; + break; + case 9: //I09 GPIO08 Digital Input + pin = 8; + break; + case 10: //I10 GPIO09 Digital Input + pin = 9; + break; + case 11: //I11 GPIO25 Digital Input + pin = 25; + break; + case 12: //DI12 GPIO10 Digital input + pin = 10; + break; + case 13: //DI13 GPIO31 Digital input + pin = 31; + break; + case 14: //DI14 GPIO30 Digital input + pin = 30; + break; + default: + return 0; + } + } + if (circuit.startsWith("DO")) { //MCP23008 Output Pins + switch (circuit.mid(2, 2).toInt()) { + case 01: //DO1 GP07 Digital Output + pin = 7; + break; + case 02: //DO1 GP07 Digital Output + pin = 6; + break; + case 03: //DO1 GP07 Digital Output + pin = 5; + break; + case 04: //DO1 GP07 Digital Output + pin = 4; + break; + case 05: //DO1 GP07 Digital Output + pin = 3; + break; + case 06: //DO1 GP07 Digital Output + pin = 2; + break; + default: + return 0; + } + } + + if (circuit.startsWith("AO")) { //Raspberry Pi Analog Output + switch (circuit.mid(2, 2).toInt()) { + case 0: //AO GPIO18 PWM Analog Output 0-10V + pin = 18; + break; + default: + return 0; + } + } + + if (circuit.startsWith("AI")) { //MCP3422 analog input channels + switch (circuit.mid(2, 2).toInt()) { + case 1: + pin = 1; //MCP3422 Channel 1 + break; + case 2: + pin = 2; //MCP3422 Channel 2 + break; + default: + return 0; + } + } + return pin; +} + +bool UniPi::setDigitalOutput(const QString &circuit, bool status) +{ + int pin = getPinFromCircuit(circuit); + if (pin == 0) { + qWarning(dcUniPi()) << "Out of range pin number"; + return false; + } + + quint8 registerValue; + if(!m_mcp23008->readRegister(MCP23008::RegisterAddress::OLAT, ®isterValue)) + return false; + if (status) { + registerValue |= (1 << pin); + } else { + registerValue &= ~(1 << pin); + } + //write output register + if(!m_mcp23008->writeRegister(MCP23008::RegisterAddress::OLAT, registerValue)) + return false; + + getDigitalOutput(circuit); + return true; +} + +bool UniPi::getDigitalOutput(const QString &circuit) +{ + int pin = getPinFromCircuit(circuit); + if (pin > 7) + return false; + + uint8_t registerValue; + if(!m_mcp23008->readRegister(MCP23008::RegisterAddress::OLAT, ®isterValue)) + return false; + + emit digitalOutputStatusChanged(circuit, ( registerValue & (1 << pin))); + return true; +} + +bool UniPi::getDigitalInput(const QString &circuit) +{ + int pin = getPinFromCircuit(circuit); + if (pin == 0) { + qCWarning(dcUniPi()) << "Out of range pin number"; + return false; + } + if (!m_monitorGpios.values().contains(circuit)) { + qCWarning(dcUniPi()) << "Could not read digital inpu, GPIO not initialized" << circuit; + return false; + } + //Read RPi pins + GpioMonitor *gpio = m_monitorGpios.key(circuit); + digitalInputStatusChanged(circuit, gpio->value()); + return true; +} + +bool UniPi::setAnalogOutput(double value) +{ + int percentage = value * 10; //convert volt to percentage + if(!m_analogOutput->setPercentage(percentage)) + return false; + + getAnalogOutput(); + return true; +} + +bool UniPi::getAnalogOutput() +{ + double voltage = m_analogOutput->percentage()/10.0; + emit analogOutputStatusChanged(voltage); + + return true; +} + +void UniPi::onInputValueChanged(const bool &value) +{ + GpioMonitor *monitor = static_cast(sender()); + if (!m_monitorGpios.contains(monitor)) + return; + + QString circuit = m_monitorGpios.value(monitor); + emit digitalInputStatusChanged(circuit, value); +} diff --git a/unipi/unipi.h b/unipi/unipi.h new file mode 100644 index 0000000..ae0cd35 --- /dev/null +++ b/unipi/unipi.h @@ -0,0 +1,98 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef UNIPI_H +#define UNIPI_H + +#include +#include "gpiodescriptor.h" +#include "mcp23008.h" +#include "mcp342xchannel.h" +#include "unipipwm.h" + +#include "hardware/gpio.h" +#include "hardware/gpiomonitor.h" +#include "hardware/i2c/i2cmanager.h" + +class I2CDevice; + +class UniPi : public QObject +{ + Q_OBJECT + + +public: + enum UniPiType { + UniPi1, + UniPi1Lite + }; + + explicit UniPi(I2CManager *i2cManager, UniPiType unipiType, QObject *parent = nullptr); + ~UniPi() override; + + bool init(); + QString type(); + + bool setDigitalOutput(const QString &cicuit, bool status); + bool getDigitalOutput(const QString &circuit); + bool getDigitalInput(const QString &circuit); + + bool setAnalogOutput(double value); + bool getAnalogOutput(); + + QList digitalInputs(); + QList digitalOutputs(); + QList analogInputs(); + QList analogOutputs(); + +private: + I2CManager *m_i2cManager; + + UniPiType m_unipiType = UniPiType::UniPi1; + MCP23008 *m_mcp23008 = nullptr; + + MCP342XChannel *m_analogInputChannel1 = nullptr; + MCP342XChannel *m_analogInputChannel2 = nullptr; + + int getPinFromCircuit(const QString &cicuit); + QHash m_monitorGpios; + UniPiPwm *m_analogOutput = nullptr; + +signals: + void digitalOutputStatusChanged(const QString &circuit, const bool &value); + void digitalInputStatusChanged(const QString &circuit, const bool &value); + void analogInputStatusChanged(const QString &circuit, double value); + void analogOutputStatusChanged(double value); + +private slots: + void onInputValueChanged(const bool &value); +}; + +#endif // UNIPI_H diff --git a/unipi/unipi.png b/unipi/unipi.png new file mode 100644 index 0000000..f8d7964 Binary files /dev/null and b/unipi/unipi.png differ diff --git a/unipi/unipi.pro b/unipi/unipi.pro new file mode 100644 index 0000000..3a68943 --- /dev/null +++ b/unipi/unipi.pro @@ -0,0 +1,35 @@ +include(../plugins.pri) + +LIBS += \ + -li2c \ + +QT += \ + network \ + serialport \ + serialbus \ + +SOURCES += \ + integrationpluginunipi.cpp \ + neuron.cpp \ + neuronextension.cpp \ + mcp23008.cpp \ + i2cport.cpp \ + unipi.cpp \ + mcp342xchannel.cpp \ + unipipwm.cpp + +HEADERS += \ + integrationpluginunipi.h \ + neuron.h \ + neuronextension.h \ + mcp23008.h \ + i2cport.h \ + unipi.h \ + i2cport_p.h \ + mcp342xchannel.h \ + unipipwm.h + +MAP_FILES.files = files(modbus_maps/*) +MAP_FILES.path = [QT_INSTALL_PREFIX]/share/nymea/modbus/ +INSTALLS += MAP_FILES + diff --git a/unipi/unipipwm.cpp b/unipi/unipipwm.cpp new file mode 100644 index 0000000..ff1c44c --- /dev/null +++ b/unipi/unipipwm.cpp @@ -0,0 +1,294 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "unipipwm.h" +#include "extern-plugininfo.h" + +UniPiPwm::UniPiPwm(int chipNumber, QObject *parent) : + QObject(parent), + m_chipNumber(chipNumber), + m_period(0), + m_dutyCycle(0) +{ + m_pwmDirectory = QDir("/sys/class/pwm/pwmchip" + QString::number(chipNumber) + "/"); +} + +/*! Destructor for this UniPiPwm interface. */ +UniPiPwm::~UniPiPwm() +{ + unexportPwm(); +} + +/*! Returns true, if the path \tt{/sys/class/pwm} exists and is not empty. */ +bool UniPiPwm::isAvailable() +{ + QDir pwmDirectory("/sys/class/pwm"); + return pwmDirectory.exists() && !pwmDirectory.entryList().isEmpty(); +} + +bool UniPiPwm::exportPwm() +{ + QFile exportFile(m_pwmDirectory.path() + "/export"); + if (!exportFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not export pwm1 on chip" << m_chipNumber; + return false; + } + + QTextStream out(&exportFile); + out << 1; + exportFile.close(); + return true; +} + +/*! Returns true, if this UniPiPwm interface has been enabled successfully. */ +bool UniPiPwm::enable() +{ + QFile enableFile(m_pwmDirectory.path() + "/pwm1/enable"); + if (!enableFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not enable pwm1 on chip" << m_chipNumber; + return false; + } + + QTextStream out(&enableFile); + out << 1; + enableFile.close(); + return true; +} + +/*! Returns true, if this UniPiPwm interface has been disabled successfully. */ +bool UniPiPwm::disable() +{ + QFile enableFile(m_pwmDirectory.path() + "/pwm1/enable"); + if (!enableFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not disable pwm1 on chip" << m_chipNumber; + return false; + } + + QTextStream out(&enableFile); + out << 0; + enableFile.close(); + return true; +} + +/*! Returns true, if this UniPiPwm interface is enabled. */ +bool UniPiPwm::isEnabled() +{ + QFile enableFile(m_pwmDirectory.path() + "/pwm1/enable"); + if (!enableFile.open(QIODevice::ReadOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not read" << enableFile.fileName(); + return false; + } + QString value; + QTextStream in(&enableFile); + in >> value; + enableFile.close(); + + if (value == "1") + return true; + + return false; +} + +/*! Returns the period of this UniPiPwm. */ +long UniPiPwm::period() +{ + // period = active + inactive time + QFile periodFile(m_pwmDirectory.path() + "/pwm1/period"); + if (!periodFile.open(QIODevice::ReadOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << periodFile.fileName(); + return false; + } + + QString value; + QTextStream in(&periodFile); + in >> value; + periodFile.close(); + m_period = value.toLong(); + return m_period; +} + +/*! Returns true, if the period of this UniPiPwm has been set to \a nanoSeconds successfully. */ +bool UniPiPwm::setPeriod(long nanoSeconds) +{ + // the current duty cycle can not be greater than the period + if (dutyCycle() > nanoSeconds && !setDutyCycle(nanoSeconds)) + return false; + + // period = active + inactive time + QFile periodFile(m_pwmDirectory.path() + "/pwm1/period"); + if (!periodFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << periodFile.fileName(); + return false; + } + QTextStream out(&periodFile); + out << QString::number(nanoSeconds); + periodFile.close(); + m_period = nanoSeconds; + return true; +} + +/*! Returns the frequency [kHz] of the UniPiPwm. */ +double UniPiPwm::frequency() +{ + return (100000000.0 / (period() * 1000)); +} + +/*! Returns true, if the frequency [kHz] of this Pwm has been set successfully to the given \a kHz. */ +bool UniPiPwm::setFrequency(double kHz) +{ + // p = 1 / f + long nanoSeconds = (long)(100000000 / (kHz * 1000)); + return setPeriod(nanoSeconds); +} + +/*! Returns the duty cycle [ns] of the UniPiPwm. The duty cycle is the active time of one period. */ +long UniPiPwm::dutyCycle() +{ + QFile dutyCycleFile(m_pwmDirectory.path() + "/pwm1/duty_cycle"); + if (!dutyCycleFile.open(QIODevice::ReadOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << dutyCycleFile.fileName(); + return false; + } + + QString value; + QTextStream in(&dutyCycleFile); + in >> value; + dutyCycleFile.close(); + m_dutyCycle = value.toLong(); + return m_dutyCycle; +} + +/*! Returns true, if the duty cycle [ns] of the UniPiPwm has been set successfully to the given \a nanoSeconds. The duty cycle is the active time of one period. */ +bool UniPiPwm::setDutyCycle(long nanoSeconds) +{ + // can not be greater than period or negative + if (nanoSeconds > m_period || nanoSeconds < 0) { + qCWarning(dcUniPi()) << "ERROR: duty cycle has to be positive and smaller than the period"; + return false; + } + + QFile dutyCycleFile(m_pwmDirectory.path() + "/pwm1/duty_cycle"); + if (!dutyCycleFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << dutyCycleFile.fileName(); + return false; + } + QTextStream out(&dutyCycleFile); + out << QString::number(nanoSeconds); + dutyCycleFile.close(); + m_dutyCycle = nanoSeconds; + return true; +} + +/*! Returns the Polarity of this UniPiPwm. */ +UniPiPwm::Polarity UniPiPwm::polarity() +{ + QFile polarityFile(m_pwmDirectory.path() + "/pwm1/polarity"); + if (!polarityFile.open(QIODevice::ReadOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << polarityFile.fileName(); + return PolarityInvalid; + } + + QString value; + QTextStream in(&polarityFile); + in >> value; + polarityFile.close(); + + if (value == "normal") { + return PolarityNormal; + } else if(value == "inversed") { + return PolarityInversed; + } + + return PolarityInvalid; +} + +/*! Returns true, if the polarity of this UniPiPwm has been set to \a polarity successfully. */ +bool UniPiPwm::setPolarity(UniPiPwm::Polarity polarity) +{ + if (polarity == UniPiPwm::PolarityInvalid) + return false; + + // Note: the polarity can only be changed if the pwm is disabled. + bool wasEnabled = isEnabled(); + if (wasEnabled && !disable()) + return false; + + QFile polarityFile(m_pwmDirectory.path() + "/pwm1/polarity"); + if (!polarityFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not open" << polarityFile.fileName(); + return false; + } + + QTextStream out(&polarityFile); + switch (polarity) { + case PolarityNormal: + out << "normal"; + break; + case PolarityInversed: + out << "inversed"; + break; + default: + break; + } + polarityFile.close(); + + if (wasEnabled) + enable(); + + return true; +} + +/*! Returns the current percentage of this UniPiPwm. */ +int UniPiPwm::percentage() +{ + return (int)(dutyCycle() * (100.0 / period()) + 0.5); +} + +/*! Returns true, if the percentage of this UniPiPwm has been set to \a percentage successfully. */ +bool UniPiPwm::setPercentage(int percentage) +{ + long nanoSeconds = period() * (percentage / 100.0); + return setDutyCycle(nanoSeconds); +} + +/*! Returns true, if this UniPiPwm interface has been unexported successfully. */ +bool UniPiPwm::unexportPwm() +{ + QFile unexportFile(m_pwmDirectory.path() + "/unexport"); + if (!unexportFile.open(QIODevice::WriteOnly)) { + qCWarning(dcUniPi()) << "ERROR: could not unexport UniPiPwm" << m_chipNumber; + return false; + } + + QTextStream out(&unexportFile); + out << 0; + unexportFile.close(); + return true; +} diff --git a/unipi/unipipwm.h b/unipi/unipipwm.h new file mode 100644 index 0000000..0865fa0 --- /dev/null +++ b/unipi/unipipwm.h @@ -0,0 +1,88 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project 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 +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef UNIPIPWM_H +#define UNIPIPWM_H + +#include +#include +#include +#include + +class UniPiPwm : public QObject +{ + Q_OBJECT +public: + enum Polarity { + PolarityNormal, + PolarityInversed, + PolarityInvalid + }; + + explicit UniPiPwm(int chipNumber, QObject *parent = nullptr); + ~UniPiPwm(); + + static bool isAvailable(); + + bool exportPwm(); + + bool enable(); + bool disable(); + + bool isEnabled(); + + int chipNumber(); + + long period(); + bool setPeriod(long nanoSeconds); + + double frequency(); + bool setFrequency(double kHz); + + long dutyCycle(); + bool setDutyCycle(long nanoSeconds); + + UniPiPwm::Polarity polarity(); + bool setPolarity(UniPiPwm::Polarity polarity); + + int percentage(); + bool setPercentage(int percentage); + +private: + int m_chipNumber; + long m_period; + long m_dutyCycle; + QDir m_pwmDirectory; + + bool unexportPwm(); +}; + + +#endif // UNIPIPWM_H