C#读写PLC数据问题

C#读写PLC数据问题我想通过C#往三菱Q71系列PLC里面读写数据(例如PLC点位是W001A,W001B,W001C),要怎样操作?求大侠点拨下

首先最简单的方式就是通过mc协议, 用串口、以太网都可以。  PLC侧不需要任何编程配置好端口就可以。  C#这边  就是用套接字创建客户端,连接这个plc服务器就行,然后发送报文 指令读取  这些数据,然后将接收的数据 ,处理格式化打印就行了。直接三菱电机官网,内置以太网通讯手册就可以了。里面有详细讲解  mc通讯协议的格式。 官方给的示例是用C/C++写的

下面是用Python 写的一段读 D0-D4的代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: nulige
# 三菱Q系列 mc协议测试代码
# 日期:2018年4月27日
# 测试:
"""
# 以读取D0-D4 数据(16位寄存器)指令为例
# 500000FF03FF000018000A04010000D*0000000005
# 三菱mc协议报文结构3E帧
# 副标题:
# 固定值:5000
# 网络编号:00
# 可编程逻辑控制器编号:FF
# 请求目标模块I/O号:03FF
# 请求目标模块站号:00
# 请求数据、形影数据长:0018
# 监视定时器:000A
# 批量读取命令:0401
# 子命令:0000
# 软元件类型:D*
# 首地址:000000
# 偏移量:0005
# 备注:指令介绍参考MElSEC通讯协议参考手册
# 此格式下相应报文应该为:D000 00FF 03FF 00 0018 0000(这四位位结束正常响应) 后面数据位D0-D4 数据
"""
# 部分python 函数说明
# msg.encode('utf-8') 以指定的格式对数据进行编码

from socket import *                                                  # 打开socket 模块

# ip_port = ('127.0.0.1',4099)                                      # 设置服务器 IP 端口
ip_port = ('192.168.3.39',4099)                                      # 设置服务器 IP 端口
buffer_size = 1024                                                     # 设置接受缓冲区大小
tcp_client = socket(AF_INET, SOCK_STREAM)                              # 使用IPV4协议 ,TCP连接
print('正在连接目标'+str(ip_port))
tcp_client.connect(ip_port)
SendMsg = ('500000FF03FF000018000A04010000D*0000000005')       # 读取D0-D5指令

while True:
    print('D0-D5数据读取使能 按Y回车读取:')
    key = input()
    tcp_client.send(SendMsg.encode('utf-8'))                          # 发送读取命令
    RecData = tcp_client.recv(buffer_size)                             # 收缓存为空则阻塞
    print('接受到的报文:', RecData.decode('utf-8'))                # 打印收到的报文
    RecData1 = RecData[22:]                                            # 获取数据报文
    RecData1Len = len(RecData1)                                        # 获取数据报文长度
    print('格式化输出:')
    i = 0
    j = 0
    while i < RecData1Len:
        print('D' + str(j) + ' = ' + str(int(RecData1[i:(i + 4)])))  # 输出读取到的数据
        i = i + 4
        j = j + 1
tcp_client.close()                                                    #  连接关闭

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-10
其实你要是用到C#那么你读取写入数据库是很简单的,主要是你怎么从PLC采集过来。这个就是个通讯的问题。西门子应该有专门以太网通讯的案例。我之前用的是MODBUS TCP/IP也可以通过以太网读取PLC。这个项目如果一个人做是要点时间的。通讯好像用WINSOK这个控件吧。本回答被网友采纳
第2个回答  2018-09-11
可以使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作
Github开源的组件:HslCommunication追问

可否提供两个demo

追答

网页链接   参考代码

第3个回答  2018-09-12
正在学C#,盼楼主解决后,分享下经验
相似回答