Skip to content

Commit 18fc6ba

Browse files
committed
Added Server.writeAnsi and Server.readAnsi methods
1 parent 78c8650 commit 18fc6ba

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

omodsim/jsobjects/server.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "server.h"
2+
#include "ansiutils.h"
23
#include "byteorderutils.h"
34

45
///
@@ -136,6 +137,35 @@ void Server::writeCoil(quint16 address, bool value)
136137
_mbMultiServer->writeValue(QModbusDataUnit::Coils, address, value, *_byteOrder);
137138
}
138139

140+
///
141+
/// \brief Server::readAnsi
142+
/// \param reg
143+
/// \param address
144+
/// \param swapped
145+
/// \return
146+
///
147+
QString Server::readAnsi(Register::Type reg, quint16 address, const QString& codepage) const
148+
{
149+
address -= _addressBase == Address::Base::Base0 ? 0 : 1;
150+
const auto data = _mbMultiServer->data((QModbusDataUnit::RegisterType)reg, address, 1);
151+
return printableAnsi(uint16ToAnsi(toByteOrderValue(data.value(0), *_byteOrder)), codepage);
152+
}
153+
154+
///
155+
/// \brief Server::writeAnsi
156+
/// \param reg
157+
/// \param address
158+
/// \param value
159+
/// \param swapped
160+
///
161+
void Server::writeAnsi(Register::Type reg, quint16 address, const QString& value, const QString& codepage)
162+
{
163+
address -= _addressBase == Address::Base::Base0 ? 0 : 1;
164+
auto codec = QTextCodec::codecForName(codepage.toUtf8());
165+
if(codec == nullptr) codec = QTextCodec::codecForLocale();
166+
_mbMultiServer->writeValue(QModbusDataUnit::HoldingRegisters, address, uint16FromAnsi(codec->fromUnicode(value)), *_byteOrder);
167+
}
168+
139169
///
140170
/// \brief Server::readInt32
141171
/// \param reg

omodsim/jsobjects/server.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ class Server : public QObject
5656
Q_INVOKABLE bool readCoil(quint16 address) const;
5757
Q_INVOKABLE void writeCoil(quint16 address, bool value);
5858

59+
Q_INVOKABLE QString readAnsi(Register::Type reg, quint16 address, const QString& codepage) const;
60+
Q_INVOKABLE void writeAnsi(Register::Type reg, quint16 address, const QString& value, const QString& codepage);
61+
5962
Q_INVOKABLE qint32 readInt32(Register::Type reg, quint16 address, bool swapped) const;
6063
Q_INVOKABLE void writeInt32(Register::Type reg, quint16 address, qint32 value, bool swapped);
6164

0 commit comments

Comments
 (0)