Skip to content

Commit bab16df

Browse files
committed
Added function to read/write 32-bit long integers values from script
1 parent 20ca0af commit bab16df

4 files changed

Lines changed: 113 additions & 0 deletions

File tree

omodsim/jsobjects/server.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,54 @@ void Server::writeCoil(quint16 address, bool value)
108108
_mbMultiServer->writeValue(QModbusDataUnit::Coils, address - 1, value, *_byteOrder);
109109
}
110110

111+
///
112+
/// \brief Server::readLong
113+
/// \param reg
114+
/// \param address
115+
/// \param swapped
116+
/// \return
117+
///
118+
qint32 Server::readLong(Register::Type reg, quint16 address, bool swapped) const
119+
{
120+
return _mbMultiServer->readLong((QModbusDataUnit::RegisterType)reg, address - 1, *_byteOrder, swapped);
121+
}
122+
123+
///
124+
/// \brief Server::writeLong
125+
/// \param reg
126+
/// \param address
127+
/// \param value
128+
/// \param swapped
129+
///
130+
void Server::writeLong(Register::Type reg, quint16 address, qint32 value, bool swapped)
131+
{
132+
_mbMultiServer->writeLong((QModbusDataUnit::RegisterType)reg, address - 1, value, *_byteOrder, swapped);
133+
}
134+
135+
///
136+
/// \brief Server::readUnsignedLong
137+
/// \param reg
138+
/// \param address
139+
/// \param swapped
140+
/// \return
141+
///
142+
quint32 Server::readUnsignedLong(Register::Type reg, quint16 address, bool swapped) const
143+
{
144+
return _mbMultiServer->readUnsignedLong((QModbusDataUnit::RegisterType)reg, address - 1, *_byteOrder, swapped);
145+
}
146+
147+
///
148+
/// \brief Server::writeUnsignedLong
149+
/// \param reg
150+
/// \param address
151+
/// \param value
152+
/// \param swapped
153+
///
154+
void Server::writeUnsignedLong(Register::Type reg, quint16 address, quint32 value, bool swapped)
155+
{
156+
_mbMultiServer->writeUnsignedLong((QModbusDataUnit::RegisterType)reg, address - 1, value, *_byteOrder, swapped);
157+
}
158+
111159
///
112160
/// \brief Server::readFloat
113161
/// \param reg

omodsim/jsobjects/server.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ class Server : public QObject
4141
Q_INVOKABLE bool readCoil(quint16 address) const;
4242
Q_INVOKABLE void writeCoil(quint16 address, bool value);
4343

44+
Q_INVOKABLE qint32 readLong(Register::Type reg, quint16 address, bool swapped) const;
45+
Q_INVOKABLE void writeLong(Register::Type reg, quint16 address, qint32 value, bool swapped);
46+
47+
Q_INVOKABLE quint32 readUnsignedLong(Register::Type reg, quint16 address, bool swapped) const;
48+
Q_INVOKABLE void writeUnsignedLong(Register::Type reg, quint16 address, quint32 value, bool swapped);
49+
4450
Q_INVOKABLE float readFloat(Register::Type reg, quint16 address, bool swapped) const;
4551
Q_INVOKABLE void writeFloat(Register::Type reg, quint16 address, float value, bool swapped);
4652

omodsim/modbusmultiserver.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,59 @@ void ModbusMultiServer::writeValue(QModbusDataUnit::RegisterType pointType, quin
448448
setData(data);
449449
}
450450

451+
///
452+
/// \brief ModbusMultiServer::readLong
453+
/// \param pointType
454+
/// \param pointAddress
455+
/// \param order
456+
/// \param swapped
457+
/// \return
458+
///
459+
qint32 ModbusMultiServer::readLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, ByteOrder order, bool swapped)
460+
{
461+
const auto data = this->data(pointType, pointAddress, 2);
462+
return swapped ? makeLong(data.value(1), data.value(0), order): makeLong(data.value(0), data.value(1), order);
463+
}
464+
465+
///
466+
/// \brief ModbusMultiServer::writeLong
467+
/// \param pointType
468+
/// \param pointAddress
469+
/// \param value
470+
/// \param order
471+
/// \param swapped
472+
///
473+
void ModbusMultiServer::writeLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, qint32 value, ByteOrder order, bool swapped)
474+
{
475+
setData(createLongDataUnit(pointType, pointAddress, value, order, swapped));
476+
}
477+
478+
///
479+
/// \brief ModbusMultiServer::readUnsignedLong
480+
/// \param pointType
481+
/// \param pointAddress
482+
/// \param order
483+
/// \param swapped
484+
/// \return
485+
///
486+
quint32 ModbusMultiServer::readUnsignedLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, ByteOrder order, bool swapped)
487+
{
488+
return (quint32)readLong(pointType, pointAddress, order, swapped);
489+
}
490+
491+
///
492+
/// \brief ModbusMultiServer::writeUnsignedLong
493+
/// \param pointType
494+
/// \param pointAddress
495+
/// \param value
496+
/// \param order
497+
/// \param swapped
498+
///
499+
void ModbusMultiServer::writeUnsignedLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint32 value, ByteOrder order, bool swapped)
500+
{
501+
writeLong(pointType, pointAddress, value, order, swapped);
502+
}
503+
451504
///
452505
/// \brief ModbusMultiServer::readFloat
453506
/// \param pointType

omodsim/modbusmultiserver.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ class ModbusMultiServer final : public QObject
114114
void writeValue(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 value, ByteOrder order);
115115
void writeRegister(QModbusDataUnit::RegisterType pointType, const ModbusWriteParams& params);
116116

117+
qint32 readLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, ByteOrder order, bool swapped);
118+
void writeLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, qint32 value, ByteOrder order, bool swapped);
119+
120+
quint32 readUnsignedLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, ByteOrder order, bool swapped);
121+
void writeUnsignedLong(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint32 value, ByteOrder order, bool swapped);
122+
117123
float readFloat(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, ByteOrder order, bool swapped);
118124
void writeFloat(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, float value, ByteOrder order, bool swapped);
119125

0 commit comments

Comments
 (0)