TCP Driver - Active/Passive connections

Do you find TCP Driver option for Active/Passive connection useful?
[poll]

  • Yes
  • No
    [/poll]
    Hi.

I think, it would be very useful, if TCP driver had an option to choose, if we want Active or Passive connection to the other party.

Currently TCP driver is Active connection only.
Active connection means, that TCP Driver will initiate the connection to the other party, which must be in passive (listen) mode.
Passive connection means, that TCP driver will be in passive (listen) mode, and other party will initiate the connection to the Ignition.

I have an upcoming project with 25 WLAN (wifi) handheld scanners. The scanner sends barcode string to the remote IP and port, but the remote IP must be in listen (passive) mode, because the scanner is initiating the Active connection.
And now I can’t use these scanners directly with Ignition, because Ignition TCP Driver is also Active connection initiator.

I was on the phone with Ignition support and together we established, that this is the current situation. In order to get this implemented ASAP, they asked me to submit a new feature request and if enough people would find useful, then they’ll do something about it. :smiley:

So, we need an option to choose Active/Passive connection in existing TCP Driver or another TCP Passive Driver (listen mode).

This would be very useful

I’m resurrecting this…
Is there any solution yet for this TCP active/passive connections?

  1. Is it JSON string?.
  2. It sends by which protocol?. Is it HTTP POST/PUT?.
  3. Can you paste the string here?.

I think it's using MQTT. Check with the supplier. If the payload is JSON API or MQTT, think your problem is almost solved.

As this thread is about TCP, I would think zxcslo is talking about TCP communication, which is what HTTP and MQTT are based on.

The question isn’t about parsing it, just about opening the connection. So the content is irrelevant.

@zxcslo, AFAIK, there’s no standard solution yet. But you can open a listener in a Python script, and let it run in a separate thread. It’s quite hacky though, certainly because that thread would no longer be accessible (so needs some other mechanism to stop) and there’s the risk of running it twice.

2 Likes

Yes I have a gateway communication module (GCM) that connects my ARSCADA and other modules to Ignition server in a passive mode on a TCP/IP socket. It has its own proprietary protocol for communication between Ignition and external applications such as mine to read/write tags from/to Ignition. Its an integral part of my modules (NJSCDA,ARSCADA,mSCADA etc). However can be made a stand alone module for any third party module to connect to it to read/write any Ignition tags values once the protocol is known to them.

I will be soon releasing an evaluation version of this and other modules by early next week for any one to download from my web site www.pramanj.com or www.arscada.com

2 Likes

Cool... I want to try it.

1 Like

My solution is, establish communication with the scanner with a JS/PHP server, capture the payload, insert/update a database and consume the data with a query a tag into Ignition.

that’s too round about approach!

What language will the scanners be programmed into? Java or C++ anything else? This is important because it should support standard TCP/IP sockets as supported by Java as my GCM is written in JAVA. Of course language doesn't matter as long as its standard TCP/IP. This was just for my information as I have tested it with JAVA and JavaScript clients (sockets).

This is a quick test. Change the ip address and port as per your requirement. If it works, we can move on to the next level. Cheers :slight_smile:

Run server:
$ nodemon server.js

Run client:
$ nodemon client.js

If you want to try an ‘inofficial’ module, there is also the open source Generic TCP driver. It supports active and passive TCP and UDP connections. I am using it as a passive UDP listener with Barcode scanners and rfid readers.

2 Likes

Very interesting indeed. Looks like it connectes to OPC UA server on Ignition. Also you need multiple instances for multiple devices. Looks like a pretty old archive. Very Impressive! Thanks for sharing.

My approach is direct connect using SDK.

Nice. And how do I get this inside the Ignition? How to install?
EDIT:
I see, that one must build the Ignition module. I don’t know how to do that.
Can you post/send the module, please?

The code has been updated. Now the server prints the client data.

$ nodemon server.js

server output:

Server listening on 127.0.0.1:6969
CONNECTED: 127.0.0.1:52164
DATA 127.0.0.1: Hello, TCP passive server at localhost:1337! Love, Client.
CLOSED: 127.0.0.1 52164

$ nodemon client.js

client output:

[nodemon] starting node client1.js
CONNECTED TO: 127.0.0.1:6969
DATA: You said "Hello, TCP passive server at localhost:1337! Love, Client."
Connection closed
[nodemon] clean exit - waiting for changes before restart

Ignition already has one. Did you check it out?.

https://docs.inductiveautomation.com/display/DOC79/UDP+and+TCP+Driver

Of course you can build the module from the sources, but it might be easier to download the module from 'releases':wink:
I will try to update a release with the latest changes if I find the time.

That's pretty cool and well thought out driver and it should meet the requirement of bar code readers/scales etc type of devices. Hope these drivers are built in to Ignition basic version not as add-ons.

My GCM module can also do this. However its designed to meet my own custom requirements and can be customized further to any specific requirements.

I would like to know, is your module free from any JAVA Oracle components and libs, knowingly or unknowingly?. Can you make a legal agreement with your client that you will pay for all the damages in case Oracle disables the component remotely or plays any mischief which may halt their production server and demands a big ransom to let them resume their operations normally?.

Its built on JAVA upto specific version 8 and I am responsible for my code not what ORACLE does with java.