I try to establish connection between a Mass flow controller and pc using minimalmodbus
python library.
Based on device document I have to set the communication port as:
Communication speed: 9600
Baud Start bit: 1
Data bits: 8
Stop bits: 2
Parity: none
input buffer: 300 Bytes
I tried to make a slave using that library on Windows through COM4
but it wasn't successful.
I use a simple code to make/test the connection:
import serial
import minimalmodbus as minbus
mfc_ins = minbus.Instrument('COM4',1,'rtu',False,True)
mfc_ins.serial.baudrate =9600
mfc_ins.serial.parity = serial.PARITY_NONE
mfc_ins.serial.timeout = 0.3
mfc_ins.serial.stopbits = 2
print(mfc_ins)
try:
print(mfc_ins.read_register(5))
except IOError:
print("Failed to read from instrument")
Note: Definition : Instrument(port: str, slaveaddress: int, mode: str=MODE_RTU, close_port_after_each_call: bool=False, debug: bool=False)
The output is
minimalmodbus.Instrument<id=0x2c3c3449730, address=1, mode=rtu, close_port_after_each_call=False,
precalculate_read_size=True, clear_buffers_before_each_transaction=True, handle_local_echo=False, debug=True,
serial=Serial<id=0x2c3c33b5dc0, open=True>(port='COM4', baudrate=9600,
bytesize=8, parity='N',stopbits=2, timeout=0.3, xonxoff=False, rtscts=False, dsrdtr=False)
and:
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 03 00 05 00 01 94 0B (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port COM4
MinimalModbus debug mode. No sleep required before write. Time since previous read: 49578.00 ms, minimum silent period: 4.01 ms.
MinimalModbus debug mode. Response from instrument: (0 bytes), roundtrip time: 0.3 ms. Timeout for reading: 300.0 ms.
Traceback (most recent call last):
File "<ipython-input-35-24f3921a9fc3>", line 1, in <module>
(mfc_ins.read_register(5))
File "C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py", line 480, in read_register
returnvalue = self._generic_command(
File "C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py", line 1245, in _generic_command
payload_from_slave = self._perform_command(functioncode, payload_to_slave)
File "C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py", line 1322, in _perform_command
response_bytes = self._communicate(request_bytes, number_of_bytes_to_read)
File "C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py", line 1490, in _communicate
raise NoResponseError("No communication with the instrument (no answer)")
NoResponseError: No communication with the instrument (no answer)
What I've tried so far:
- close_port_after_each_call = True
- enabling local echo
- Using another COM port
- Checking the COM properties in device manager and also set it as it's described above
- Changing the slave address, time out, time stop and other parameters
- And NO, there isn't another device using COM4. And the connection with Mass flow controller can be established through COM4 using company's own software.
- Enabling xonxoff
this is also the output of print(minbus._get_diagnostic_string())
## Diagnostic output from minimalmodbus ##
Minimalmodbus version: 2.0.1
File name (with relative path): C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py
Full file path: C:\ProgramData\Anaconda3\lib\site-packages\minimalmodbus.py
pySerial version: 3.5
pySerial full file path: C:\ProgramData\Anaconda3\lib\site-packages\serial\__init__.py
Platform: win32
Filesystem encoding: 'utf-8'
Byteorder: little
Python version: 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]
Python version info: sys.version_info(major=3, minor=8, micro=8, releaselevel='final', serial=0)
Python flags: sys.flags(debug=0, inspect=0, interactive=0, optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0, ignore_environment=0, verbose=0, bytes_warning=0, quiet=0, hash_randomization=1, isolated=0, dev_mode=False, utf8_mode=0)
Python argv: ['']
Python prefix: 'C:\\ProgramData\\Anaconda3'
Python exec prefix: 'C:\\ProgramData\\Anaconda3'
Python executable: 'C:\\ProgramData\\Anaconda3\\python.exe'
Float repr style: 'short'
Variable __name__: minimalmodbus
Current directory: C:\Users\Tutor_in\tubCloud\CO2 Sensors\Python Script
Python path:
C:\ProgramData\Anaconda3\python38.zip
C:\ProgramData\Anaconda3\DLLs
C:\ProgramData\Anaconda3\lib
C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\lib\site-packages
C:\ProgramData\Anaconda3\lib\site-packages\locket-0.2.1-py3.8.egg
C:\ProgramData\Anaconda3\lib\site-packages\win32
C:\ProgramData\Anaconda3\lib\site-packages\win32\lib
C:\ProgramData\Anaconda3\lib\site-packages\Pythonwin
C:\ProgramData\Anaconda3\lib\site-packages\IPython\extensions
C:\Users\Tutor_in\.ipython
## End of diagnostic output ##
Any suggestion would be appreciated