ChimeraTK-DeviceAccess 03.25.00
Loading...
Searching...
No Matches
read_temperature_doocs_zmq.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4/* Unfortunately the DeviceAccess base package does not have a demo push type accessor we can use.
5 * That's why this code uses the Doocs backend. Use it together with example2 from ApplicationCore.
6 * You have to activate the zmq sending in the ApplicationCore example2 by using the configuration files
7 * demoApp2-DoocsVariableConfig.xml and demo_example2.conf, which are provided with this example.
8 *
9 * Compile this file by linking directly with the Doocs backend (for instance directly on the command line):
10 * g++ read_temperature_doocs_zmq.cpp -o read_temperature_doocs_zmq `ChimeraTK-DeviceAccess-config --cppflags
11 * --ldflags` -lpthread -Wl,--no-as-needed -lChimeraTK-DeviceAccess-DoocsBackend
12 */
13#include <ChimeraTK/Device.h>
14
15#include <iostream>
16
17int main() {
19 d.open("(doocs:TEST.DOOCS/LOCALHOST_610498009/Bakery)");
20
21 // You have to activate the receiving of asynchronousy send data before an accessor with AccessMode::wait_for_new_data
22 // will receive anything. You can first create all accessors and then activate all of them at the same point in time
23 // with this.
25
26 // The third argument is a list of ChimeraTK::AccessMode. We only have one argument in it:
27 // AccessMode::wait_for_new_data.
28 auto temperature =
29 d.getScalarRegisterAccessor<float>("Oven.temperatureReadback", 0, {ChimeraTK::AccessMode::wait_for_new_data});
30
31 // The read now blocks until data is received. You can use it to syncrchonise your code to incoming data. No need for
32 // additional sleeps etc.
33 while(true) {
34 temperature.read();
35 std ::cout << "The temperature is " << temperature << " degC. " << std ::endl;
36 }
37}
int main()
Class allows to read/write registers from device.
Definition Device.h:39
ScalarRegisterAccessor< UserType > getScalarRegisterAccessor(const RegisterPath &registerPathName, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a ScalarRegisterObject object for the given register.
Definition Device.h:266
void activateAsyncRead() noexcept
Activate asyncronous read for all transfer elements where AccessMode::wait_for_new_data is set.
Definition Device.cc:91
void open(std::string const &aliasName)
Open a device by the given alias name from the DMAP file.
Definition Device.cc:58
@ wait_for_new_data
Make any read blocking until new data has arrived since the last read.