Is there an easy way to create a workobject 90 degrees perpendicular to the base?

Or to another workobject in the robot?

Use this:

%%%
  VERSION:1
  LANGUAGE:ENGLISH
%%%

MODULE TCP_adjust
  VAR orient orient1:=[1,0,0,0];

  PROC tcp_orient()
    VAR num anglex;
    VAR num angley;
    VAR num anglez;
    VAR num nFKAnswer;

    TPWrite "This routine is use to calculate";
    TPWrite "The quaternions based upon EulerZYX";
    TPWrite "angles.";
    TPWrite "Remember EulerZYX goes Z rotation,";
    TPWrite "Then Y rotation,";
    TPWrite "and then X rotation";
    TPReadNum anglex,"Please enter the value for x rotation";
    TPReadNum angley,"Please enter the value for y rotation";
    TPReadNum anglez,"Please enter the value for z rotation";
    orient1:=OrientZYX(anglez,angley,anglex);
    TPWrite "Based upon your inputs,";
    TPWrite "Quaternion 1 is "\Num:=orient1.q1;
    TPWrite "Quaternion 2 is "\Num:=orient1.q2;
    TPWrite "Quaternion 3 is "\Num:=orient1.q3;
    TPWrite "Quaternion 4 is "\Num:=orient1.q4;
    TPReadFK nFKAnswer,"Press OK to Finish",stEmpty,stEmpty,stEmpty,stEmpty,"OK";
  ENDPROC
ENDMODULE

Would this be entered into the main Procedure? And then just run the program from the Flex Pendant?

Just load the module as-is, then pp to that routine.