externe Werte Lesen macht komische Sachen...



  • Hallo Freunde,
    ich bin kein Profi, jedoch erscheint mir ein Quellcode logisch. Nur habe ich ein Problem damit. Folgendes: In meinem hier geposteten Code kann man Parametereinstellungen vornehmen, um Daten über eine Interfacekarte von einem Meßgerät zu lesen.
    So jetzt habe ich hier mal alles eingestellt und möchte 30 Werte in ein Array lesen, und anschließend anzeigen! Alles soweit funktionsfähig 🙂
    ABER: immer der letzte Wert ist eine undefinierte Zahl die ungefähr so aussieht:
    -18235640000000000000000000
    Jetzt habe ich schon jede Menge versucht nur egal wieviel Werte ich anzeigen will sei es 20 oder 30 oder volle 8191 mit der null gezählt, immer ist der letzte Wert so ein mist??? ich bin am verzweifeln! vielleicht hat ja jemand eine IDEE? Dafür wäre ich sehr dankbar.

    lg smarty 🙂

    hier der code:

    #include <stdio.h>
    #include <conio.h>
    #include "IK220Con.h"
    
    ULONG	IKCard[16];									
    USHORT	Ax;											
    USHORT  Alarm;										
    USHORT  Status;										
    char	VersCard[20], VersDrv[20], VersDll[20];		
    
    double	CntVal;
    double  start=0;										
    ULONG	DllStatus, DllInfo;
    
    //En-Dat
    USHORT	EnStatus;
    USHORT	EnType;
    ULONG	EnPeriod;
    ULONG	EnStep;
    USHORT	EnTurns;
    USHORT	EnRefDist;
    USHORT	EnCntDir;
    
    void main (void)
    
    {
    
    	if (!IK220Find (IKCard))		// Search IK 220
    	{
    		printf ("Error: IK220Find\n");									
    
    		// Read DLL-Status
    		if (!IK220DllStatus (&DllStatus, &DllInfo))  printf ("Error: IK220DllStatus\n");		
    		printf ("DLL-Status: 0x%08lX     DLL-Info: 0x%08lX", DllStatus, DllInfo);
    		_getch();
    		return;
    	}
    
    	for (Ax=0; Ax<2; Ax++)
    		if (IKCard[Ax])
    		{	
    		// INIT IK 220
    		if (!IK220Init (Ax))  printf ("Error: IK220Init axis %d\n", Ax);					
    			else 
    			{
    				printf ("Axis %d initialized  -  ", Ax);
    
    				// Parameter settings IK 220
    
    					// inkrement. messure tool
    					IK220WritePar(Ax,1,0);  
    
    					// 1Vpp messure tool
    					IK220WritePar(Ax,2,0);  
    
    					// time interval for the int. Timer here->100µs
    					IK220WritePar(Ax,11,33); 
    
    					// intern Ram, howmany values at the RAM
    					IK220WritePar(Ax,13,29);  
    
    					//  release intern Timer Latch L0 
    					IK220WritePar(Ax,14,1);  
    
    					// write Register 0 to RAM on IK220 (Single Shot)
    					IK220ModeRam(Ax,3);		
    
    					// Timersignal output to -Lout2 X21/1
    					IK220ModeTimer(0,1);	
    
    				// Output IK Card values 
    				if (!IK220Version (Ax, &VersCard[0], &VersDrv[0], &VersDll[0])) printf ("Error: IKVersion\n");				
    				else 
    					printf ("Card: %s  %s  %s\n", VersCard, VersDrv, VersDll);   
    
    			}
    		}
    	// Output Card adress(es)
    	for (Ax=0; Ax<2; Ax++)
    		if (IKCard[Ax]) printf ("IK 220 (%2d) at address: 0x%08lX\n", Ax, IKCard[Ax]);	
    	printf ("\n");
    
    	USHORT maxDataCount = 29;
    	double axisData[29];
    	USHORT dataCount = 0;
    	USHORT dataStatus = 0;
        int i;
    	int lStatus;
    
    	// trigger Latch
    	IK220LatchInt(0);		
    
    	// waiting about the intern IK220 memory is full
    	do						
    	{
    		IK220Latched(0,0,&lStatus);
    	}
    	while (lStatus==0);
    
    	// read data from IK220 (Axis 0) memory and put it on a array
    	IK220BurstRam(0,maxDataCount, &axisData[dataCount], &dataCount, &dataStatus);
    
    	// Output all Data on display 
    	for(i=0;i<=dataCount;i++)
    	{
    
    					printf (" (%3i) Axis %d: %12.4f     ",i, 1, axisData[i]);
    
    			printf ("\r");
    			printf ("\n");
    	}
    
    	_getch();
    
    printf ("\n\n");
    }
    


  • IK220Con.h hab ich nicht, also les ich den Code gleich gar nicht.
    Aber das klingt sehr nach Pufferüberlauf.



  • hier

    for(i=0;i<=dataCount;i++) 
        { 
    
                        printf (" (%3i) Axis %d: %12.4f     ",i, 1, axisData[i]); 
    
                printf ("\r"); 
                printf ("\n"); 
        }
    

    muss es wohl

    for(i=0;i<dataCount;i++)   // ohne =
    

    heißen, oder?

    jenz



  • Jenz ich sage viellen DANK! vor lauter Bäumen sah ich den Wald nicht. Danke und einen schönen Tag. 😉



  • Hallo College,

    Ich bin ein Test-Ingenieur in der Türkei. Ich fand den Code via Google. Ich versuche, beide Achsen von IK220 gleichzeitig lesen. zu tun, dass ich verwenden innerem Verriegelung (internal latching) haben. könnten Sie mir helfen, für C-Code, um beide Achsen gleichzeitig lesen?

    Danke Schön.
    Grüsse.
    Bahadir ISCAN


Anmelden zum Antworten