To solve this linear programming optimization problem, we first need to define the decision variables and the objective function. Let's denote the number of violins produced as \(V\) and the number of harps produced as \(H\).

The objective is to maximize profits. The profit per violin is $200, and the profit per harp is $350. So, the total profit can be represented by the equation:
\[ \text{Total Profit} = 200V + 350H \]

Next, we need to consider the constraints based on the available time for woodworking and assembling.

1. **Woodworking Time Constraint**: A violin takes 6 hours of woodworking time, and a harp takes 2 hours. The factory has at most 100 hours of woodworking time available per day. This can be represented by the inequality:
\[ 6V + 2H \leq 100 \]

2. **Assembling Time Constraint**: A violin takes 2.5 hours of assembling time, and a harp takes 10 hours. The factory has at most 150 hours of assembling time available per day. This can be represented by the inequality:
\[ 2.5V + 10H \leq 150 \]

Additionally, \(V\) and \(H\) must be non-negative since they represent quantities of products.

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Instrument_Production")

# Define the decision variables
V = m.addVar(lb=0, vtype=GRB.INTEGER, name="Violins")
H = m.addVar(lb=0, vtype=GRB.INTEGER, name="Harps")

# Define the objective function
m.setObjective(200*V + 350*H, GRB.MAXIMIZE)

# Add constraints
m.addConstr(6*V + 2*H <= 100, "Woodworking_Time")
m.addConstr(2.5*V + 10*H <= 150, "Assembling_Time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Violins: {V.x}")
    print(f"Harps: {H.x}")
    print(f"Total Profit: ${200*V.x + 350*H.x}")
else:
    print("No optimal solution found.")
```