首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大容量位读取的MinimalModbus超时

大容量位读取的MinimalModbus超时
EN

Stack Overflow用户
提问于 2018-06-25 10:19:51
回答 1查看 304关注 0票数 0

请在这里找个人帮忙。我与modbus设备进行通信,并按预期的方式获取数据,因此我需要一些建议,我试图读取设备上的所有位寄存器(伊顿SC200),以获得定制的人机界面。如果我尝试一个for next循环,或者就像在发布的代码中一样,com端口会丢失通信。

代码语言:javascript
运行
复制
#!/usr/bin/env python
import minimalmodbus
import time

instrument = minimalmodbus.Instrument('COM11', 1)
minimalmodbus.TIMEOUT = 1

DO =[]
instrument.address     # this is the slave address number
instrument.mode = minimalmodbus.MODE_RTU   # rtu or ascii mode
#port name, slave address (in decimal)#0 = instrument.read_bit(1,1)
#digital = instrument.read_registers(1,32,4)
Version =instrument.read_registers(3001,3,4)
serialupper = instrument.read_registers(6001,1,4)
serialLower = instrument.read_registers(6002,1,4)
busvolt= instrument.read_registers(7001,4,4)

print type(serialupper[0])
print(serialupper, serialLower)
upper = serialupper[0] << 16        # shift upper left 16 bits
Snumber = upper + serialLower[0]
print ('Serial no: = ' + str(Snumber))
print(busvolt)

print ('Getting i-o')

print instrument.read_bit(1001,2)
print instrument.read_bit(1002,2)
print instrument.read_bit(1003,2)
print instrument.read_bit(1004,2)
print instrument.read_bit(1101,2)
print instrument.read_bit(1102,2)
print instrument.read_bit(1201,2)
print instrument.read_bit(1202,2)
print instrument.read_bit(1203,2)
print instrument.read_bit(1204,2)
print instrument.read_bit(1201,2)
print instrument.read_bit(1201,2)

我得到的回应是:

代码语言:javascript
运行
复制
<type 'int'>
([3754], [53255])
Serial no: = 246075399
[16989, 42144, 32704, 0]
Getting i-o
0
0
Traceback (most recent call last):
  File "modbusRTU.py", line 29, in <module>
    print instrument.read_bit(1003,2)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 193, in read_bit
    return self._genericCommand(functioncode, registeraddress)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand
    payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 795, in _performCommand
    response = self._communicate(request, number_of_bytes_to_read)
  File "C:\Python27\lib\site-packages\minimalmodbus.py", line 930, in _communicate
    raise IOError('No communication with the instrument (no answer)')
IOError: No communication with the instrument (no answer)

我已经将超时值从0.5改为2,以确定这是否是问题所在,有时我得到一个完整的数据运行,其他时候我什么也得不到。我们将感激地接受任何援助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-26 17:27:42

很可能是物理通讯问题。检查电缆终端,检查终端电阻(用于RS-485),检查RFI/EMI干扰源,并尝试降低波特率。电缆越长,波特率就越低。

如果这是RS-485,总线两端的终端电阻器是吗?它们的尺寸合适吗?这在高速网络中更为重要。在速度较慢(9600或更少)的网络上,我看到RS-485在没有终端电阻或超大终端时工作得很好。通常,如果不轮询大量数据,我将将RS-485波特率设置为9600。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51021148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档