#include <dlt698/app.hpp>
#include <dlt698/standard/catalog.hpp>
#include <iostream>
int main() {
using namespace dlt698;
namespace oi = standard::oi;
const standard::DeviceLayout layout{standard::Wiring::three_phase, 4, 21};
app::ClientOptions options;
options.protocol.server.bytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
app::Client client(options);
auto connected = client.connect_tcp("127.0.0.1", 6980);
if (!connected) {
std::cerr << connected.error().context << '\n';
return 1;
}
auto oad = standard::make_oad(oi::current, 2, 0, layout);
if (!oad) {
std::cerr << oad.error().context << '\n';
client.disconnect();
return 1;
}
auto value = client.get(oad.value());
if (!value) {
std::cerr << value.error().context << '\n';
client.disconnect();
return 1;
}
if (const auto dar = std::get_if<std::uint8_t>(&value.value())) {
std::cerr << "meter does not provide current, DAR=" << unsigned(*dar) << '\n';
client.disconnect();
return 1;
}
const auto& data = std::get<model::Data>(value.value());
auto numbers = standard::engineering_values(oad.value(), data, layout);
if (!numbers) {
std::cerr << numbers.error().context << '\n';
client.disconnect();
return 1;
}
static const char* kPhases[] = {"A", "B", "C"};
for (std::size_t i = 0; i < numbers.value().size(); ++i)
std::cout << "current " << kPhases[i] << " = "
<< standard::decimal_text(numbers.value()[i]) << ' '
<< standard::unit_symbol(numbers.value()[i].scaling.unit) << '\n';
// 输出:
// current A = 5.000 A
// current B = 4.980 A
// current C = 5.010 A
client.disconnect();
return 0;
}