首先最简单的方式就是通过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#中都有相关的类来解决,这里不便详细叙述。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)