Seems obvious but better said than not - for this to work you need to have your PC and your arduino agreeing on baud rate as well as data, parity, and stop bits (The default on arduino side is 8 data bits, no parity, one stop bit). Have you verified they are set up in the same way from your PC side? (Use Serial.begin on the arduino side to set those up in the same way your PC is communicating)
Assuming this is set the right way, Serial.readString() will read characters from the serial buffer into a string and the function terminates when it times out. The default time out is 1 second. If you have some sort of garbage going through the serial line then your string will always be offset and impacted by the timeout which is probably not what you want and you can never recover from that error. You could envision using readStringUntil() instead which reads characters from a stream into a string and the function terminates if the terminator character is detected or it times out (see setTimeout()). This way instead of sending just ab2000 you decide on a special ending character- say ab2000! And you listen until the !. Once you get your string back you should check if it conforms to what you expect because it could have terminated due to timeout.
I don't think though that this is the best approach to deal with your problem. your use of SerialEvent() function is not very standard. This function is automatically called inside the loop() if there is something pending on the serial line. What you could do instead for trying to read the full string there and block the main loop while waiting is just build up a buffer and let your program go back to the main loop so that your other activities get a chance to have some CPU time. See arduino Tutorial on SerialEvent as a very simple example to read in a string until a carriage return
One idea to use this for your case would be to set a start and end symbol to your communication and send this form the PC side - for example #ab2000!
Modify the example SerialEvent function this way: If there is serial data in the buffer, discard any character until you receive #, then you know you have a good starting point from the serial line. then accumulate characters in a buffer until you receive the ! (Check number of character received to not overflow your buffer) and set a Boolean like commandComplete = true and then in the main loop check the value of commandComplete and if it is true, perform your motor control stuff, reset the string buffer and set back commandComplete to false - you'll be ready to receive your next command
Unless you have some sort of handshake to ensure you are not loosing part of the communication it's going to be hard to ensure you are getting into your string the exact string you are waiting for.