To solve this problem, we first need to define the decision variables, objective function, and constraints based on the given information.

Let's denote:
- $x_1$ as the amount of enriched hay (in kilograms) fed to the cows per day.
- $x_2$ as the amount of chicken scraps (in kilograms) fed to the cows per day.

The objective is to minimize the total cost, which can be represented as:
\[ \text{Minimize} \quad 200x_1 + 350x_2 \]

The constraints based on the nutritional requirements are:
- Protein requirement: $0.3x_1 + 0.6x_2 \geq 1.5$ per cow.
- Minerals requirement: $0.15x_1 + 0.05x_2 \geq 0.5$ per cow.
- Vitamins constraint: $0.1x_1 + 0.2x_2 \leq 0.5$ per cow.

Since there are 30 cows, we need to adjust the right-hand side of the inequalities accordingly:
- Protein requirement for all cows: $0.3x_1 + 0.6x_2 \geq 1.5 \times 30 = 45$.
- Minerals requirement for all cows: $0.15x_1 + 0.05x_2 \geq 0.5 \times 30 = 15$.
- Vitamins constraint for all cows: $0.1x_1 + 0.2x_2 \leq 0.5 \times 30 = 15$.

Now, let's write the Gurobi code to solve this linear programming problem:

```python
from gurobipy import *

# Create a new model
m = Model("Cow_Feeding")

# Define variables
x1 = m.addVar(lb=0, name="enriched_hay")  # Amount of enriched hay in kg
x2 = m.addVar(lb=0, name="chicken_scraps")  # Amount of chicken scraps in kg

# Objective function: Minimize total cost
m.setObjective(200*x1 + 350*x2, GRB.MINIMIZE)

# Constraints
m.addConstr(0.3*x1 + 0.6*x2 >= 45, name="protein_requirement")
m.addConstr(0.15*x1 + 0.05*x2 >= 15, name="minerals_requirement")
m.addConstr(0.1*x1 + 0.2*x2 <= 15, name="vitamins_constraint")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Enriched Hay: {x1.x} kg")
    print(f"Chicken Scraps: {x2.x} kg")
    print(f"Total Cost: ${m.objVal}")
else:
    print("No optimal solution found")

```