C#读写PLC数据问题

C#读写PLC数据问题,第1张

首先最简单的方式就是通过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:S7-300集成的PN口,是支持TCP/IP协议的!至于怎么读取,你上位机 按照TCP 协议的编程方式来进行读取数据就行,PLC里也有相关的功能块原来发送和接受数据。需要注意的是,那方系统作为服务器和客户机的问题:

2:集成的PN口支持 Modbus TCP,但是使用方式和用到的功能块和CP有些区别。原理是一样的

基于 S7-300,400 CPU 集成 PN 接口 Modbus TCP 通讯快速入门

PLC数据要通过串口编程或socket编程来获取。PLC一般通过RS232串口或RS485串口,与电脑进行数据通讯,或者扩展以太模块(总线扩展,或串口加装),通过以太网进行数据通讯。对应于不同的接口,通讯程序也不一样,RS232可直接接入电脑,RS485要通过特定装置转换为RS232。总线扩展的或串口加装的以太模块可以直接接入局域网交换设备,与电脑组网通讯。以太通讯模式,电脑和PLC都可作为服务器或客户端。与PLC通讯,还要弄清楚PLC的通讯协议,与TCP协议不同,TCP协议是较底层的协议,PLC数据通讯协议属于高级的对话协议,也就是读写数据的指令格式,以及数据交换的格式规范。现在最通用的协议是Modbus工业控制协议,很多PLC都支持,还有就是各大厂商自己的协议,比如西门子的PPI协议等。不管是串口,还是以太,按照协议与PLC对话就能获取PLC数据或进行控制。

PLC通讯编程还是有难度的,涉及到串口或socket,socket叫做TCP套接字,用于以太组网通讯,程序设计使用C#或C++都可以,电脑做客户端和做服务器,建立数据连接的方法不一样,收发数据的方法一样。C#中都有相关的类来解决,这里不便详细叙述。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/745258.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-14
下一篇2023-08-14

发表评论

登录后才能评论

评论列表(0条)

    保存