Changes between Version 12 and Version 13 of Docs/Prog/Manual/DeviceSupport/Weighing


Ignore:
Timestamp:
03/13/20 12:02:40 (4 years ago)
Author:
Don Wilson
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Docs/Prog/Manual/DeviceSupport/Weighing

    v12 v13  
    2222The lib825ev library provides features to facilitate access the weight information from an application program.
    2323
    24 ==== Example of simple weighing program ====
    25 {{{
    26 // Simple get weight sample
    2724
    28 #include <stdio.h>
    29 #include <stdlib.h>
    30 
    31 #include "mnbdcomm.h"
    32 #include "lcd.h"
    33 #include "util.h"
    34 
    35 int main()
    36 {
    37    int n;
    38    char gross_wt_str[41];
    39    CSleep slp(0, 5);
    40 
    41    InitLCD();
    42    MnBdStartup();
    43 
    44    while(1)
    45    {
    46       n = MnBdProcess();
    47       if(n == mnbdProcWtRcv)
    48       {
    49           FormatGrossWt(GetProcessWt(), gross_wt_str);
    50           DisplayText(0, 0, gross_wt_str);
    51       }
    52       slp.Pause();
    53    }
    54    return 0;
    55 }
    56 
    57 }}}
    58 
    59 This displays the gross weight at the upper left corner of the display. The weight will update as changes are made to the scale. This program as an endless loop. If you started the program from the command line without using the "&" parameter you can press CTRL-C to end the program. Otherwise use PS to see the process list and KILL to terminate the appropriate process number.
    60 
    61 ==== Example of high Speed weighing of two scales using total mode ====
    62 
    63 {{{
    64 #include <stdio.h>
    65 #include <stdlib.h>
    66 #include <unistd.h>
    67 #include <fcntl.h>
    68 
    69 #include <string.h>
    70 
    71 #include <math.h>
    72 #include <time.h>
    73 
    74 #include <signal.h>
    75 
    76 #include "lcd.h"
    77 
    78 #include "touch.h"
    79 #include "kypdbeep.h"
    80 #include "form.h"
    81 #include "mnbdcomm.h"
    82 #include "login.h"
    83 
    84 extern struct mnbd_wt_struct wtdata[MAX_SCALES];
    85 
    86 extern uint32 g_nRepWtIntv;
    87 
    88 extern int* pwim;
    89 
    90 extern int g_keycnt;
    91 extern uint8 g_keybuf[10];
    92 
    93 #define ON_THRES        3
    94 #define OFF_THRES       1
    95 
    96 int main ()
    97 {
    98         int i, x, stat, nSamplesPerSecond = 0;
    99         struct timespec delaytm;
    100         char szMsg[41];
    101         time_t tnow;
    102         struct tm *tmnow;
    103         int prev_sec = -1;
    104        
    105         delaytm.tv_sec = 0;
    106         delaytm.tv_nsec = 20000000;  // 20 ms
    107 
    108         read_touch_cal();
    109 
    110         OpenBeeper();
    111 
    112         OpenMnBd(0); // Mainboard settings
    113        
    114         OpenTouch();
    115        
    116         InitLCD();
    117 
    118         read_current_operator();
    119 
    120         OpenMnBd(0);
    121        
    122         OpenMnBd(TOT_SCALE);
    123 
    124        
    125         printf("Calling SetWIM %d\r\n", TOT_SCALE);
    126        
    127         SetWIM(TOT_SCALE, ON_THRES, OFF_THRES, 200);
    128 
    129         printf("after Calling SetWIM\r\n");
    130        
    131         g_nRepWtIntv = REP_INTV_SAMPLE_RATE;
    132         MnBdRequest(REQ_SCALE(0), MNBD_REQ_REP_WT, NO_WAIT_ACK);
    133 
    134         stat = 0;
    135        
    136         time(&tnow);
    137         tmnow = localtime(&tnow);
    138        
    139         while(1)
    140         {
    141                 ReadKeypad();
    142                
    143                 if(g_keycnt > 0)
    144                 {
    145                         g_keycnt = 0;
    146                         if(g_keybuf[0] == BKSP || g_keybuf[0] == ESC)
    147                                 break;
    148                 }
    149                
    150                 nanosleep(&delaytm, NULL);
    151 
    152                 x = CheckWIM(TOT_SCALE);
    153                 if(x > 1)
    154                 {
    155                         if(stat == 0 && pwim[0] > ON_THRES) // Item on scale
    156                         {
    157                                 stat = 1;
    158                                 printf("On Scale\r\n");
    159                         }
    160                        
    161                         printf("WIM samples %d\r\n", x);
    162                         for(i = 0; i < x; i += 2)
    163                         {
    164                                 printf("%d %.3f %.3f\r\n", i, *(float*)&pwim[i], *(float*)&pwim[i+1]);
    165                                 nSamplesPerSecond++;
    166                         }
    167                         sprintf(szMsg, "%10.3f %10.3f", *(float*)&pwim[x - 2], *(float*)&pwim[x - 1]);
    168                        
    169                         LocateLCD(0, 0);
    170                         PrintLCD(szMsg);
    171                        
    172                         time(&tnow);
    173                         tmnow = localtime(&tnow);
    174 
    175                         if(tmnow->tm_sec != prev_sec)
    176                         {
    177                                 LocateLCD(FONT_WIDTH * 30,0);
    178                                 sprintf(szMsg, "%02d %4d", tmnow->tm_sec, nSamplesPerSecond);
    179                                 PrintLCD(szMsg);
    180                                
    181                                 prev_sec = tmnow->tm_sec;
    182                                 nSamplesPerSecond = 0;
    183                         }
    184                 }
    185                 else if(CheckWtRcv(0))
    186                 {
    187                         if(stat != 0)
    188                         {
    189                                 if(wtdata[0].grosswt < OFF_THRES)
    190                                 {
    191                                         printf("Off Scale\r\n");
    192                                        
    193                                         stat = 0;
    194                                 }
    195                         }
    196                 }
    197         }
    198        
    199         g_nRepWtIntv = 0;
    200         MnBdRequest(REQ_SCALE(0), MNBD_REQ_REP_WT, WAIT_ACK);
    201        
    202         printf("Done\r\n");
    203        
    204         return 0;
    205 }
    206 
    207 
    208 }}}
    209 
    210 This sample demonstrates high speed weigh in motion using to the total scale to read two scales at a time. The display will show the gross weights of scales 1 and 2, the current second, and a count of samples per second.