目录

Golang 作为高性能编程语言,在边缘计算领域越来越流行,编译完超小的二进制,打包成 docker image 作为微服务框架在边缘计算领域是最佳选择。
Gos7 作为 Golang 原生的 S7 PLC 对接实现是非常不错的选择,本文将简单介绍 Gos7 在边缘计算框架 YiEDGE 中的使用。

上一篇文章“PLC|Golang 连接 Siemens S7/TCP 协议读取数据”介绍了如何独立使用 Gos7 与 PLC通讯,作为基础,你应该有所熟悉了。

理解 Gos7 API 结构

Client API

API AG(Automatisationsgerät)

AG 相关的 API 主要是负责 PLC 读取/写入数据,对应的 PLC 内部,最常用的应该是:DB 段。

  • Read/Write IPU (AB)
  • Read/Write IPI (EB)
  • Read/Write Merkers(MB)
  • Read/Write Data Block (DB)
  • Read/Write Timer (TM)
  • Read/Write Counter (CT)
  • Multiple Read/Write Area
  • Get Block Info
    /***************start API AG (Automatisationsgerät)***************/
    //Read data blocks from PLC
    AGReadDB(dbNumber int, start int, size int, buffer []byte) (err error)
    //write data blocks into PLC
    AGWriteDB(dbNumber int, start int, size int, buffer []byte) (err error)
    //Read Merkers area from PLC
    AGReadMB(start int, size int, buffer []byte) (err error)
    //Write Merkers from into PLC
    AGWriteMB(start int, size int, buffer []byte) (err error)
    //Read IPI from PLC
    AGReadEB(start int, size int, buffer []byte) (err error)
    //Write IPI into PLC
    AGWriteEB(start int, size int, buffer []byte) (err error)
    //Read IPU from PLC
    AGReadAB(start int, size int, buffer []byte) (err error)
    //Write IPU into PLC
    AGWriteAB(start int, size int, buffer []byte) (err error)
    //Read timer from PLC
    AGReadTM(start int, size int, buffer []byte) (err error)
    //Write timer into PLC
    AGWriteTM(start int, size int, buffer []byte) (err error)
    //Read counter from PLC
    AGReadCT(start int, size int, buffer []byte) (err error)
    //Write counter into PLC
    AGWriteCT(start int, size int, buffer []byte) (err error)
    //multi read area
    AGReadMulti(dataItems []S7DataItem, itemsCount int) (err error)
    //multi write area
    AGWriteMulti(dataItems []S7DataItem, itemsCount int) (err error)
    /*block*/
    DBFill(dbnumber int, fillchar int) error
    DBGet(dbnumber int, usrdata []byte, size int) error
    //general read function with S7 sytax
    Read(variable string, buffer []byte) (value interface{}, err error)
    //Get block  infor in AG area, refer an S7BlockInfor pointer
    GetAgBlockInfo(blocktype int, blocknum int) (info S7BlockInfo, err error)
    /***************end API AG***************/

API PG(Programmiergerät)

PG 相关的 API 主要是针对 PLC 本体的一些启停、设备信息读取、时钟读写等。

    /***************start API PG (Programmiergerät)***************/
    /*control*/
    //Hotstart PLC, Puts the CPU in RUN mode performing an HOT START.
    PLCHotStart() error
    //Cold start PLC, change CPU into runmode performing and COLD START
    PLCColdStart() error
    //change CPU to stop mode
    PLCStop() error
    //return CPU status: running/stopped
    PLCGetStatus() (status int, err error)
    /*directory*/
    //list all blocks in PLC, return a Blockslist which contains list of OB, DB, ...
    PGListBlocks() (list S7BlocksList, err error)
    /*security*/
    //set the session password for PLC to meet its security level
    SetSessionPassword(password string) error
    //clear the password set for current session
    ClearSessionPassword() error
    //return the CPU protection level info, refer to: §33.19 of "System Software for S7-300/400 System and Standard Functions"
    //return S7Protection and its properties.
    GetProtection() (protection S7Protection, err error)
    /*system information*/
    //get CPU order code, return S7OrderCode
    GetOrderCode() (info S7OrderCode, err error)
    //get CPU info, return S7CpuInfo and its properties
    GetCPUInfo() (info S7CpuInfo, err error)
    //get CP info, return S7CpInfo and its properties
    GetCPInfo() (info S7CpInfo, err error)
    /*datetime*/
    //read clock on PLC, return a time
    PGClockRead(datetime time.Time) error
    //write clock to PLC with datetime input
    PGClockWrite() (dt time.Time, err error)
    /***************end API AG***************/

Helper API

Helper API 主要负责从 buffer 中读取/写入指定的数据类型到变量中。

  • Read/Write a boolean
  • Read/Write a value(int)
  • Read/Write a float (Real)
  • Read/Write chars
  • ...

等,各种数据格式。

PLC 数据交互步骤

  1. 创建 PLC TCP 连接
  2. 根据测点 command 读取/写入偏移量
  3. 返回结果数据

基于 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

标签: 边缘计算, PLC, S7, Golang, 工业数据采集, Gos7

添加新评论