problem with reading bits from a remote device

Discussion in 'C' started by boschow, Apr 23, 2008.

  1. boschow

    boschow New Member

    Joined:
    Feb 22, 2007
    Messages:
    32
    Likes Received:
    0
    Trophy Points:
    0
    Hello all,

    i am programming a micro controller with C programming language. I have successfully implemented the MODBUS communication protocol but now I have encountered a bug.

    Let me explain how does the communication works:
    from the PC i send a request to read multiple coils (bits), this request
    tells the remote device the starting address (the address from which we want to start the reading of coils) and the quantity of bits.

    In the program I calculate from the starting address the starting element of the char array, and then I calculate the number of bytes from the quantity of bits. Then I make a loop and cycle it until the number of sending bits is equal to the number of quantity of bytes.

    The code looks something like this:
    Code:
    
                            do
    			{
    				index = index + 8; // bit index
    				byteNum++; // the starting char array element
    			}while (address > index); // address = starting address
    
    			byteNum -= 1; //the first element of the char array
    			
    			do			
    			{
    				quantByte++; //how many bytes are we going to send
    				bitCounter = bitCounter - 8; // bitCounter = the quqntity of bits
    			}while (bitCounter > 0);
    			
    			do
    			{ 
    				pucFrame[MBAP + sendByte] = rwCoil->coils[byteNum];
    				byteNum++;
    				sendByte++; // how many bytes are we sending at the beginning  is 0
    			}while(sendByte < quantByte); // loop until all  the requested bytes are send
    		}
    
    The code works like this:
    I wrote fixed values in the array char from byts[0] = 0xff; to byts[3] = 0xff;.
    When I wrote the 4th byte of array the rezult was strange, because both the byte[4] was also affected with the number but instead of setting on 0xff , it set to 0xf7. I also tried to set one bit at the time, and I found out that when I set the first bit of the byte[3] array char both the first and the last
    were changed from logic 0 to logic 1. When I changed the second bit of byte[3] it change its second bit to logic 1 and the first bit on byte[4]. One last thing when I observe the reading of bits one byte at the time it works fine, maybe because I can't see the effect of the other array of char elements.

    I have tested this code with Visual C++ 2008 and it works, everything is at the right place and this is why I can understand why on the micro controller doesn't work. Anyone has any idea about this?

    Best Regards,
    BoSCHoW.
     
    Last edited: Apr 23, 2008

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice