GithubHelp home page GithubHelp logo

fluigent / fgt-sdk Goto Github PK

View Code? Open in Web Editor NEW
32.0 9.0 15.0 15.93 MB

Fluigent Software Developement Kit

Home Page: https://www.fluigent.com/

License: Apache License 2.0

C++ 16.83% C 15.73% MATLAB 19.03% HTML 13.42% Python 14.11% LabVIEW 3.59% C# 16.42% CMake 0.74% Shell 0.13%
fluigent sdk microfluidics mfcs lineup frp hardware sensor development-kit pressure

fgt-sdk's Introduction

Fluigent Software Developement Kit - version 23.0.0

Overview

The Fluigent Software Development Kit (SDK) allows you to fully integrate Fluigent devices in your application; it has been ported to the most popular programming language within the instrumentation field (LabVIEW, C++, C# .NET, Python and MATLAB).

This SDK merge all Fluigent pressure controllers and sensor instruments and provide an advanced regulation loop. You can still use independent SDK (MFCS, FRP, LineUP, ESS) for simple hardware setups or for specific software requirements.

Main advantages this newest version of our SDK, helps you to:

  • Code faster by providing a single API for all instruments
  • Save memory footprint using a single instance for all devices
  • Ensure the interchangeability between Fluigent instruments
  • Get the best performances with the embedded regulation allows powerful and custom feedback loop between any pressure controller and sensor
  • Use third party sensors that can be regulated by our pressure controllers
  • Save time including features such as limits, units, calibration and detailed errors allow advanced functionalities

Usage

The fastest way to use the SDK with your favorite language is to download the latest release from the dedicated page. Then, follow the instructions from the manual to install each package.

If you want to compile from source, you can clone or download this repository and follow the instructions, when provided, in the language sub-folder you are interested in.

Supported operating systems and architectures

Operating system x86 (32 bits) x64 (64 bits) ARM (32 bits) ARM64 (64 bits)
Windows 7/8/10 X X
Linux1 X2 X3 X4
macOS X
  1. Requires kernel version 2.6.39 or newer
  2. Requires GLIBC ≥ 2.14, GLIBCXX ≥ 3.4.26, CXXABI ≥ 1.3.11
  3. Requires GLIBC ≥ 2.7, GLIBCXX ≥ 3.4.22, CXXABI ≥ 1.3.11, CXXABI_ARM ≥ 1.3.3
  4. Requires GLIBC ≥ 2.17, GLIBCXX ≥ 3.4.22, CXXABI ≥ 1.3.11

Supported hardware

By using Fluigent SDK, you have direct access to following Fluigent devices:

  • MFCSTM Series: MFCSTM, MFCSTM-EZ, MFCSTM-EX and PX pressure controllers
  • LineUP Series: Link, Flow EZTM pressure controller, Flow Unit connected to Flow EZTM, Switch EZ and compatible switches, and P-Switch
  • Flowboard and compatible Flow Units
  • Inline Pressure Sensor (IPS)
  • ESS Series Switchboard and compatible switches
  • F-OEM Series: INT-OEM, Pressure Module, Switch Module
  • NIFS (Non-Invasive Flow sensor)

Software layers

Native libraries

The Fluigent SDK is based on a set of native shared libraries for each supported platform. The libraries are sorted into folders by the operating system and processor architecture they target:

  • windows/x86/fgt_SDK.dll
  • windows/x64/fgt_SDK.dll
  • linux/x64/libfgt_SDK.so
  • linux/arm/libfgt_SDK.so
  • linux/arm64/libfgt_SDK.so
  • mac/x64/libfgt_SDK.dylib
  • fgt_SDK.h

Legacy files fgt_SDK_32.dll and fgt_SDK_64.dll are also included for convenience, to match naming conventions used by environments such as LabVIEW. They correspond to the Windows x86 and Windows x64 libraries, respectively.

Middleware

The SDK middleware is a set of packages that make it easier to use the SDK with various programming languages.

The middleware packages provide the following functionalities for your convenience:

  • Identify, locate and load the appropriate SDK native library according to the platform
  • Convert data types to the native types used by each language to keep the user code clean
  • Handle errors and display formatted error messages in program output

The middleware matches the conventions of each programming language while keeping the interface as similar as possible across all supported languages.

Supported packages:

Language Package
C++ Cross-platform CMake project containing middleware and examples
C# Cross-platform .NET Core NuGet package. .NET solution containing package source and examples
LabVIEW Windows Toolkit with examples. LabVIEW project containing toolkit source
Python Cross-platform package and Windows installers. Project folder containing package source and examples
MATLAB Windows Toolbox containing middleware and examples. Project folder containing toolbox source

Linux permissions

On Linux-based operating systems, the system usually does not allow access to peripheral devices without superuser rights. It is possible to make an exception for Fluigent instruments, so the SDK can detect and communicate with them when run by a normal user. You can run the script linux-udev.sh that we provide, which automatically makes the necessary changes to the system. The script must be run with superuser rights.

macOS signature problems

When opening a compiled library on macOS operating systems you may encounter an error "libfgt_SDK.dylib" cannot be opened because the developer cannot be verified. We are working to resolve this issue, but as a temporary workaround you can head to System Preferences -> Security & Privacy and click the Allow Anyway button next to the notification about the library being blocked due to an unidentified developer signature. We are sorry for the inconvenience!

Documentation

Refer to the user manual Fluigent SDK.pdf for detailed documentation.

The public API of the native libraries is documented in the header file fgt_SDK.h.

Wrappers and examples are also documented, depending on the environment.

Support

You can use this GitHub repository to find the source code, report issues, and contribute.

Folders content

  • Fluigent SDK.pdf file - Detailed documentation explaining global philosophy, functions and examples.
  • Shared folder - Header file and the native shared libraries for all supported systems.
  • C++ folder - C++ CMake project with console application examples.
  • C# folder - C# NuGet source and console application examples.
  • LabVIEW folder - LabVIEW toolkit source and examples.
  • Python folder - Python package source and examples.
  • MATLAB folder - MATLAB toolbox source and examples.

fgt-sdk's People

Contributors

cristianglavana avatar fluigentdevteam avatar gumen38 avatar mtrellet avatar radoslawik avatar ygor-oliveira avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fgt-sdk's Issues

LineUP series devices not detected when running code from Ubuntu

I wrote Python code that works fine when I run it from PyCharm on my Windows machine. It still runs when I run the same scripts from Ubuntu, but it does not detect the Fluigent instruments at all even though my machine satisfies all the requirements in the fgt-SDK manual. I've tried a bunch of online solutions and none of them worked, so I'm not sure what to do next.

aarch64 support

Hello,

I noticed in the low-level wrapper for the SDK there are checks to determine if the system has the 'aarch64' architecture. However, there are currently no compiled libraries for these types of systems. Are there plans to include these libraries in a future release, and if so, is there an estimated timeframe for release?

Thanks!

No instrument found when using LabView

I tried using Labview to read data from my new IPS sensors. When I run the Fluigent All-in-One software, the two sensors can be detected without any issues. However, when I try to connect to them using Labview, i get the error "No instrument found" when I run the "Basic Read Sensor VI" and no sensors detected when I run "Basic Get Instruments Info" . What is the installation procedure for LabView? Is there something else I need to install? I looked through an old thread but couldn't find a solution (delete fgtintex?).

libfgt_SDK.so glibc version dependency limits compatibility

Hi all!

Would it be possible to build these against older versions of glibc and gcc for wider compatibility of distribution?

I'm trying to load up the fgt-SDK on a NI CompactRIO, which runs a Debian fork, and it's failing to load up some dependencies.

admin@NI-cRIO-9033:/usr/local/lib# ldd libfgt_SDK.so
./libfgt_SDK.so: /lib/libm.so.6: version `GLIBC_2.29' not found (required by ./libfgt_SDK.so)
./libfgt_SDK.so: /lib/libpthread.so.0: version `GLIBC_2.30' not found (required by ./libfgt_SDK.so)
./libfgt_SDK.so: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./libfgt_SDK.so)

glibc-2.24 is the latest NI is distributing, and the Debian mainline lists glibc-2.28-10 as the latest stable. gcc-7.3.0-r.071 is the latest stable version I have in my package feeds. (That would mean GLIBCXX_3.4.24.)

I know Ubuntu is a few versions ahead, and meets those versions, unfortunately some other distros have slower approval cycles.

Yes, I am asking NI if they have those updated versions in pipeline. For a lab/experimental environment manually installing unstable/untested glibc might not be a problem, but this is for production so I'm a bit hesitant to go that route.

Get FlowEZ status - Labview

i'm using the LabVIEW Lineup SDK
Get FlowEZ status , if a flow sensor is attached for the Boolean array element 'flow unit' this should return true ? in testing I have a LINK-FlowEZ with a flow sensor attached and I read back a false value, but conversely when calling GetFUType it does return the appropriate type of flow sensor attached.
i'm using an index array in expanded mode to get all the values and populate a cluster with all relevant information regarding the particular FlowEZ module that i'm accessing thru the LINK.

Library crashs under Raspberry Pi (Linux ARM64)

Hello,

I'm trying to connect a Fluigent controller from a Raspberry Pi.
Using SDK version 23.0.0. I wrote a very simple sample program:

#include "fgt_SDK.h"
#include <iostream>

int main( int argc, char* argv[] )
{
    std::cout << "Calling fgt_init" << std::endl;
    fgt_init();
    std::cout << "Calling fgt_init" << std::endl;
    return 0;
}

Then, I compile, link to libfgt_SDK.so and run this program. If no Fluigent device is connected to the Rapsberry, it just works fine and return 0 (this confirms libfgt_SDK.so is correctly loaded and usable).
But, when a Fluigent device is connected, the program crashs when fgt_init() is called. I compiled in debug and ran from GDB, got the output:

Thread 1 "fluigent_bin" received signal SIGABORT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50          ../sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.

Trace is:

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x0000007ff7d94aa0 in __GI_abort () at abort.c:79
#2  0x0000007ff7a70b24 in _Unwind_SetGR () from /lib/aarch64-linux-gnu/libgcc_s.so.1
#3  0x0000007ff7a75464 in __gcc_personality_v0 () from /lib/aarch64-linux-gnu/libgcc_s.so.1
#4  0x000000555564a16c in _Unwind_RaiseException_Phase2 ()
#5  0x000000555564a6b8 in _Unwind_RaiseException ()
#6  0x00000055556351f8 in __cxa_throw ()
#7  0x0000007ff7f220ac in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#8  0x0000007ff7f4f508 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#9  0x0000007ff7f688e8 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#10 0x0000007ff7f1cc68 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#11 0x0000007ff7f4f75c in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#12 0x0000007ff7f53574 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#13 0x0000007ff7f6885c in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#14 0x0000007ff7f532bc in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#15 0x0000007ff7f5350c in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#16 0x0000007ff7f6ac5c in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#17 0x0000007ff7f68030 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#18 0x0000007ff7f794e0 in ?? ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#19 0x0000007ff7f912e4 in fgt_init ()
   from /home/user/dev/vobs_uflu/build/fluigent2/linarm64/debug/stg/Debug/libfgt_SDK.so
#20 0x00000055555b5d00 in main (argc=1, argv=0x7fffffef58)
    at /home/user/dev/vobs_uflu/private/uflu/prg/fluigent/src/main.cpp:8

If you cannot reproduce and send me a debug version of libfgt_SDK.so, I may be able to send you a more verbose trace.

I'm using:
Linux raspberrypi 5.15.84-v8+ #1613 SMP PREEMPT Thu Jan 5 12:03:08 GMT 2023 aarch64 GNU/Linux
With G++:
gcc version 10.2.1 20210110 (Debian 10.2.1-6)

Sensor Calibration

Hello, I have been trying to set the flow rate for my system from the software development kit functions using the fluigent LineUp pressure pumps and Flow units. I am running droplet generation oil with one pump and water with the other. I am running into an issue where whatever flow unit I use to regulate the flow rate of the water is oscillating a lot around the flow rate I need instead of being more or less constant with very small oscillations. The other flow unit that has oil running through it is not causing this issue. I know that it is only for the water because I have tried switching flow units and the issue keeps repeating for whatever unit has water flowing through it. I already tried checking the calibration table of each of my flow units using the function present in the software development kit, and it says both flow units are set to H2O. I am not sure what could be causing this problem.

Missing .vip file for LabVIEW Installation

Hello!

Im trying to use the Fluigent SDK to control our Fluigent equipment using LabVIEW 2020. According to the 'Fluigent SDK.pfd', I should be using a .vip file to install the SDK using the National Instruments Package Manager. However, it appears as though the necessary .vip file is missing from the repository. I was wondering if it could be added to the repository?

Thank you!

Function to change regulation response time have no affect

We are finding slow regulation when using the API vs when using the application provided by Fluigent.

Specifically, calling this function with various responseTime values:
Fgt_set_sensorRegulationResponse(unsigned int sensorIndex, unsigned int responseTime);

And calling this function with various "value" settings:
Fgt_set_pressureResponse(unsigned int pressureIndex, unsigned char value);

does not seem to have any affect on actual response time, which is very slow, particularly when we are within 10% of the target flow rate.

We are using the following API version:

/*============================================================================
*               Fluigent Software Developement Kit for C++
*----------------------------------------------------------------------------
*         Copyright (c) Fluigent 2019.  All Rights Reserved.
*----------------------------------------------------------------------------
*
* Title:   fgt_SDK_Cpp.cpp
* Purpose: Wrapper to fgt_SDK_*.dll
*			Contains an interface to each dll function and type conversions
* Version: 19.0.0.0
* Date:	06/2019
*============================================================================*/

Our target operating system is Windows x64.

Thanks for your help.
Vince

LabView executable VI issues

Hi,

I'm experiencing issues when trying to create an executable LabView VI.

The simplest way to reproduce this is to create a LabView project and pull the SDK example VIs into the project. Then create an .exe executable under build.
It won't control the pump and only show an error code (see attached screenshot). On the other hand running the VI regularly within Labview works fine.

The method of creating an executable with the Fluigent SDK worked fine for an older release I tried (1.0.0.13).

I'm using Windows 10 and LabView 2018 32bit.

Screen Shot 2019-10-01 at 14 07 32

fluigent MFSC - triangle waveform with time

Hello,
I would like to program a triangle function that will set and read the pressure with time at 1Hz, 2Hz, 10Hz, eventually 100Hz. I use Labview library, but I would like to simplify the instruction to go faster with MFSC. However the set/read vi are locked.
Is it possible to access the most direct command to set a pressure on MFSC on channel 1 only ?
(if it is not clear : a function generator is giving an output voltage versus time, at different frequencies. Here, I would like the voltage to become the pressure on MFSC).
Yours
Laurent

M-switch acuation

We've had some issues with the M-switches actuating consistently. Sometimes, we get a non-zero error code and can wake the device(s) from sleep, but this sometimes requires a full reboot of the controller, not simply to set the power to 1. Additionally, devices often report correct actuation (error code 0), but fail to actuate. We catch these by the actuation time, which, in our testing, should not be less than 0.3s and non-zero. Here is a sample script that reproduces the issue:

from Fluigent.SDK import fgt_SWITCH_DIRECTION
from Fluigent.SDK import fgt_get_valveChannelCount
from Fluigent.SDK import (
    fgt_get_valveRange,
    fgt_get_valvePosition,
    fgt_set_valvePosition,
    fgt_set_power,
    fgt_get_valveChannelCount,
    fgt_set_sensorRegulation,
    fgt_get_sensorValue,
    fgt_get_sensorRange,
    fgt_set_pressure,
    fgt_get_pressure,
)

from tqdm import tqdm
import random
import time


def run():
    """Test M-switch fault by actuating to random positions."""
    fgt_init()
    m_switch_list = list()

    faults = dict()
    # Only test M-switches
    for valve in range(fgt_get_valveChannelCount(0)):
        if fgt_get_valveRange(valve) > 1:
            m_switch_list.append(valve)
            faults.update({valve: 0})
    # Loop 1000 over each switch by randomly selecting a switch (if there are multiple) and randomly setting a position.
    for _ in tqdm(range(1000 * len(m_switch_list))):
        switch = random.choice(m_switch_list)
        position = random.randint(0, 9)
        t1 = time.time()
        error_code = fgt_set_valvePosition(
            switch, position, direction=fgt_SWITCH_DIRECTION.Shortest, wait=1
        )
        t2 = time.time()
        # time.sleep(2.5)
        ret_val = verify_switch_actuation(switch, position, error_code, t1, t2)
        faults.update({switch: faults[switch] + ret_val})

    fgt_close()
    return faults


def verify_switch_actuation(
    switch: int, position: int, error_code, t1, t2, actuation_time=0.3
):
    """Check that M-switches actuate as expected via error code and the switching duration. For durations less than 0.5 seconds but not 0, the switch has likely failed to actuate and requires waking from sleep.

    Args:
        switch (int): Switch selection, 0 or 1.
        position (int): Switch position, 0 to 9.
        error_code (_type_): Error code returned by the switch after actuation. See Fluigent SDK for list of error codes.
        t1 (float): Start time
        t2 (float): End time
    """
    # Check error code and actuation time
    if error_code.__dict__["_fgt_ENUM__value"] != 0 or (
        (t2 - t1) > 0 and (t2 - t1) < actuation_time
    ):
        print(error_code)
        print(
            f"Failed to actuate at position ({switch},{position}) with an actuation time of {t2-t1} seconds. Rebooting controller."
        )
        ############# Comment this section out to verify that the switch does not phyiscally actuate when this if statement is true.
        # Turn off LineUP Controller
        error_code = fgt_set_power(0, 0)
        time.sleep(5)
        # Turn on LineUP Controller
        error_code = fgt_set_power(0, 1)
        time.sleep(5)
        fgt_close()
        #############
        # If the switch fails to actuate, try 5 more times to verify.
        for i in range(5):
            new_position = random.randint(0, 9)
            t1 = time.time()
            error_code = fgt_set_valvePosition(
                switch, position, direction=fgt_SWITCH_DIRECTION.Shortest, wait=1
            )
            t2 = time.time()
            time.sleep(2.5)
            # Reset 2-switch to open
            print(
                f"Actuated at position ({switch},{new_position}) with an actuation time of {t2-t1} seconds."
            )

        return 1
        # if error_code.__dict__["_fgt_ENUM__value"] != 0 or (
        #     (t2 - t1) > 0 and (t2 - t1) < actuation_time
        # ):
        #     print(error_code)
        #     print("Unable to wake M-switch. Stopping flow.")
        #     fgt_set_sensorRegulation(0, 0, 0)
        # else:
        #     print(f'Able to reboot successfully, M switch {switch} actuated correctly in {t2-t1} seconds')
    else:
        pass
        print(f"M switch {switch} actuated correctly in {t2-t1} seconds")

        return 0


if __name__ == "__main__":
    n_faults = run()

Non updated calibration when changing fluid type in flow sensors ( Python SDK )

Hello , and thank you for your work ,

We are working on a machine using some of your sensors , your flow-meters sensors are used to measure the amount of liquid flowing through the experiment.

We are using the Python SDK to get ul/min values in our software , everything works well except when we change the fluid type :

Exemple :
The sensors is first in H2O mode , we can read the correct range from it ( 0-120 )
When we change the fluid type to , let say , IPA , the sensor report the correct fluid name ( IPA ) but shows an non updated range : ( 0-120 )

We except the sensor to give 0-600 for IPA

This issue is not constant : from time to time it works , mostly not

Any idea what would be the issue ?

Here are some logs to show what is happening :

setting calibration to IPA
OK
[WARNING] fgt_get_sensorCalibration sensor channel 1928774657 of type F_OEM error 14 - Sensor is calibrating Controller SN: 12140 info: remote control
calibration is: NONE
[WARNING] fgt_get_sensorCalibration sensor channel 1928774657 of type F_OEM error 14 - Sensor is calibrating Controller SN: 12140 info: remote control
sensor range :  120
calibration is: NONE
[WARNING] fgt_get_sensorCalibration sensor channel 1928774657 of type F_OEM error 5 - Module is in sleep mode Controller SN: 12140 info: remote control
[WARNING] fgt_get_sensorRange sensor channel 1928774657 of type F_OEM error 5 - Module is in sleep mode Controller SN: 12140 info: remote control
sensor range :  0
calibration is: NONE
sensor range :  120
calibration done:  IPA
sensor range :  120

Here is an example on how the code is used :

    # After user input a fluide type on a sensor onto the GUI
    # send the specific calibration to this sensor
    def actualize_calibrations(self, calibration, number, id):
        print(f'coucou falcon {number}, setting calibration to {calibration}')
        if number == 1:
            self.C_calibration_txt = calibration
            if calibration == 'H2O':
                Fluigent.fgt_set_sensorCalibration(id, Fluigent.fgt_SENSOR_CALIBRATION.H2O)
            elif calibration == 'IPA':
                Fluigent.fgt_set_sensorCalibration(id, Fluigent.fgt_SENSOR_CALIBRATION.IPA)

Do not hesitate to ask for some more details ,
Jérémie

Unable to detect a MFCS device in Phyton

Dear Fluigent,

I am using a Fluigent MFCS device in order to control some microfluidic channels. It works well by using MAESFLO but I need to integrate your device in my Python software. Actually the libraries you provide both on your website and also on github (https://github.com/Fluigent/fgt-SDK/releases) are not working (the device is not recognized by Python) while the device is clearly working with MAESFLO and it is recognized in the WIndows device manager. Do you may have any suggestion about that? (I’m working with Windows 10 and python 3.7

LabVIEW "Basic Get Instruments Info" example error handling strategy

The example stops as soon as an error is detected
This means that in case there is no pressure channels (no pressure controller for example), the example will stop and will not proceed to FB/FU detection (nor TTL channels detection)

Such behavior should be changed so that all types of channels should always be tested
Best solution is to:

  • call fgt_get_pressureChannelsInfo only if fgt_get_pressureChannelCount returned at least one channel
  • same schema to be applied for sensor/TTL channels

SDK library installation

Hi,

For the fluigent_sdk-22.0.0, how could I install the library for python? Since there are two files that needed to be installed (.exe and .msi), is there any sequence requirement for the packages?

SDK installation issue

Dear Sir/Madam,
I would like to have modules for setting pressures onto "MFCS-EZ" device
and monitoring flow rates with "flow units".
Can you tell me how to achieve this ?
I thank you in advance for your help,
and I wish you a nice day,
Christian

Engine does not detect FUs when using InitEx

The behavior is still to be confirmed (to be tested with a FB S/N > 9)
Using:

  • LabVIEW 2019 32-bits and SDK 19.0.0.5
  • a FB (S/N 359) with 4 FUs
  • the example "Basic Get Instruments Info.vi"

No sensor channels is detected:

  • fgt_get_sensorChannelCount returns a count of 0
  • fgt_get_sensorChannelsInfo returns an error 11 (both are coherent)

Removing the call to fgt_initEx solves the FUs detection and all 4 Flow units are now properly seen

SDK not available on darwin

I have run into some trouble trying to use the SDK on my MAC laptop. I think I was able to use it a year ago, however I am not sure.

I am using python in order to control the flow unit and flow sensor. I have run a following command in order to import the library:
from Fluigent.SDK import fgt_set_pressure, fgt_get_pressure, fgt_get_sensorValue, fgt_init, fgt_close

In response I got a following message:
SDK not available on darwin

Could you please help me solving this issue?

Inverted push/pull flow rate control

Hi, I am the software developer implementing support for the "PlexFlo96" device that Fluigent is manufacturing for Bruker. We are having an issue with the flow control when using the push/pull controller. If you're not familiar with the device, there is one flow sensor, one push/pull pressure/vacuum controller, and one FlowEZ pressure controller. With the push/pull controller, a positive pressure will create a negative flow through the sensor from the push/pull reservoir towards the pipettor. A negative pressure will create a positive flow from the pipettor to the push/pull reservoir. This is different from the FlowEZ, where a positive pressure results in a positive flow.

The issue that we are having is with the flow rate control (Fgt_set_sensorRegulation) when using the push/pull controller. When requesting a positive flow, the pressure becomes positive, which results in a negative flow, and vice versa. It also seems to always max out the pressure (either positive or negative) when using the flow control. This indicates to me that the relationship between pressure and flow is not inverted as it should be for the push/pull controller. When setting a positive flow target, it uses positive pressure resulting in negative flow. This creates a feedback loop where it sees that the flow needs to be increased, and increases the pressure more, which decreases the flow more, on and on until the pressure is maxed out. This can also saturate the flow sensor, so the volume delivered is larger than measured. I thought maybe we need to explicitly set a negative pressure response (Fgt_set_sensorRegulationResponse) when using flow control with the push/pull controller, but that doesn't appear to be how that function works and it only takes an unsigned argument.

We're not able to mock this up in Oxygen because of a different issue in that software. Below is a screenshot of what we were guided to do when pulling from the pipettor to the push/pull reservoir (negative pressure, positive flow). The issue with this is that the "set value" for flow unit #1 step starts flow regulation for the flowez instead of the push/pull controller. The push/pull pressure just stays at what was explicitly set.

oxygen push pull script

BasicSetPressure.py not working

I am trying to run BasicSetPressure.py using the python sdk. I think that I have successfully installed the SDK. I am trying to control a Flow-EZ device which is connected to a Link-EZ device. The Link-EZ device is connected to my computer. Python successfully executes the import statements at the top of the file. The program stops running when it attempts to execute "fgt_init()". It does not crash with an error message. Instead, it appears to almost freeze. The same issue occurs if I comment out the "fgt_init()" and move straight to "fgt_set_pressure(0,20)".

I am using Python 3.8 on a 64-bit computer running Windows 10 Home.

Do you have any idea what may be causing this issue?

Fluigent | Matalb Control Code | Clemson University

Dear Mark and Team members,

I am facing an issue with our Matlab control Code for the system we have at Clemson University. The code written by us runs fine but suddenly it stops working in the middle at any instance of time. We have over 400 mixing test samples and the code stops randomly at 6th case or 1st or 2nd during our testing. I am worried about this and I would like to seek help from your software engineer regarding the issue.

I am attaching our code along with this email for your reference. I am also attaching the error messages. Would you able to help us in solving this problem?

error_1
error_2

Let me know if your engineer requires a remote access to our system, we will be happy to provide the remote control of our system.

Wishing you a Happy Thanksgiving,
Omkar

-- attachement removed by Fluigent. There was a password in your code

Question on PX1

I am using the PX1 as a pressure controller in our system. However, I noticed that the actual pressure doesn't go down to 0 after the pressure is set to 0. It usually costs a long time to release the pressure. For example, I set the pressure to 300 mbar for 10s then set the pressure to 0 bar. It may take 15 seconds or more to release the pressure I read the pressure using the fgt_fet_pressure() function.

Anything wrong with my application?

PID Tuning?

Is it possible to tune the performance of the PID used in the fgt_set_sensorRegulation or fgt_set_customSensorRegulation functions? Due to larger system volume, it currently takes about 30s to get from 0 to 500 uL/min. We have a Flow EZ and FLU-L.

Set flow rate block in MAT not responding/working

Hi,
I am having troubles with the automation tool (MAT). I can automate pressures using MFCS --> Channel x --> set pressure at x mbar and then connect this block to a wait block of x minutes so that the pressure stays consant.

However, when I want to automate the flow instead of the pressure, it does not seem to work. I tried making a block using FRP --> flowboard --> flow unit x --> set flow rate --> set flow rate at x µL/min with pressure source x and connect this to a waiting block. This time around, the flow remains unchanged.

When I tried by tuning the pressure, the flow meter sensed flow. I am using an flow meter (size M), a flow rate platform, and an MFCS EZ. I can also send pictures if that is more helpful. Thanks in advance for the help!
Kind regards,
Luuk
P.S. I am new to GitHub so I hope this is the right spot to ask such questions ;)

What does this mean: `LineUP error 2 - Unavailable functionality`

Hi, I am getting these error messages in stdout on Windows.

The setup consists of two flow sensors and two pressure regulators. I am getting this error message, regardless of whether I set the pressure or internal feedback loop.

fgt_get_sensorValue sensor channel 1122731009 of type LineUP error 2 - Unavailable functionality Controller SN: 11960 info: remote control

What does the error message mean? Is this related to #60 ?

MFCS-EZ SDK issue: Instrument not found

Hello!
I have been trying to set up a connection to control our MFCS-EZ either through Matlab or Python. I have installed SDK for both Matlab and Python, and no matter what I try fgt_init always returns an error: Instrument not found
I have tried on several computers just to be sure that my PC is not the problem.
Pump is working normal when using your softwares (AiO or MAT).

What could be the issue?

Medina

Fluigent Aria?

Good afternoon,

I would like to access an API for the Fluigent Aria. If this is possible, where should I request this?

Best,
Cody

Regulation with more than one flow meter fails

While regulating pressure/flow using a single flow meter things work fine using the SDK. When both flow meters are called to perform regulation using independent pressure regulators regulation fails.

unable to detect a controller in sdk, but can use Maesflo

Dear Fluigent,
I cannot detect a controller using two Windows 10 machines, but I can use Maseflo 3.3.1. (I haven't tried Maesflo on both of them.)
I can detect a controller using the sdk on Windows 7 machines.

  • On both types of machines I am using an Anaconda distribution of Python 3.6 or 3.7. Spyder is our IDE.
  • The controller is an MFCS-8C 1000mbar, whose sn is 0106.
  • Mark Aruda sent me a report assistant tool, but that did not run properly on my machine.
    Thanks for your help.
    Steve Hudson

ess valve movement confirmation

I have a software question about the ESS valve SDK for the project we're working on. We would like to positively confirm that the valves are in the correct position before starting flow, but the SDK does not provide such a query. So, I have two questions:

  • Can we assume that by the time the function to set the position (ess_set_rot_switch / ess_set_two_switch) returns, that the valve is already in the requested position and not still moving?
  • If the valve fails to reach the requested position for some reason, will a non-zero value be returned? The return values listed in ess_c.h don't seem that they would indicate such an error.

Periodic output

Hello,

I am trying to set a periodic pressure output with the Fluigent MFCS-EZ, using the Python library. I can't seem to reach clean sinusoidal waves with frequency around 1 Hz by only implementing the set_pressure fonction in my loop. What would you recommand ? Is there a smart way to do it and what would be the hard/software limitations of such an application ?

Best,
Thomas

New user/Software crash with Aria

Hi, I'm a new user trying to use Aria for some flow applications. We are interested in flow control from TTL pulses generated by our microscope; and currently, I'm having issues with the dedicated Aria application.

The software detects the Aria hardware, but the moment I try adding/editing the existing sequence, the software crashes with no apparent error messages. I can access other sub-menus, such as going to the calibration window, manipulating TTL pulse duration, etc. I'm running this on a Win 11/ i7 7th gen laptop (FYI).

Any help on this would be appreciated.

Aria C# Integration

My lab has to control multiple different instruments with C# and was wondering if Aria was compatible with the software development kit.

Difficulty Regulating Multiple Flowrates

All,
I'm using a MFCS pressure board with two FRP sensors (Flow_L_Dual and Flow_M_Dual). I am trying to set two flowrates by calling fgt_set_sensorRegulation, binding each of the sensors to the respective channel. What seems to be happening is the closed-loop regulations compete with each other. I've referred to the documentation and it says that calling fgt_set_sensorRegulation on multiple lines is fine. However, what I'm seeing is an oscillation in each flowrate that seems to correspond to the other. When flowrate-1 pops over the setpoint, flowrate-2 is dipping down.

When I use the Fluigent A-i-O (All-in-One) tool to manually setup the same flowrates, everything behaves as expected- without oscillations. This leads me to believe that either A-i-O is doing something on top of just calling fgt_set_sensorRegulation, or there's something else that I should be doing in my code with either initialization, or steps for starting up the regulation (although the Basic Sensor Regulation example seems to do the same steps as me).

snippet of my init:

uint16_t sn[FGTSIZ];
fgt_INSTRUMENT_TYPE it[FGTSIZ];
// get hw serials
if (Fgt_detect(sn, it))
{
        Fgt_init();
        // Pressure
        uint8_t pc(0);
        Fgt_get_pressureChannelCount(&pc);
        fgt_CHANNEL_INFO pi[FGTSIZ];
        Fgt_get_pressureChannelsInfo(pi);
        for (int k = 0; k < pc; k++)
        {
		Fgt_set_pressureUnit(k, "mbar");
		Fgt_set_pressureResponse(pi[k].indexID, 1);
		Fgt_calibratePressure(pi[k].indexID);
        }
        // Sensors
        uint8_t sc(0);
        Fgt_get_sensorChannelCount(&sc);
        fgt_CHANNEL_INFO si[FGTSIZ];
        fgt_SENSOR_TYPE st[FGTSIZ];
        Fgt_get_sensorChannelsInfo(si, st);
        for (int k = 0; k < sc; k++)
        {
		Fgt_set_sensorRegulationResponse(si[k].indexID, 6);
		Fgt_set_sensorUnit(si[k].indexID, std::string("mL/hour"));
		Fgt_set_sensorCalibration(si[k].indexID, fgt_SENSOR_CALIBRATION::H2O);
        }

snippet of my set's:

fgt_set_sensorRegulation(0, 1, 14.0);
fgt_set_sensorRegulation(1, 0, 1.0);

If anyone has any advice please let me know.

Thanks,
Mike

32Bit Linux Version

Hi,
is there a possibility to get a 32 Bit Version of the Linux .so file?

Python: fgt_SWITCH_DIRECTION object cannot be interpreted as integer

In the code snippet below, set_valvePosition gives a type error. If the default argument for direction is instead passed already cast as an int it works. (SWITCH_DIRECTION.Shortest vs int(SWITCH_DIRECTION.Shortest))

import Fluigent.SDK as flgt
LineUP_config = [
    # FlowEZ with +-1bar pressure source and NIFS
    1, 100, 0, 5, flgt.fgt_SENSOR_TYPE.Flow_L_NIFS, 0, 0, 0, 0, 0,
    # SwitchEZ with L-switch
    4, 103, 0, flgt.fgt_VALVE_TYPE.LSwitch, 0, 0, 0, 0, 0, 0
]

LineUp_example = flgt.fgt_create_simulated_instr(
    flgt.fgt_INSTRUMENT_TYPE.LineUP,
    1,
    0,
    LineUP_config
)


flgt.fgt_init()
controller_array = flgt.fgt_get_controllersInfo()
pressure_array = flgt.fgt_get_pressureChannelsInfo()
valve_array = flgt.fgt_get_valveChannelsInfo()

this_valve = valve_array[0][0].indexID
ranges = flgt.fgt_get_valveRange(this_valve)
print(flgt.fgt_get_valvePosition(this_valve))
flgt.fgt_set_valvePosition(this_valve, ranges)
print(flgt.fgt_get_valvePosition(this_valve))
flgt.fgt_close()

Python 3.10.4
Traceback

  File "C:\fgt-SDK\Python\simtesting.py", line 28, in <module>
    flgt.fgt_set_valvePosition(this_valve, ranges, direction= flgt.fgt_SWITCH_DIRECTION.Shortest)
  File "C:\fgt-SDK\Python\Fluigent\SDK\__init__.py", line 719, in fgt_set_valvePosition
    c_error, = low_level_function(valve_index, position, direction, wait)
  File "C:\fgt-SDK\Python\Fluigent\SDK\low_level.py", line 600, in fgt_set_valvePosition
    c_error = c_ubyte(lib.fgt_set_valvePosition(c_uint(valve_index), c_int(position), c_int(direction), c_int(wait_int)))
TypeError: 'fgt_SWITCH_DIRECTION' object cannot be interpreted as an integer

Communication Protocol

I have a pressure controller PX1. Where could I find the communication protocol, e.g. command for writing and reading info?

Question about the PX1 pressure controller

I have a question about the pressure controller. Does the pressure controller support CAN communication protocol? Besides the hardware, is there any difference in the software, e.g. the command? Could I use the same Python code with CAN communication?

Sensor calibration not applied

Hello,

We have a python code that manage several F-OEM (pressure controllers, valves, sensors).

Part of the code is used to change the calibration of the sensor. We can change from water to IPA. But we can't use the HFE, OIL or FC40 calibration. When we use this calibration, nothing happens.

Do you have any idea on how to fix this ?
*Fluigent.fgt_set_sensorCalibration(self.Stm.FlowRateM.id, Fluigent.fgt_SENSOR_CALIBRATION.IPA) => works
*Fluigent.fgt_set_sensorCalibration(self.Stm.FlowRateM.id, Fluigent.fgt_SENSOR_CALIBRATION.HFE) => does not work

Kind regards,
Youen

Intermittent issues with setting flowrate

Using the FLU-L, we control flow with the fgt_set_sensorRegulation function. Occasionally, when we set the flowrate to something like 500 uL/min with fgt_set_sensorRegulation(0,0,500) , the unit will reach an arbitrary intermediate value, e.g., 180 uL/min, and then stabilize there. Issuing the command a second time resolves this error, but is not always practical. Any idea what could be going on?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.