Java 向罗克韦尔PLC(1756-A10/A)读取和写入数据的简单应用程序

Java 向罗克韦尔PLC(1756-A10/A)读取和写入数据的简单应用程序,java,plc,opc,Java,Plc,Opc,我正在寻找一种简单的方法,如果可能的话,制作一个可以读/写罗克韦尔PLC中标签的应用程序 我需要的是一个简单的窗口,允许我键入PLC IP(它们都连接到网络),以便我可以连接到设备、一个加载所有PLC当前标记的容器,以及读取和/或写入这些标记的能力 我认为自己是初学者,在PLC和java编程方面,所以我想知道大家是否能帮助我。我之所以说JAVA,是因为它是我所知不多的编程语言,但不管是否还有其他更好的语言,比如VBA 在这里,GUI不是真正的问题,而是连接到设备并操作其变量。在这里,您可以找到一

我正在寻找一种简单的方法,如果可能的话,制作一个可以读/写罗克韦尔PLC中标签的应用程序

我需要的是一个简单的窗口,允许我键入PLC IP(它们都连接到网络),以便我可以连接到设备、一个加载所有PLC当前标记的容器,以及读取和/或写入这些标记的能力

我认为自己是初学者,在PLC和java编程方面,所以我想知道大家是否能帮助我。我之所以说JAVA,是因为它是我所知不多的编程语言,但不管是否还有其他更好的语言,比如VBA


在这里,GUI不是真正的问题,而是连接到设备并操作其变量。

在这里,您可以找到一个库,它允许您与罗克韦尔PLC进行通信。 (有关更多详细信息,请参阅TuxPLC-->文档为法文)

在这里,您将在python中找到TuxPLC的一个改编版本(如果您是初学者,这很容易理解)

在PLC中读取然后写入数据的示例(继续测试时要小心)
仔细阅读TuxEip文件夹中的文档()

在这里,您可以找到一个图书馆,它可以让您与罗克韦尔PLC进行通信。 (有关更多详细信息,请参阅TuxPLC-->文档为法文)

在这里,您将在python中找到TuxPLC的一个改编版本(如果您是初学者,这很容易理解)

在PLC中读取然后写入数据的示例(继续测试时要小心)
仔细阅读TuxEip文件夹中的文档()

如果您知道Rockwell ControlLogix PLC中的标记名,您可以使用从Python程序(从Windows、Mac或Linux主机)快速读取和写入它们的值。要安装它,请运行、安装Python 2或3,然后运行:

pip install cpppo pytz
假设您的Rockwell ControlLogix PLC位于本地网络中的域名“controller”(或者,只需在下面的
host=“192.168.1.2”
中使用其IP地址),并且它包含一个名为
scada
的标签,其中包含一个包含11个或更多CIP类型INT元素的数组:

from __future__ import print_function
from cpppo.history import timestamp
from cpppo.server.enip import client

host = "controller" # Or, simply use an IP address, eg: 192.168.1.2
tags = [ "scada[0-10]", "scada[1]=99", "scada[0-10]" ]

with client.connector( host=host ) as conn:
    for index,descr,op,reply,status,value in conn.pipeline(
            operations=client.parse_operations( tags ), depth=2 ):
        print( "%s: %20s: %s" % ( timestamp(), descr, value ))
假设标签
scada
存在,您将看到如下内容:

2015-05-25 14:35:15.891: Single Read  Tag  scada[0-10]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2015-05-25 14:35:15.897: Single Write Tag  scada[1-1]: True
2015-05-25 14:35:15.915: Single Read  Tag  scada[0-10]: [0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0]
import OpenOPC
opc_client = OpenOPC.client()
opc_client.connect('RS Linx Remote OPC Server')
result = opc_client.read('[OPC_topic]tag_name')  # read a tag
opc_client.write('[OPC_topic]tag_name', value)  # write a tag
opc_client.close()
如果您周围没有Rockwell ControlLogix PLC,您可以通过运行以下命令来模拟一个(至少用于读取/写入标记数据):

python -m cpppo.server.enip --print -v scada=INT[100]

如果您知道Rockwell ControlLogix PLC中的标记名,您可以使用从Python程序(从Windows、Mac或Linux主机)快速读取和写入它们的值。要安装它,请运行、安装Python 2或3,然后运行:

pip install cpppo pytz
假设您的Rockwell ControlLogix PLC位于本地网络中的域名“controller”(或者,只需在下面的
host=“192.168.1.2”
中使用其IP地址),并且它包含一个名为
scada
的标签,其中包含一个包含11个或更多CIP类型INT元素的数组:

from __future__ import print_function
from cpppo.history import timestamp
from cpppo.server.enip import client

host = "controller" # Or, simply use an IP address, eg: 192.168.1.2
tags = [ "scada[0-10]", "scada[1]=99", "scada[0-10]" ]

with client.connector( host=host ) as conn:
    for index,descr,op,reply,status,value in conn.pipeline(
            operations=client.parse_operations( tags ), depth=2 ):
        print( "%s: %20s: %s" % ( timestamp(), descr, value ))
假设标签
scada
存在,您将看到如下内容:

2015-05-25 14:35:15.891: Single Read  Tag  scada[0-10]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2015-05-25 14:35:15.897: Single Write Tag  scada[1-1]: True
2015-05-25 14:35:15.915: Single Read  Tag  scada[0-10]: [0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0]
import OpenOPC
opc_client = OpenOPC.client()
opc_client.connect('RS Linx Remote OPC Server')
result = opc_client.read('[OPC_topic]tag_name')  # read a tag
opc_client.write('[OPC_topic]tag_name', value)  # write a tag
opc_client.close()
如果您周围没有Rockwell ControlLogix PLC,您可以通过运行以下命令来模拟一个(至少用于读取/写入标记数据):

python -m cpppo.server.enip --print -v scada=INT[100]

我熟悉Python中两个有用的库,它们允许通过标记写入和读取连接到PLC。它们都很好用,我已经试过了

允许在短Python程序中进行连接、标记读取和写入。这对罗克韦尔来说是最好的,假设您在后台运行罗克韦尔的RSLinx程序,以提供您的OPC服务器-确保您使用与您在RSLinx上设置的相同的OPC主题来处理PLC中的标记。您将得到以下结果:

2015-05-25 14:35:15.891: Single Read  Tag  scada[0-10]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2015-05-25 14:35:15.897: Single Write Tag  scada[1-1]: True
2015-05-25 14:35:15.915: Single Read  Tag  scada[0-10]: [0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0]
import OpenOPC
opc_client = OpenOPC.client()
opc_client.connect('RS Linx Remote OPC Server')
result = opc_client.read('[OPC_topic]tag_name')  # read a tag
opc_client.write('[OPC_topic]tag_name', value)  # write a tag
opc_client.close()
如果出于某种原因无法使用RSLinx,那么在Python中还有另一种方法可以使用:


希望这能有所帮助——我知道您更喜欢用Java来回答,但Python是我以前用过的。希望其他人能提供Java特定的答案。

我熟悉Python中的两个有用库,它们允许通过标记写入和读取连接到PLC。它们都很好用,我已经试过了

允许在短Python程序中进行连接、标记读取和写入。这对罗克韦尔来说是最好的,假设您在后台运行罗克韦尔的RSLinx程序,以提供您的OPC服务器-确保您使用与您在RSLinx上设置的相同的OPC主题来处理PLC中的标记。您将得到以下结果:

2015-05-25 14:35:15.891: Single Read  Tag  scada[0-10]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2015-05-25 14:35:15.897: Single Write Tag  scada[1-1]: True
2015-05-25 14:35:15.915: Single Read  Tag  scada[0-10]: [0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0]
import OpenOPC
opc_client = OpenOPC.client()
opc_client.connect('RS Linx Remote OPC Server')
result = opc_client.read('[OPC_topic]tag_name')  # read a tag
opc_client.write('[OPC_topic]tag_name', value)  # write a tag
opc_client.close()
如果出于某种原因无法使用RSLinx,那么在Python中还有另一种方法可以使用:


希望这能有所帮助——我知道您更喜欢用Java来回答,但Python是我以前用过的。希望其他人能提供一个特定于Java的答案。

我参加聚会有点晚,但有一个非常有前途的新库。我已经用它写了一些网络应用程序,它非常容易使用。 从文档中:

Pylogix:

此项目将允许您轻松地从中读取/写入值 基于罗克韦尔自动化Logix的PLC以太网I/P中的标签使用 pythonPLC型号包括CompactLogix、ControlLogix和Micro8xx。 Python2和Python3都受支持

读取标记非常简单(从示例中):


我去晚会晚了一点,但是有一个很有前途的新图书馆。我已经用它写了一些网络应用程序,它非常容易使用。 从文档中:

Pylogix:

此项目将允许您轻松地从中读取/写入值 基于罗克韦尔自动化Logix的PLC以太网I/P中的标签使用 pythonPLC型号包括CompactLogix、ControlLogix和Micro8xx。 Python2和Python3都受支持

读取标记非常简单(从示例中):


有一整套围绕
libplctag
编写的包装,允许与罗克韦尔PLC通信。Java包装器如下所示:

也就是说,更棘手的部分是实际的标签列表。我使用过INGEAR.NET(商业产品)