you could try using the following new feature (probably in the development version of Singular - spielwiese)
One can assign weights to module components, when defining a monomial ordering. For example
Code:
ring R = 0, (x,y,z), (am(1,2,3, 10,20,30,40), dp, C);
deg(x*gen(1));
==> 11
will assign weights 1,2,3 to x,y,z respectively, and weights 10,20,30,40,0,0,... to components of any free module defined over R. This ordering will first sort by this weighted degree, then by dp on the ring monomials and then will give priority to the large component index.