当前位置: 首页 > 知识库问答 >
问题:

用RS485和Modbus(Python或LabView)读写温度控制器中的数据

令狐钧
2023-03-14

我有一个问题,对于习惯使用串行接口的人来说,这似乎很容易,但对我来说这是第一次。

我们希望通过使用温度控制器(CB100/CB400/CB500/CB700/CB900系列,由RKC Instruments提供:https://www.rkcinst.co.jp/english/download-center/?dc_cat=15#)来实现温度相关探测站的自动化。控制器通过RS485到USB适配器连接到运行Windows 10 Pro(版本1903,html" target="_blank">构建18362.267)的主戴尔OptiPlex5060小型塔(https://www.Dell.com/en-us/work/shop/desktops-all-in-one-pcs/optiplex-5060-small-form-factor/spd/optiplex-5060-desktop/cto01o5060sffus)。

  1. 鲍德拉特=9600;
  2. 位大小=8;
  3. 奇偶校验=无;
  4. 停止位=1

我认为我通过使用pymodbus库和下面的代码正确地连接了设备:

#Import useful modules
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
#For the first test, I manually read the configuration from the 
#the controller display and hard-code the values in the script.

d_port='COM3'                    #Device address

commspeed={}                #Communication speed
commspeed_table={
    '0':2400,
    '1':4800,
    '2':9600,
    '3':19200,
        }
commspeed['flag']='2'
commspeed['value']=commspeed_table[commspeed['flag']]

bitconf={}                  #Bit configuration
bitconf_table={
    '0':(8,'N',1),
    '1':(8,'N',2),
    '2':(7,'E',1),
    '3':(7,'E',2),
    '4':(7,'O',1),
    '5':(7,'O',2),
        }
bitconf['flag']='0'
bitconf['size'],bitconf['parity'],bitconf['stopbit']=\
bitconf_table[bitconf['flag']]

intime={}
intime['flag']='5'
intime['value']=round(int(intime['flag'])*1.666,0)

def main():
    modbus=ModbusClient(method='ascii',port='COM3',\
                        baudrate=commspeed['value'],stopbits=bitconf['stopbit'],\
                        bytesize=bitconf['size'],parity=bitconf['parity'],\
                        timeout=1)
    modbus.connect()

if __name__ == "__main__":
    main()

但是,当我尝试用这段代码(设备的地址是001HEX)读取它时:

r = modbus.read_holding_registers(0x0001,1)
print(r)

共有1个答案

宰父德馨
2023-03-14

在这种情况下,拆分问题可能是有用的。尝试使用外部软件测试器,如https://www.schneider-electric.us/en/faqs/fa180037/。当您的从机正确回复时,您将有一个可靠的参考来调试代码。祝您好运

 类似资料:
  • 温度控制 [HW,ACPI] thermal.act=摄氏度 -1 禁用所有"主动散热"标志点(active trip point) 正整数 强制设置所有的最低"主动散热"标志点的温度值,单位是摄氏度。 详见Documentation/thermal/sysfs-api.txt文档。 [HW,ACPI] thermal.psv=摄氏度 -1 禁用所有"被动散热"标志点(passive trip p

  • [Modbus-设备]<===>[RS485芯片<==>Raspberry PI GPIO]引脚。RS485有三根线(发射、接收、方向),它们的连接方式如下 RaspiPi<=>适配器 GPIO 14(8)-Tx<=>数据+ 我被困在让modbus在GPIO适配器上工作。我尝试过使用minimalmodbus,它在USB-RS485适配器上工作得很好,但在GPIO适配器上失败了。我怀疑这是因为方向

  • 但是,我的write_register在这里失败了。我正在读取设备的第5寄存器。代码如下所示。 回溯(最近的调用为last):文件“C://users/admin/pycharmprojects/weight_calibrate/weight_calibrate.py”,第17行,在mmc.write_register(4,5,0,6,False)文件“C:\users\admin\appdata

  • Python3 实例 以下实例演示了如何将摄氏温度转华氏温度:# -*- coding: UTF-8 -*- # Filename : test.py # author by : www.runoob.com # 用户输入摄氏温度 # 接收用户输入 celsius = float(input('输入摄氏温度: ')) # 计算华氏温度 fahrenheit = (celsius * 1.8) +

  • 我正在做一个项目,需要我使用TinkerKit热敏电阻传感器来获得室温。检测后,Arduino BT板必须通过蓝牙将串行数据发送回Android手机。温度需要在Celcius的手机屏幕上显示。 我已经使串行通信链接工作。但热敏电阻的读数似乎很奇怪。它的读数是173/174/175,但我不确定它的读数是华氏度还是摄氏度(因为我找不到任何数据表和热敏电阻读数装置的详细信息)。 我必须包括任何带数值的温

  • 本文向大家介绍使用python绘制温度变化雷达图,包括了使用python绘制温度变化雷达图的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python绘制温度变化雷达图的具体代码,供大家参考,具体内容如下 假设某天某地每三个小时取样的气温为 针对温度变化趋势绘制雷达图: 代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。