PLC|Golang 连接 西门子 Siemens S7/TCP 协议读取数据
目录
欢迎关注 EdgeX Foundry 中文社区公众号(边缘计算社区),及时获取最新资料和分享。
工业项目中,工业现场很多情况是 Siemens S7 系列 PLC,通过应用程序读取信息已经是非常迫切的一些需求,尤其是在需要边缘计算网关的环境下,与外部系统对接的时候,这些都是基础性功能。
Siemens S7 PLC
笔者使用 SIMATIC S7-1200,CPU 是 1211C,6ES7 211-1AE40-0XB0,没有使用扩展模块,只是为了测试连通性。
- 使用 Step 7 V14 PORTAL 配置好运行环境;
- 配置少许几个测点,能通过 Modbus TCP 获取数据;
- 打开 S7 get/put 功能接口;
- 确认 TCP:102 端口能够正常连接;
- 少量了解 PLC 工作机制,S7 协议数据格式;
S7 protocol in Golang
- 笔者使用 Gos7 库,参考地址如下:
https://github.com/robinson/gos7
; - 熟读库中的源码,熟悉 test 目录下例子 API 的使用;
- 使用 /test 目录下测试例子跑通于 PLC 的基础连接;
运行 test 效果如下:
Running tool: /opt/homebrew/bin/go test -timeout 30s -run ^TestTCPClient$ plcProj
tcp: 2023/03/22 13:52:37 s7: sending 03 00 00 16 11 e0 00 00 00 01 00 c0 01 0a c1 02 01 00 c2 02 01 01
tcp: 2023/03/22 13:52:37 s7: received 03 00 00 16 11 d0 00 01 00 01 00 c0 01 0a c1 02 01 00 c2 02 01 01
tcp: 2023/03/22 13:52:37 s7: sending 03 00 00 19 02 f0 80 32 01 00 00 04 00 00 08 00 00 f0 00 00 01 00 01 01 e0
tcp: 2023/03/22 13:52:37 s7: received 03 00 00 1b 02 f0 80 32 03 00 00 04 00 00 08 00 00 00 00 f0 00 00 01 00 01 00 f0
tcp: 2023/03/22 13:52:37 s7: sending 03 00 00 2d 02 f0 80 32 01 00 00 05 00 00 0e 00 0e 05 01 12 0a 10 02 00 0a 00 02 84 00 00 00 00 04 00 50 00 64 00 00 00 00 00 00 00 00
tcp: 2023/03/22 13:52:37 s7: received 03 00 00 16 02 f0 80 32 03 00 00 05 00 00 02 00 01 00 00 05 01 ff
tcp: 2023/03/22 13:52:37 s7: sending 03 00 00 1f 02 f0 80 32 01 00 00 05 00 00 0e 00 00 04 01 12 0a 10 02 00 0a 00 02 84 00 00 00
tcp: 2023/03/22 13:52:37 s7: received 03 00 00 23 02 f0 80 32 03 00 00 05 00 00 02 00 0e 00 00 04 01 ff 04 00 50 3a 98 00 00 00 00 42 c8 00 00
编写自己的代码
自己的测试源码,获取 偏移量 160 的 WORD 数据(此处是用 clock 时钟模拟)
package main
import (
"fmt"
"time"
"github.com/robinson/gos7"
)
type PlcData struct {
intValue uint16
}
func main() {
const (
ipAddr = "192.168.123.199" //PLC IP
rack = 0 // PLC机架号
slot = 1 // PLC插槽号
)
//PLC tcp连接客户端
handler := gos7.NewTCPClientHandler(ipAddr, rack, slot)
//连接及读取超时
handler.Timeout = 200 * time.Second
//关闭连接超时
handler.IdleTimeout = 200 * time.Second
//打开连接
handler.Connect()
//函数退出时关闭连接
defer handler.Close()
//获取PLC对象
client := gos7.NewClient(handler)
//DB号
address := 1
//起始地址
start := 160
//读取字节数
size := 2
//读写字节缓存区
buffer := make([]byte, size)
//读取字节
client.AGReadDB(address, start, size, buffer)
//gos7解析数据类
var helper gos7.Helper
//gos7内置方法解析数据
var data PlcData
helper.GetValueAt(buffer[0:2], 0, &data.intValue)
//输出数据
fmt.Println(data)
fmt.Println(buffer)
}
编译,运行:
jiekechoo@jiekechoo GoS7Demo % go build && ./plcProj
{26}
[0 26]
jiekechoo@jiekechoo GoS7Demo % go build && ./plcProj
{27}
[0 27]
基于 EdgeX Foundry 的 S7 device service 驱动已开源
https://www.yiqisoft.cn/blogs/edgex/517.html
关于 亿琪软件
上海亿琪软件有限公司成立于2016年,专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域,致力于物联网领域前沿技术的创新,为用户提供全方位、智能化和安全的物联网解决方案。
2023年,公司发布“YiFUSION|工业边缘智能融合一体机”产品,为工业客户提供一整套的边缘计算+AI能力:高性能数据采集、多类型数据融合、AI算法集成、云端业务对接。在边缘网关的基础上,集成了 IoT 平台的边缘协同能力、本地Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。
2022年公司推出 “YiCLOUD|亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域,公司软硬件产品和解决方案获得华为技术认证,得到中国移动OCP认证,公司还是边缘计算产业联盟ECC成员。
感知物联,畅快无限。
联系我们
网站:http://yiqisoft.cn
邮件:support@yiqisoft.cn
电话:021-68863086
手机:186-1666-9123