opc客户端_一个简的RS485转OPC方案 亲测可用

1、首先需要准备相关资料,如485通讯手册,这样485上位机才可以读取到485设备的数据。485通讯是一种主从通讯,所以需要上位机主动发送命令给下面的设备,这样下面的设备才会返回数据。

上位机一般通讯轮询的方式循环读取设备的数据,所以就会有一个读取时间,比如60秒读取一次。

2、数据拿到之后,我们就可以把这个数据通过OPC服务向OPC客户端提供数据了。

如何来做呢?

做法1、我们将485上位机和OPC服务写在一个程序里面,这样它俩之间的数据传输就变得非常方便了,从485设备拿到数据后马上更新OPC服务这边的数据,一行代码就可以完成。

做法2、485上位机和OPC服务作为独立的程序运行,它俩之间采用程序间的通信方式。如果是在同一台电脑上那么可以使用IPC或命名管道的方式通讯,如果是在不同的电脑上,那可以使用WEBSOCKET或MQTT通讯。

3、485上位机:

4、OPC服务代码示例

5、OPC客户端读取OPC服务器数据

连接

添加数据

以上为示例数据,如需要软件验证可行性请联系作者。另外,这里所说的OPC服务采用的是OPC2.0标准,485通讯协议为标准的MODBUS RTU通讯协议。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个单的Java OPC客户示例代码: ```java import java.net.UnknownHostException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.jinterop.dcom.common.JIException; import org.jinterop.dcom.core.JIVariant; import org.openscada.opc.lib.common.ConnectionInformation; import org.openscada.opc.lib.da.AccessBase; import org.openscada.opc.lib.da.AdditionalResults; import org.openscada.opc.lib.da.AutoReconnectController; import org.openscada.opc.lib.da.DataCallback; import org.openscada.opc.lib.da.Item; import org.openscada.opc.lib.da.ItemState; import org.openscada.opc.lib.da.SyncAccess; public class OPCClient { public static void main(String[] args) throws Exception { ConnectionInformation ci = new ConnectionInformation(); ci.setHost("localhost"); ci.setDomain(""); ci.setUser("user"); ci.setPassword("password"); ci.setProgId("ProgID"); ci.setClsid("CLSID"); final AutoReconnectController controller = new AutoReconnectController(ci, Executors.newSingleThreadScheduledExecutor()); ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("Connection state: " + controller.getConnectionState()); } }, 0, 1, TimeUnit.SECONDS); AccessBase access = new SyncAccess(controller); access.addItem("ItemName", new DataCallback() { @Override public void changed(Item item, ItemState state) { System.out.println("Item value: " + state.getValue().getObjectAsUnsigned().longValue()); } }); access.bind(); Thread.sleep(5000); access.unbind(); executor.shutdown(); controller.disconnect(); } } ``` 请注意,此示例仅用于演示目的。在实际应用中,您需要根据您的需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值