您的位置:首页 > 房产 > 建筑 > 餐厅设计_品牌策划大赛作品_百度地图下载2022新版安装_企业网站建设专业服务

餐厅设计_品牌策划大赛作品_百度地图下载2022新版安装_企业网站建设专业服务

2024/12/23 15:56:08 来源:https://blog.csdn.net/qq_46100517/article/details/144131607  浏览:    关键词:餐厅设计_品牌策划大赛作品_百度地图下载2022新版安装_企业网站建设专业服务
餐厅设计_品牌策划大赛作品_百度地图下载2022新版安装_企业网站建设专业服务

1、使用测试工具
在这里插入图片描述
其中的含义是在这里插入图片描述

str:类型
DB200:表示数据块号 DB200。
10:表示起始字节偏移量为第 10 个字节。
10:表示数据长度为 10 字节。

2、根据测试工具的数据进行读取得到的结果
在这里插入图片描述

3、完整代码示例:

// Package utility
// @Author 铁憨憨[cory] 2024/11/28 17:17:00
package utilityimport ("encoding/binary""fmt""github.com/robinson/gos7""math""time"
)// @Title PclMain
// @Description 连接到PLC并读取不同类型的数据
// @Author 铁憨憨[cory] 2024-11-29 11:16:41
func PclMain() {// 设置和连接PLCconst (tcpDevice = "127.0.0.1" //IP地址rack      = 0           //机架号slot      = 1           //插槽号)handler := gos7.NewTCPClientHandler(tcpDevice, rack, slot)handler.Timeout = 200 * time.Secondhandler.IdleTimeout = 200 * time.Second//handler.Logger = log.New(os.Stdout, "tcp: ", log.LstdFlags)err := handler.Connect()if err != nil {fmt.Println("连接PLC失败:", err)return}defer func(handler *gos7.TCPClientHandler) {err := handler.Close()if err != nil {fmt.Println("关闭PLC失败:", err)}}(handler)// 创建客户端client := gos7.NewClient(handler)// 定义测试数据testCases := []struct {param1, param2, param3 intdataType               string}{{200, 10, 10, "str"},{200, 30, 10, "str"},{200, 1, 1, "bool"},{200, 4, 2, "short"},{200, 60, 4, "float"},{1, 1, 0, "bool"},{709, 0, 0, "bool"},{709, 0, 1, "bool"},{818, 2210, 1, "byte"},{292, 200, 2, "short"},{292, 202, 2, "short"},{818, 204, 2, "short"},{818, 236, 28, "str"},}for {for _, testCase := range testCases {data, dataErr := readData(client, testCase.param1, testCase.param2, testCase.param3, testCase.dataType)if dataErr == nil {fmt.Print(data, "  ")}}fmt.Println("  ")fmt.Println("  ")fmt.Println("  ")// 休眠1秒time.Sleep(1 * time.Second)}
}// @Title readData
// @Description  根据数据类型从PLC读取数据
// @Author 铁憨憨[cory] 2024-11-29 11:15:39
// @Param client PLC客户端
// @Param address 数据地址
// @Param start 数据起始位置
// @Param size 数据大小
// @Param dataType 数据类型
// @Return result 读取的数据
// @Return err 可能的错误
func readData(client gos7.Client, address, start, size int, dataType string) (result interface{}, err error) {switch dataType {case "str":buf := make([]byte, size)err = client.AGReadDB(address, start, size, buf)if err == nil {result = string(buf)}case "bool":buffer := make([]byte, 1)err = client.AGReadDB(address, start, size, buffer)if err == nil {boolValue := (buffer[0] & (1 << 0)) != 0 // 第 0 位result = boolValue}case "short":buffer := make([]byte, size)err = client.AGReadDB(address, start, size, buffer)if err == nil {// 将字节数据转换为 SHORT(有符号 16 位整数)shortValue := int16(binary.BigEndian.Uint16(buffer))result = shortValue}case "float":buffer := make([]byte, size)err = client.AGReadDB(address, start, size, buffer)if err == nil {floatValue := math.Float32frombits(binary.BigEndian.Uint32(buffer))result = floatValue}case "byte":buf := make([]byte, size)err = client.AGReadDB(address, start, size, buf)if err == nil {result = buf[0]}default:fmt.Printf("不支持的数据类型: %s\n", dataType)return}return
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com