Попытка изучить модуль C++ от DewesoftC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Попытка изучить модуль C++ от Dewesoft

Сообщение Anonymous »

В настоящее время я пытаюсь изучить модуль сценариев C++ компании Dewesoft. К сожалению, специального форума для этого нет, поэтому я нажимаю все кнопки, чтобы попытаться найти помощь. Я хочу написать код, в котором я посылаю импульс 5 В по каналам через заданные интервалы (25 мс и 50 мс, из каналов DO1 и DO2), однако я не могу, хоть убей, заставить что-либо сработать. Я прошел онлайн-курс (его можно найти по этой ссылке: https://dewesoft.com/academy/online/dew ... ipt#page-3), но, к сожалению, я либо не могу понять их хоть убей, либо в моей логике есть ошибка. Если в моей логике есть ошибка, я полагал, что люди, незнакомые с Dewesoft, также могут ее найти и любезно сообщить мне, потому что я, честно говоря, понятия не имею, где я ошибся.
Вот пошаговый список с изображениями и кодом, подробно описывающим, что я сделал:
1. Я установил входной канал как сигнал времени. (Dewesoft требуется хотя бы один входной канал).
2. Я установил два выходных канала для цифрового выхода 1 и 2 соответственно. Затем я подключил осциллограф к своим цифровым выходным контактам и подключил источник 5 В как к входному, так и к выходному контакту, который зарезервирован для 5 В, просто чтобы охватить все мои базы.
3. Я связал свои цифровые выходные контакты с программными выходами.
4. Я написал свой код в рамках скелетного кода, который предлагает Dewesoft:

Код: Выделить всё

namespace bsc = Dewesoft::Math::Api::Basic; 

Код: Выделить всё

class Module: public bsc::MathModule { 

Код: Выделить всё

public: 

Код: Выделить всё

Module(); ~Module(); 

Код: Выделить всё

void configure() override; 

Код: Выделить всё

void start() override; 

Код: Выделить всё

void stop() override; 

Код: Выделить всё

void clear() override; 

Код: Выделить всё

// MY CODE BELOW THIS POINT 

Код: Выделить всё

 // Outputs have been mapped to Ctrl DO1 / Ctrl DO2 in A/D out
double PyroOneOut = 0.0;   // "First Pyro's Output"
double PyroTwoOut = 0.0;   // "Second Pyro's Out"

Код: Выделить всё

private:
//Timing parameters (ms)
const double t1_ms    = 25.0;  // DO1 fires at 25 ms
const double t2_ms    = 50.0;  // DO2 fires at 50 ms
const double width_ms = 5.0;   // pulse width (will change if needed)

// Internal clock
std::chrono::steady_clock::time_point t0;

Код: Выделить всё

inline Module::Module() { 

Код: Выделить всё

// Procedure which gets called the first thing a setup containing your module gets loaded or when the window with your module's setup form is closed. During this call only variables in published'' struct are properly set. Useful for loading heavy libraries, reading from  files, etc. } 

Код: Выделить всё

inline Module::~Module() { 

Код: Выделить всё

// Called when your module is no longer used, giving you an opportunity to clean up. } 

Код: Выделить всё

inline void Module::configure() { 

Код: Выделить всё

// Procedure used for overriding settings set in Configure'' tab. Most useful for setting blockSizeInSamples, and output channel's units, axes and expectedAsyncRates, based on the values of published variables. 

Код: Выделить всё

 PyroOneOut = 0.0;
PyroTwoOut = 0.0;

Код: Выделить всё

inline void Module::start() { 

Код: Выделить всё

// Procedure which gets called at the start of a new measurement, strictly after Module::init(). Useful for setting initial values for your variables. 

Код: Выделить всё

// Called at measurement start — zero outputs and arm the timer.
t0 = std::chrono::steady_clock::now();
PyroOneOut = 0.0;
PyroTwoOut = 0.0;

Код: Выделить всё

inline void Module::stop() { 

Код: Выделить всё

// A converse of Module::start(), called when the measurement is stopped. 

Код: Выделить всё

// Ensure outputs go LOW when stopping.
PyroOneOut = 0.0;
PyroTwoOut = 0.0;

Код: Выделить всё

inline void Module::clear() { 

Код: Выделить всё

// Procedure which gets called whenever DEWESoft // clears data in channels, eg. when storing is started. 

Код: Выделить всё

PyroOneOut = 0.0;
PyroTwoOut = 0.0;

Код: Выделить всё

inline void Module::calculate() { 

Код: Выделить всё

// Procedure which gets called repeatedly whenever DEWESoft has exactly Block size'' (or 1, in sample based mode) number of new samples in input channels.  

Код: Выделить всё

using namespace std::chrono;

const double ms =
duration(steady_clock::now() - t0).count();

const bool do1_high = (ms >= t1_ms) && (ms < (t1_ms + width_ms));
const bool do2_high = (ms >= t2_ms) && (ms < (t2_ms + width_ms));

PyroOneOut = do1_high ? 1.0 : 0.0;
PyroTwoOut = do2_high ? 1.0 : 0.0;


Подробнее здесь: https://stackoverflow.com/questions/798 ... s-c-module
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»