# Pycomm3 Logix PLC Response Times

**URL:** <https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164>\
**Category:** General Discussion\
**Created:** [January 18, 2025, 4:11am UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164 "2025-01-18T04:11:24Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 18, 2025, 4:11am UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/1 "2025-01-18T04:11:24Z")

</div>

Hi Kevin, I am using an AB 1756 with pycomm Logix driver and am having issues getting \>100ms per tag read. Do you know if thats normal for that library? should I switch to something else?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 18, 2025, 4:25am UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/2 "2025-01-18T04:25:43Z")

</div>

Response times \>100ms are slow but I'm not certain if you can attribute it to the library or not. Take a Wireshark capture.

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 1:34pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/3 "2025-01-21T13:34:04Z")

</div>

Thanks Kevin, I will work do that. In the meantime are there any other opensource libraries you would suggest that could get me 10ms tag reads? I mean I can read all the tags very fast, but reading the data in the tags is what takes 100ms is this normal?

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [January 21, 2025, 2:07pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/4 "2025-01-21T14:07:25Z")

</div>

What is on each end of this connection? IA Logix driver reading from pylogix PLC emulation?

How many tags are involved? How many requests are made to do the reads per desired update cycle?

(Typical request response times with a real L8x controllogix front port is 1 or 2 milliseconds. It doesn't take many requests to exceed your 10ms budget.

I created a Class1 I/O driver for Ignition because it is so hard to get very high speed very high volume data acquisition through a Class3 (TCP) connection.

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 2:28pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/5 "2025-01-21T14:28:13Z")

</div>

Hi, on one end its pycomm3 logix Driver running in python on the other end is the actual PLC 1756-EN2T/D. Here is the wireshark packet capture. I am reading the data inside of 6 tags.

![Capture](https://us1.discourse-cdn.com/inductiveautomation/optimized/3X/e/d/edfd26899e745007a574bcc89d3dcaf36d2da28c_2_690x27.jpeg)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 21, 2025, 2:30pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/6 "2025-01-21T14:30:02Z")

</div>

Can you post the actual pcap file?

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 2:35pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/7 "2025-01-21T14:35:49Z")

</div>

Yes np. the plc is at 138.133.114.  
[PLC Capture2.pcapng](https://forum.inductiveautomation.com/uploads/short-url/vTXChgVIknZbD1o0qm1Mtvjghr6.pcapng) (1.7 KB)  
39

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 21, 2025, 2:37pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/8 "2025-01-21T14:37:53Z")

</div>

You might get a faster response if pycomm3 is able to read using instance IDs rather than tag names. But there is clearly a 100ms gap between request and response here, so it's not just a "Python is slow" problem.

> [@Michael\_Ratterman](#):
>
> the other end is the actual PLC 1756-EN2T/D.

EN2T is an ethernet module. What's the actual PLC? Are you on the same network or is this over a VPN connection or something?

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 2:45pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/9 "2025-01-21T14:45:04Z")

</div>

oh yeh definitely over VPN. So I can read out the list of tags very quickly approx 45 tags in under 10ms. however reading the data inside is what takes long, however there is no noticeable difference between reading 1 tag or 6 tags this way,, its about 100ms.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 21, 2025, 2:45pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/10 "2025-01-21T14:45:46Z")

</div>

You aren't going to get close to 10ms over VPN.

I'm not sure why listing the tags would be any faster - are you sure? Can you post a capture that includes that? Are you sure pycomm3 hasn't cached your browse data or something?

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 3:12pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/11 "2025-01-21T15:12:01Z")

</div>

I ran the tag read and it read 45 in .99ms is this read different than reading the actual values in the tags?

 ![Capture](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/2/b2ac4ce771abcdd32bd233a19556f79179545688.jpeg)

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [January 21, 2025, 3:35pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/12 "2025-01-21T15:35:29Z")

</div>

~~No, you only printed the value of a single tag in 0.99ms.~~  
~~Your timing needs to be outside the loop to get the actual timing.~~

Nevermind - I read the code wrong.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 21, 2025, 3:35pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/13 "2025-01-21T15:35:40Z")

</div>

I think you're actually getting an error there.

Your read line should be:

```python
print(plc.read(*atomic*3))

```

(note the `*` that unpacks the list into varargs)

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 4:22pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/14 "2025-01-21T16:22:03Z")

</div>

yeh I took that out because I am getting an error. So it seems that unpacking the list is what is causing the 100ms delay?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 21, 2025, 4:23pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/15 "2025-01-21T16:23:00Z")

</div>

No, unpacking the list makes it so the library doesn't error out and the request is actually sent to the PLC!

You aren't doing _anything_ but printing an error message that happens to contain the tag list you passed in, among other things. Your console isn't wrapping long lines so you just aren't seeing the error message.

---

<div class="post-metadata">

**Author:** ![Michael\_Ratterman](https://avatars.discourse-cdn.com/v4/letter/m/838e76/32.png) [@Michael\_Ratterman](https://forum.inductiveautomation.com/u/Michael_Ratterman)\
**Post date:** [January 21, 2025, 5:53pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/16 "2025-01-21T17:53:40Z")

</div>

Can you recommend a driver that supports UDP messaging? I dont think Pycomm3 does.

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [January 21, 2025, 5:56pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/17 "2025-01-21T17:56:24Z")

</div>

CIP messaging uses TCP port 44818. I don't think you can use UDP.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [January 21, 2025, 6:44pm UTC](https://forum.inductiveautomation.com/t/pycomm3-logix-plc-response-times/101164/18 "2025-01-21T18:44:58Z")

</div>

> [@Michael\_Ratterman](#):
>
> recommend a driver

In Open Source, I only found this:

> **[GitHub - EIPStackGroup/OpENer: OpENer is an EtherNet/IP stack for I/O adapter...](https://github.com/EIPStackGroup/OpENer)**
>
> OpENer is an EtherNet/IP stack for I/O adapter devices. It supports multiple I/O and explicit connections and includes objects and services for making EtherNet/IP-compliant products as defined in the ODVA specification.

You could make an I/O target and have your PLC connect to it with generic ethernet device in the Studio 5000 I/O tree.

(That is essentially what you can do with my 3rd-party Ignition module's "Adapter" option.)
