在 PLCnext 上开始使用 Go
本博客将指导您完成在 PLCnext 上使用 Go 构建应用程序的第一步。对于不熟悉 Go 的人,我喜欢引用参考网站 www.golang.org
喜欢 Go 的一个特别原因是它很容易创建 Web 应用程序,但仍然编译为静态二进制文件,因此您不必在 PLCnext 控制器上安装包来部署程序。
本博客将只处理 PLCnext 的编译,带有两个小程序。一个经典的 HelloWorld 程序,确保编译顺利,一个小的 REST API 调用展示了 Go 的强大功能。在制作这个博客时,我使用过:
- 安装了 VS 和 Go 的 Ubuntu 18.04 LTS 机器来创建程序
- WinSCP 将二进制文件传输到控制器
- 执行程序的腻子。
好的,让我们开始使用我们的 HelloWorld 应用程序。创建一个名为 HelloWorld.go 的新文件,并将 HelloWorld 示例中的代码粘贴到文件中。保存文件并打开您的终端并确保您位于正确的目录中。
使用下面的命令,您将构建并运行您的 Go 代码。如果一切安装正确,Hello World 应该会显示在您的终端中。当您仍在构建应用程序时,您可以使用此命令。
go run HelloWorld.go
就像我说的,也可以将代码构建为静态二进制文件。这是通过下面的第一个命令完成的,下一个命令运行新创建的二进制文件。如果一切顺利,你的终端会再次显示 hello world。
go build HelloWorld.go
./HelloWorld
当您尝试在 PLCnext 控制器上运行此二进制文件时,您会得到:
./HelloWorld: cannot execute binary file: Exec format error
这是因为 Ubuntu 机器和 PLCnext 的架构不匹配。幸运的是,创建一个适用于 PLCnext 的二进制文件相当容易(但请注意,这个新的二进制文件不会在 Ubuntu 机器上运行)。当您设置如下所述的构建环境时。 Go 将创建一个适用于 PLCnext 的二进制文件。
env GOOS=linux GOARCH=arm GOARM=7 go build
对于我们的示例,它将是
env GOOS=linux GOARCH=arm GOARM=7 go build HelloWorld.go
当您将此文件传输到控制器并运行它时,您应该会再次看到 hello world 弹出,如果是这样,恭喜。你已经为 PLCnext 控制器编写了你的第一个 Go 程序!查看 REST API 调用并对其进行修改以满足您的需求!
上一步有问题?
您是否使用 chmod +x HelloWorld 使文件可执行?
Hello World 示例
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
go
REST API 调用 (HTTP GET)
package main
import (
"crypto/tls"
"io/ioutil"
"log"
"net/http"
)
func main() {
http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} // Disable TLS check due to bad certificate
MakeRequest()
}
func MakeRequest() {
resp, err := http.Get("https://192.168.18.10/_pxc_api/api/variables?paths=Arp.Plc.Eclr/MainInstance.bInputs") // change to your IP adress and variables
if err != nil {
log.Fatalln(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
log.Println(string(body))
}
工业技术