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: A question on modbus |
From: | Mark Rivers via Tech-talk <tech-talk at aps.anl.gov> |
To: | Amber <279762081 at qq.com>, tech-talk <tech-talk at aps.anl.gov> |
Date: | Tue, 11 Jul 2023 15:48:12 +0000 |
Hi Kevin,
That is a standard Modbus command. It uses function code 5 (write single coil) using data="" to address=0. The value 0xff00 is what the Modbus standard requires to be written to a single coil for the bit value 1. You need to create another driver with this command: drvModbusAsynConfigure("V1","Init", 1,5,0,1,0,0, "Init") You can create a template file called modbusInit.template in the same directory with your startup script. record(bo,"$(P)$(R)") { field(DTYP,"asynUInt32Digital") field(OUT,"@asynMask($(PORT) 0 0x1)") field(VAL, “1”) field(PINI, “YES”) } That record will process during iocInit (because PINI=YES). It will write the value 0xff00 to address 0 using function code 5. Load that file in your startup script with the command dbLoadRecords(modbusInit.template”, “P=power:,R=init,PORT=V1”) Mark From: Tech-talk <tech-talk-bounces at aps.anl.gov> On Behalf Of
Amber via Tech-talk Hello everyone, I am using a device with Modbus-RTU protocol. The communication data is transmitted in hexadecimal words. I want to use the modbus module in epics to solve this problelm. When reading device data, the follwing sentence is used in the .cmd file: drvModbusAsynConfigure("V1","Power", 1,3,0,1,0,1000, "Power") and in the substitution file: file "../../db/ai.template" { pattern {P, R, PORT, OFFSET, BITS, EGUL, EGUF, PREC, SCAN} {power:, V_read, V1, 0, 16, 0., 655.35, 2, "I/O Intr"} } There is another command to open the device, which should write " \x01 \x05 \x00 \x00 \xFF \x00 \x8C \x3A" to the device.
After reading all the examples I still don't know how to send this command with modbus module correctly. I think I didn't understand them clearly. Would you like to give me some advice? Is it suitable
to use modbus module? How to realize it? Thank you very much. with my best wishes, Kevin |