home *** CD-ROM | disk | FTP | other *** search
- #include <formatio.h>
- #include <ansi_c.h>
-
- /* == Sample Oscilloscope Instrument Module =============================== */
- #include "scope.h"
-
- int scope_device_closed (void);
- int scope_invalid_integer_range (int, int, int, int);
- int scope_invalid_real_range (double, double, double, int);
- int scope_write_data (char *, int);
-
- int scope_err = 0;
-
- /* ========================================================================= */
- static int bd;
- static char cmd[100];
- static double ch1_volts_per_div;
- static double ch2_volts_per_div;
- static double sec_per_div;
- static int ch1_coupling;
- static int ch2_coupling;
-
- /* ========================================================================= */
- int CVIFUNC scope_init (int addr)
- {
-
- if (scope_invalid_integer_range (addr, 0, 30, -1) != 0)
- return scope_err;
- if (addr != 1) {
- scope_err = 223;
- return scope_err;
- }
- bd = 1;
- ch1_volts_per_div = 1.0;
- ch2_volts_per_div = 1.0;
- ch1_coupling = 1;
- ch2_coupling = 1;
- sec_per_div = 0.001;
- scope_err = 0;
- return scope_err;
- }
-
- /* ========================================================================= */
- int CVIFUNC scope_close (void)
- {
-
- if (scope_device_closed () != 0)
- {
- scope_err = 223;
- return scope_err;
- }
- bd = 0;
- scope_err = 0;
- return scope_err;
- }
-
- /* ========================================================================= */
- int CVIFUNC scope_config (int chan, double v_div, int coupling, double sec_div)
- {
- char *cou_name;
-
- if (scope_device_closed () != 0)
- return scope_err;
- if (scope_invalid_integer_range (chan, 1, 2, -1) != 0)
- return scope_err;
- if (scope_invalid_real_range (v_div, 0.01, 50.0, -2) != 0)
- return scope_err;
- if (scope_invalid_integer_range (coupling, 0, 2, -3) != 0)
- return scope_err;
- if (scope_invalid_real_range (sec_div, 0.001, 1.0, -4) != 0)
- return scope_err;
- if (chan == 1) {
- ch1_volts_per_div = v_div;
- ch1_coupling = coupling;
- }
- else {
- ch2_volts_per_div = v_div;
- ch2_coupling = coupling;
- }
- sec_per_div = sec_div;
- switch (coupling) {
- case 0:
- cou_name = "AC";
- break;
- case 1:
- cou_name = "DC";
- break;
- case 2:
- cou_name = "GND";
- break;
- default:
- return scope_err;
- }
- Fmt (cmd, "CH%d VOL:%f,COU:%s;HOR ASE:%f;", chan, v_div, cou_name, sec_div);
- if (scope_write_data (cmd, NumFmtdBytes ()) != 0)
- return scope_err;
- scope_err = 0;
- return scope_err;
- }
-
- /* ========================================================================= */
- int CVIFUNC scope_read_waveform (int sou, double wvfm[100], double *xin, double *xzero)
- {
- int i;
- int coupling;
- double offset;
- double mult;
-
- *xzero = 0.0;
- coupling = 0;
- mult = 0.0;
- offset = 0.0;
- if (scope_device_closed () != 0)
- return scope_err;
- if (scope_invalid_integer_range (sou, 1, 2, -1) != 0)
- return scope_err;
- if (sou == 1)
- coupling = ch1_coupling;
- else
- coupling = ch2_coupling;
- if (coupling != 2) {
- if (sou == 1)
- mult = 0.5/ch1_volts_per_div;
- else
- mult = 0.05/ch2_volts_per_div;
- if (coupling == 1)
- offset = 1;
- }
- Fmt (cmd, "DAT SOU:CH%d;CURV?", sou);
- if (scope_write_data (cmd, NumFmtdBytes ()) != 0)
- return scope_err;
- if (sou == 1) {
- i = 0;
- while (i < 100) {
- wvfm[i] = mult * sin (2.0 * 3.14159 * (sec_per_div / 0.1) * (double)i) + (offset - 1);
- i++;
- }
- }
- else if (sou == 2) {
- i = 0;
- while (i < 100) {
- wvfm[i] = mult * (((rand()/32767.0) * 2.0)- 1.0);
- i++;
- }
- }
- *xin = sec_per_div / 100.0;
- *xzero = 0.0;
- scope_err = 0;
- return scope_err;
- }
-
- /* ========================================================================= */
- int scope_device_closed (void)
- {
-
- if (bd <= 0)
- scope_err = 232;
- else
- scope_err = 0;
- return scope_err;
- }
-
- /* ========================================================================= */
- int scope_invalid_integer_range (val, min, max, err_code)
- int val;
- int min;
- int max;
- int err_code;
- {
-
- if (val < min || val > max) {
- scope_err = err_code;
- return 1;
- }
- return 0;
- }
-
- /* ========================================================================= */
- int scope_invalid_real_range (val, min, max, err_code)
- double val;
- double min;
- double max;
- int err_code;
- {
-
- if (val < min || val > max) {
- scope_err = err_code;
- return 1;
- }
- return 0;
- }
-
- /* ========================================================================= */
- int scope_write_data (cmd, cnt)
- char *cmd;
- int cnt;
- {
-
- /* if (ibwrt (bd, cmd, cnt) <= 0) */
- /* scope_err = 230; */
- /* else */
- scope_err = 0;
- return scope_err;
- }
-
-