1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 <2024> 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 <2024> 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: [SPAM] Re: autoConnect could not connect when reading a register by modbus relative addressing |
From: | Zhibang Shen via Tech-talk <tech-talk at aps.anl.gov> |
To: | "Mark Rivers" <rivers at cars.uchicago.edu> |
Cc: | "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov> |
Date: | Sat, 23 Nov 2024 06:43:42 +0800 (GMT+08:00) |
Dear Mark,
Thank you for your response. I can tell when will this issue happen with an example.
I change the modbusLength to 4 as what is done in motorAMCI. And I continuously read the values of 5 neighbor registers, like:
> status = pC_->readReg16(0, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
> status = pC_->readReg16(1, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
> status = pC_->readReg16(2, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
> status = pC_->readReg16(3, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
> status = pC_->readReg16(4, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
The modbus slave simulator shows that the master and slave only communicated once. And the autoConnect issue is reported at the last time.
> readReg16: reg = 0, value= 2020
> readReg16: reg = 1, value= 2021
> readReg16: reg = 2, value= 2022
> readReg16: reg = 3, value= 2023
> 2024/11/23 06:24:07.881 DM2C_1_1_In_Word 4 autoConnect could not connect:
> readReg16: reg = 4, value= 2023
I mean this autoConnect error occurs when I want to send message for the second time.
Best regards,
Zhibang
------------------
发件人: "Mark Rivers" <rivers at cars.uchicago.edu>
发送时间: 2024-11-22 23:03:21
收件人: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>, 沈治邦 <shenzb at ihep.ac.cn>
主题: [SPAM] Re: autoConnect could not connect when reading a register by modbus relative addressing
I think I see the problem.
drvModbusAsynConfigure("DM2C_1_1_In_Word", "L0", 1, 3, 24576, 2, 0, 0, "DM2C_stepper")That creates a driver that will use function code 3 to read from register location 24576 (0x6000). It will read 2 registers (the Modbus length argument), so it will read registers 0x6000 and 0x6001.
status = pC_->readReg16(44, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
However, here you are telling it to read relative register 44 (0x2c) which is absolute register 0x602c. That is invalid because you only configured the driver to read 2 registers. You need to increase the number of registers in the drvModbusAsynConfigure to include all registers you will be accessing.
Mark
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of 沈治邦 via Tech-talk <tech-talk at aps.anl.gov>
Sent: Friday, November 22, 2024 4:31 AM
To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: autoConnect could not connect when reading a register by modbus relative addressingHi,
I am encountering an issue while developing a modbus communication-based motor controller program, similar to the module motorAMCI.
I am attempting to read the values in registers with function code 3 by relative address. For instance, if I want to read the value located in 0x602C, which represents the current position of the motor. I set the starting address to 0x6000 by the command in st.cmd
drvModbusAsynConfigure("DM2C_1_1_In_Word", "L0", 1, 3, 24576, 2, 0, 0, "DM2C_stepper")
Then to read the motor position, I called the function in driver.cpp with sentence
status = pC_->readReg16(44, &read_val, DEFAULT_CONTROLLER_TIMEOUT);
24657 is 0x6000 and 44 is 0x2C, then I believe that the value at 0x602c could be accessed.
The definition of the readReg16 is the same with the method ANG1Controller::readReg16()
Consequently, I am unable to retrieve the correct register value, and an error is showed:
2024/11/22 17:57:00.751 DM2C_1_1_In_Word 2 autoConnect could not connect:
Could someone please help me figure out what might be causing this issue?
Thank you!
Best regards,
Shen Zhibang