Cannot use channel 0 anymore

Supporting Visual Studio on Windows
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Cannot use channel 0 anymore

Post by carnaby »

I was using an absolute pressure sensor on channel 0 until the latest firmware update from Phidget and now channel 0 always says it is already open when I run in debug and try to attach the sensor. I've tried rebooting, shutting down the control panel, all that stuff, but it's still showing the following when I try to open the channel after an attach event on channel 0:

Failed to open Channel <PhidgetVoltageRatioInput> on local device: <VOLTAGERATIOINPUT_PORT (Hub Port - Voltage Ratio Mode) v100 -> HUB0000 Port:0 S/N:636524> because Channel: <VINT Hub Ch:0 -> HUB0000 S/N:636524> is opened on the same Hub Port, and these channels are mutually exclusive.

I have a parameter that sets the channel. I can change to any other channel and attach the sensor and it opens no problem except for channel 0. It works *sometimes* if I build and run my program as an executable.
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

So if I restart several times it sometimes works. That's all I have at the moment. Any ideas?
User avatar
Patrick
Lead Developer
Posts: 634
Joined: Mon Jun 20, 2005 8:46 am
Location: Canada
Contact:

Re: Cannot use channel 0 anymore

Post by Patrick »

Hi,

It looks like you have the Hub itself open, and are also trying to open the first Hub port, and the library is mistakenly stopping you - this is a bug in the library. I'll have a fix published in the next release.

Out of curiosity - what are you using the Hub channel for?

-Patrick
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

Hi Patrick,

I'm using it for a 1141 absolute pressure sensor.

Thanks!
User avatar
Patrick
Lead Developer
Posts: 634
Joined: Mon Jun 20, 2005 8:46 am
Location: Canada
Contact:

Re: Cannot use channel 0 anymore

Post by Patrick »

Hi,

Just to confirm though - you are opening more than one Phidget channel in your program? From the log, it looks like you're opening the Hub channel - this would only be useful if you need to control the power to the hub ports: https://www.phidgets.com/?view=api&api=Hub&lang=CSharp

-Patrick
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

I'm using three sensors, one 1141 absolute sensor and two 1139 differential sensors and nothing else. The absolute sensor is always on channel 0 and the differential sensors are on channels 1 and 2. The differential sensors aren't having any trouble, just the absolute on channel 0.
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

Patrick wrote:Hi,

Just to confirm though - you are opening more than one Phidget channel in your program? From the log, it looks like you're opening the Hub channel - this would only be useful if you need to control the power to the hub ports: https://www.phidgets.com/?view=api&api=Hub&lang=CSharp

-Patrick
Is there a reason I would want to control power to the hub ports for absolute and differential pressure sensors? I don't see the use case.
User avatar
Patrick
Lead Developer
Posts: 634
Joined: Mon Jun 20, 2005 8:46 am
Location: Canada
Contact:

Re: Cannot use channel 0 anymore

Post by Patrick »

Hi,

I don't think you would want to control power to the hub ports - the Hub channel is almost never used, so I'm surprised to see that you are opening it - and it sounds like maybe you don't mean to be opening it?

From your error message, I see: <VINT Hub Ch:0 -> HUB0000 S/N:636524>

The only way this should be able to happen if if you are doing something like:

Code: Select all

Hub ch = new Hub();
ch.DeviceSerialNumber = 636524;
ch.Open();
In addition to opening the HubPort channels to talk to your three sensors.

-Patrick
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

The only time I open anything is here:

Code: Select all

public void ManageSensors(PhidgetEvent phidgetEvent, int hubPort)
		{
			if(phidgetEvent == PhidgetEvent.attach)
			{
				switch(hubPort)
				{
					case Constants.ABSOLUTE_PRESSURE_SENSOR_PORT:

AbsolutePressureSensor?.Open();
						AbsolutePressureSensor.VoltageRatioSensor.Handler = ProcessPressureData;
						Debug.WriteLine("Abs P Attached and opened");
						break;
					case Constants.DIFFERENTIAL_PRESSURE_SENSOR_PORT_1:
						DifferentialPressureSensor1?.Open();
						DifferentialPressureSensor1.VoltageRatioSensor.Handler = ProcessPressureData;
						Debug.WriteLine("Diff P 1 Attached and opened");
						break;
					case Constants.DIFFERENTIAL_PRESSURE_SENSOR_PORT_2:
						DifferentialPressureSensor2?.Open();
						DifferentialPressureSensor2.VoltageRatioSensor.Handler = ProcessPressureData;
						Debug.WriteLine("Diff P 2 Attached and opened");
						break;
					case Constants.TEMPERATURE_SENSOR_PORT:
						TemperatureSensor?.Open();
						break;
					default:
						// noop
						break;
				}
			}
			else if(phidgetEvent == PhidgetEvent.detach)
			{
				switch (hubPort)
				{
					case Constants.ABSOLUTE_PRESSURE_SENSOR_PORT:
						AbsolutePressureSensor.Close();
						break;
					case Constants.DIFFERENTIAL_PRESSURE_SENSOR_PORT_1:
						DifferentialPressureSensor1.Close();
						break;
					case Constants.DIFFERENTIAL_PRESSURE_SENSOR_PORT_2:
						DifferentialPressureSensor2.Close();
						break;
					case Constants.TEMPERATURE_SENSOR_PORT:
						TemperatureSensor.Close();
						break;
				}
			}
		}
Which results in this call:

Code: Select all

public void Open()
		{
			try
			{
				_voltageRatioSensor.Open(OPEN_CHANNEL_TIMEOUT_MS);
			}
			catch(PhidgetException ex)
			{
				Debug.WriteLine($"Error opening device {_sensorName}: {ex.Message}");
			}
		}
carnaby
Phidgetsian
Posts: 13
Joined: Fri Feb 21, 2020 10:35 pm
Contact:

Re: Cannot use channel 0 anymore

Post by carnaby »

And also this code to define the voltage ratio sensor objects

Code: Select all

public VoltageRatioSensor(string sensorName, VoltageRatioSensorType sensorType, int hubPort)
		{
			_sensorName = sensorName;
			_sensorType = sensorType;
			_filterConstant = DEFAULT_FILTER_CONSTANT;

			_voltageRatioSensor = new VoltageRatioInput();
			_voltageRatioSensor.IsHubPortDevice = true;
			_voltageRatioSensor.HubPort = hubPort;

			_voltageRatioSensor.Attach += VoltageRatioInput_Attach;
			_voltageRatioSensor.Detach += VoltageRatioInput_Detach;
			_voltageRatioSensor.VoltageRatioChange += VoltageRatioInput_VoltageRatioChange;
		}

		
		public void Dispose()
		{
			_voltageRatioSensor?.Close();
		}

		public delegate void VoltageRatioUpdateHandler(double measurement, int index);
		public VoltageRatioUpdateHandler Handler;


		private void VoltageRatioInput_Attach(object sender, Phidget22.Events.AttachEventArgs e)
		{
			VoltageRatioInput attachedDevice = (VoltageRatioInput)sender;

			// setup
			try
			{
				attachedDevice.SensorValueChangeTrigger = 0;                     // trigger whenever data interval is up
				attachedDevice.DataInterval = DATA_INTERVAL_PRESSURE_MS;

				Debug.WriteLine("VR Sensor: " + attachedDevice.HubPort.ToString());
				Debug.WriteLine("VR Channel: " + attachedDevice.Channel.ToString());
			}
			catch (PhidgetException ex)
			{
				Debug.WriteLine($"Error initializing device {_sensorName}: {ex.Message}");
			}
		}
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest