IEC 61131-3 中的数据记录:基于 Curl 功能的 SFTP 上传
几周前,我收到了以下问题。您需要使用在 ESM 中运行的程序将日志文件上传到 SFTP 服务器。
SSH 文件传输协议(也称为安全文件传输协议,或 SFTP)是一种网络协议,可通过任何可靠的数据流提供文件访问、文件传输和文件管理。它由 Internet 工程任务组 (IETF) 设计,作为安全外壳协议 (SSH) 2.0 版的扩展,以提供安全的文件传输功能。
SFTP 包含在 PLCnext 固件中,所以这应该不是问题。
第 1 步:我开始使用结构化文本创建日志文件。如何做到这一点的例子,可以在这里找到:
https://www.plcnext-community.net/en/hn-makers-blog/438-datalogging-in-iec-61131-3-the-basic-principle.html https://www.plcnext-community.net/ en/hn-makers-blog/447-datalogging-in-iec-61131-3-create-your-own-file-manager.html第 2 步:我需要一些 SFTP 服务器来测试我的 PLC 应用程序。我使用了 CrushFTP,它安装在我的笔记本电脑上运行的虚拟机中。
安装软件后,您需要为 Web 界面创建一个管理员用户。完成后,您可以为 PLC 访问创建一个用户。
对于这个例子:用户=PLCnext,密码=123456789
第三步:使用命令行上传文件。
在上面的屏幕截图中,您可以看到我们首先给出一个命令,然后在第二步中输入密码。如果我们想通过使用“PBCL_SysLinuxShell_1”FB 来自动化这个过程,我们需要一个单行命令。
这个 FB 可以在 PLCnextBase 库中找到。 (https://www.plcnextstore.com/#/720)
因此,我们需要另一个命令来执行文件上传。让我们看看Curl。
安装固件 2020.6.1 的版本不支持 SFTP。感谢 Oliver Warneke,我能够安装另一个版本的 Curl。我们不会进行完整的安装过程,但结果是支持 SFTP 的版本。使用固件 2021.0.0 LTS,您将能够使用以下版本。
感谢Curl,我们现在可以使用另一个命令了。
curl -k -sS –key ~/.ssh/id_rsa –max-time 25 –connect-timeout 10“sftp://192.168.1.50:22/test/Upload/” –user“PLCnext:12345679”-T“/ opt/plcnext/Test.pdf” –ftp-create-dirs
当您对 Shell FB 使用此命令时,您可以在以下日志文件中查看结果以检查您的程序。
/opt/plcnext/PLCnextBase.ServiceProvider.log
关于论点的一些解释:
-k, --不安全
(TLS) 默认情况下,curl 建立的每个 SSL 连接都经过验证是安全的。此选项允许 curl 继续并操作,即使对于否则被认为不安全的服务器连接。通过确保服务器的证书包含正确的名称并使用证书存储成功验证来验证服务器连接。
-S, --show-error
与 -s, --silent 一起使用时,如果 curl 失败,它会显示错误消息。
-s,--静音
静音或静音模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。使用 -S, –show-error 除了这个选项来禁用进度表,但仍然显示错误消息。
--key
(TLS SSH) 私钥文件名。允许您在此单独文件中提供您的私钥。对于 SSH,如果未指定,curl 按顺序尝试以下候选:'~/.ssh/id_rsa'、'~/.ssh/id_dsa'、'./id_rsa'、'./id_dsa'。
-m, –max-time <秒>
允许整个操作花费的最长时间(以秒为单位)。这对于防止您的批处理作业因网络速度慢或链接中断而挂起数小时非常有用。
--connect-timeout <秒>
允许 curl 连接的最长时间(以秒为单位)。这只会限制连接阶段,因此如果 curl 在给定的时间内连接,它将继续 - 如果不是,它将退出。
-T, --upload-file <文件>
这会将指定的本地文件传输到远程 URL。如果指定的 URL 中没有文件部分,curl 将附加本地文件名。
--ftp-create-dirs
(FTP SFTP) 当 FTP 或 SFTP URL/操作使用服务器上当前不存在的路径时,curl 的标准行为是失败。使用此选项,curl 将尝试创建缺少的目录。
参考资料:
https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol https://www.crushftp.com/index.html https://curl.se/docs/manpage.html工业技术