Ultrasonic anemometer reading

    AnemometerString[index] = '\0'; 
     
    if ( InputChar == '\n')
      AnemometerString[index] = '\0';

And, if it isn't? What is in AnemoterString[index] then?

    if (index == 27)
    { 
      strcpy(AnemometerString2, AnemometerString);

Suppose a byte got lost/corrupted? Expecting a specific number of values is not a good idea.

          WindAngle = atof(StringPart2);
          WindSpeed = atof(StringPart4);

It would be a good idea to make sure that StringPart2 and StringPart4 were valid pointers, first. Ditto for all the other pointers that you assume are valid.