西门子TeleService通信指令 怎么发送SMTP 电子邮件

2019年1月7日14:32:28 发表评论 1,159 阅读

TM_Mail(发送电子邮件)指令

表格 14- 1 TM_MAIL 指令

STEP 7 会在插入指令时自动创建背景 DB。

当输入参数 REQ 出现上升沿(从 0 变为 1)时,开始发送电子邮件。 下表给出了 BUSY、DONE 和 ERROR 之间的关系。 可在连续调用期间评估这些参数来监视 TM_MAIL 执行的进度和检查完成情况。

输出参数 BUSY 的状态从 1 变为 0 时,输出参数 DONE、ERROR、 STATUS 和SFC_STATUS仅在一个周期内有效。程序逻辑必须保存临时输出状态值,以便能检测到后续程序执行周 期中的状态变化。

表格 14- 2 Done、Busy 和 Error 参数之间的交互作用

DONE BUSY ERROR 说明
不相关 1 不相关 正在处理作业。
1 0 0 作业已成功完成。
0 0 1 作业因出错而终止。 有关错误原因的信息,请参见 STATUS

参数。

0 0 0 没有作业正在处理

如果 CPU 在 TM_MAIL 激活期间切换到 STOP 模式,则将终止与电子邮件服务器之间的通信连接。 如果通过工业以太网总线进行 CPU 通信时出现问题,那么将丢失与电子邮件服务器的通信连接。发生这些情况时,将暂停发 送过程,同时接收方也收不到电子邮件。

修改用户程序

程序块的删除和替换、对 TM_MAIL 的调用或者对 TM_MAIL 背景数据块的调用都会中断程序块的链接。 如果未能保持已链接的程序块,则 TPC/IP 通信功能将进入不确定状态,进而可能导致财产损失。 传送修改后的程序块之后,必须执行 CPU 重启(热启动)或冷启动。

注意

为避免中断程序块的链接,仅在下列情况下更改用户程序中直接影响 TM_MAIL调用的部分:

  • CPU处于 STOP 模式
  • 未发送任何电子邮件(REQ 和 BUSY = 0)

数据一致性

 在启动操作时会读取输入参数 ADDR_MAIL_SERVER。 只有在当前操作完成并且启动新的 TM_MAIL 操作后,新值才会生效。相反,参数

WATCH_DOG_TIME、TO_S、CC、FROM、SUBJECT、TEXT、ATTACHMENT、USERNAME 和 PASSWORD 将在执行 TM_MAIL 时被读取,并且仅在完成作业 (BUSY = 0)后才可更改。

拨号连接: 组态 TS 适配器的 IE 参数。

必须组态离开调用的 TeleService 适配器 IE 参数,以便与 Internet 服务提供商的拨号服务器相连接。 如果设置了调用的“按需”属性,则仅在发送电子邮件时建立连接。 对于模拟调制解调器连接,连接过程需要更多的时间(大约多出一分钟)。 必须将额外的时间包括到 WATCH_DOG_TIME 值中。

表格 14- 3 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 通过由低到高的(上升沿)信号启动操作。
ID IN Int 连接标识符: 请参见指令

TCON、TDISCON、TSEND 和 TRCV 的 ID 参数。

必须使用未在用户程序中用于该指令的任何其它实例 的编号。

TO_S IN String 收件人地址: 最大长度为 240 个字符的 STRING

数据

CC IN String 抄送收件人地址(可选): 最大长度为 240

个字符的 STRING 数据

SUBJECT IN String 电子邮件的主题名: 最大长度为 240 个字符的

STRING 数据。

TEXT IN String 电子邮件的文本消息(可选): 最大长度为 240

个字符的 STRING 数据。 如果此参数是空字符串,则发送的电子邮件将不含任 何消息文本。

参数和类型 数据类型 说明
ATTACHMENT IN Variant 指向电子邮件附件数据的指针: 最大长度为 65534

字节的字节、字或双字数据。

如果未分配任何值,则发送的电子邮件不含附件。

DONE OUT Bool · 0 - 作业尚未启动或仍在执行。

· 1 - 作业已执行,未出现错误。

BUSY OUT Bool · 0 - 无操作正在进行

· 1 - 操作正在进行

ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将在一个扫描周期的时间内保持为 1。 STATUS 输出中的错误代码值仅在 ERROR = 1 的一个扫描周期内有效。
STATUS OUT Word TM_MAIL 指令的返回值或错误信息。
ADDR_MAIL_SERVER 1 Static DWord 邮件服务器的 IP 地址: 必须将每个 IP 地址片段分配为两个 4 位十六进制字符组成的 8 位位组。 如果 IP 地址片段 = 等于十六进制值 A 的十进制值 10,则必须为该 8 位位组输入“0A”。

例如: IP 地址 = 192.168.0.10

ADDR_MAIL_SERVER = DW#16#C0A8000A,其中:

· 192 = 16#C0,

· 168 =16#A8

· 0 = 16#00

· 10 = 16#0A

WATCH_DOG_TIME 1 Static Time TM_MAIL 完成整个 SMTP 过程(从连接到 SMTP 开始到完成 SMTP 传输)所允许的最长时间。 如果超出该时间,TM_MAIL 结束执行并报告错误。

在 TM_MAIL

结束并报告错误之前的实际时间延时可能超过 WATCH_DOG_TIME,这是因为断开操作需要更多 的时间。

开始时,应设置 2 分钟时间。 对于 ISDN

电话连接,该时间可以短很多。

参数和类型 数据类型 说明
USERNAME 1 Static String 邮件帐户的用户名: 最大长度为 180 个字符的

STRING 数据。

PASSWORD 1 Static String 邮件服务器密码: 最大长度为 180 个字符的

STRING 数据。

FROM 1 Static String 发送方地址: 最大长度为 240 个字符的 STRING
SFC_STATUS 1 Static Word 被调用通信块的执行条件代码

每次调用 TM_MAIL 时都不会修改这些参数的值。 值分配在 TM_MAIL 实例数据块中,并且在首次调用

TM_MAIL 时,并不只被引用一次,

SMTP 验证

TM_MAIL 支持 SMTP AUTH LOGIN 验证方法。

有关该验证方法的信息,请参见邮件服务器手册或 Internet 服务提供商的网站。

AUTH LOGIN 验证方法使用 TM_MAIL、USERNAME 和 PASSWORD参数连接邮件服务器。 以前必须在邮件服务器上设置电子邮件帐户的用户名和密码。

如果没有为 USERNAME 参数分配任何值,则不会使用 AUTH LOGIN验证方法,并且电子邮件将在没有验证的情况下发送。

TO_S:CC:  FROM: 参数

参数 TO_S:、CC: 和 FROM: 是字符串,如下面的示例所示: TO: <wenna@mydomain.com>, <ruby@mydomain.com>, CC: <admin@mydomain.com>, <judy@mydomain.com>, FROM: <admin@mydomain.com>

输入这些字符串时必须遵守以下规则:

  •   必须输入“TO:”、“CC:”和“FROM:”字符(包括冒号)。
  • 在每个地址前必须输入空格字符和起始尖括号“<”。例如,在“TO:”和 <电子邮件地址>

之间必须有空格字符。

  •  在每个地址后必须输入结束尖括号“>”。
  • 在TO_S: 和 CC: 地址中的每个电子邮件地址后必须输入逗号字符“,”。 例如,单个电子邮件地址后的逗号在“TO: <email address>,”中是必填项。
  • FROM:条目只能使用一个电子邮件地址,并且末尾不能有逗号。 考虑到运行模式和存储器的使用,不会对TM_MAIL 的 TO_S:、CC: 和 FROM:

数据执行语法检查。 如果未严格遵照上述格式规则。 SMTP电子邮件服务器事务将会失败。

STATUS  SFC_STATUS 参数

TM_MAIL 返回的执行条件代码可分为以下几类:

  • W#16#0000:TM_MAIL操作已成功完成
  • W#16#7xxx:TM_MAIL操作的状态
  • W#16#8xxx:内部调用通信设备或邮件服务器时出错

下表显示了 TM_MAIL 的执行条件代码,但不包括内部调用通信模块时生成的错误代码。

说明 电子邮件服务器要求

TM_MAIL 只能通过端口 25 与使用 SMTP的电子邮件服务器通信。分配的端口号不能更改。大多数 IT 部门和外部电子邮件服务器现在都禁用了端口 25 以防止 PC受病毒感染而变为欺诈电子邮件生成器。 您可通过 SMTP连接内部邮件服务器,并让内部服务器管理当前安全强化,该安全强化是通过 Internet将电子邮件转发到外部邮件服务器所必需的功能。

示例: 内部邮件服务器组态

如果将 Microsoft Exchange 用作内部邮件服务器,则可以配置服务器以使 SMTP 通过分配了 S7-1200 PLC 的 IP 地址访问。 配置交换管理控制台: “服务器组态”(Server configuration) >“集线器传输”(Hub transport) >“接收连接器”(Receive connectors) >“IP 转发”(IP relay)。 在“网络”(Network) 选项卡上,有名为“从具有这些 IP 地址的远程服务器接收邮件”(Receive mail from remote servers that have these IP addresses) 的框。 您可在此处输入执行 TM_MAIL 指令的 PLC 的 IP 地址。 该类使用内部 Microsoft Exchange 服务器的连接无需验证。

电子邮件服务器配置

TM_MAIL 只能使用允许端口 25 通信、SMTP 和 AUTH LOGIN验证(可选)的电子邮件服务器。

配置兼容的电子邮件服务器帐户以接受远程 SMTP 登录。然后编辑 TM_MAIL 的背景数据块以输入 TM_MAIL USERNAME 和 PASSWORD 字符串,这些字符串用于验证与您的电子邮件帐户的连接。

表格 14- 4 条件代码

STATUS 

(W#16#...)

SFC_

STATUS 

(W#16#...)

说明
0000 - TM_MAIL 操作已完成,且未发生错误。 这个零 STATUS

代码不能保证电子邮件确实已发送(请参见此表后的第一条注释)。

7001 - TM_MAIL 处于激活状态 (BUSY = 1)。
7002 7002 TM_MAIL 处于激活状态 (BUSY = 1)。
8xxx xxxx TM_MAIL 操作已完成,但内部调用通信指令时出错。 有关 SFC_STATUS 参数的详细信息,请参见底层 PROFINET 开放式用户通信指令的 STATUS 参数说明。
8010 xxxx 连接失败: 有关 SFC_STATUS 参数的详细信息,请参见 TCON

指令的 STATUS 参数说明。

8011 xxxx 发送数据时出错: 有关 SFC_STATUS 参数的详细信息,请参见

TSEND 指令的 STATUS 参数说明。

8012 xxxx 接收数据时出错: 有关 SFC_STATUS 参数的详细信息,请参见

TRCV 指令的 STATUS 参数说明。

8013 xxxx 连接失败: 有关评估 SFC_STATUS 参数的详细信息,请参见 TCON

和 TDISCON 指令的 STATUS 参数说明。

8014 - 连接失败: 可能输入了错误的邮件服务器 IP 地址 (ADDR_MAIL_SERVER) 或过短的连接时间 (WATCH_DOG_TIME)。 也可能是 CPU 未与网络连接或 CPU 组态不正确。
8015 - ATTACHMENT 参数的指针无效: 使用具有数据类型和长度分配的 variant 指针。 例如,“P#DB.DBX0.0”不正确,“P#DB.DBX0.0 byte 256”正确。
82xx, 84xx, 85xx - 错误消息来自邮件服务器且对应于 SMTP 协议的错误编号“8”。 请参见此表后的第二条注释。
8450 - 操作未执行: 邮箱不可用;请稍后重试。
8451 - 操作已中止: 处理过程中出现本地错误,请稍后重试
8500 - 命令语法错误: 原因可能是电子邮件服务器不支持 LOGIN 验证过程。 请检查 TM_MAIL 的参数。 尝试发送无需验证的电子邮件。 尝试用空字符串替换参数 USERNAME。
8501 语法错误: 参数不正确;可能在 TO_S 或 CC

参数中输入了错误地址。

STATUS 

(W#16#...)

SFC_

STATUS

 (W#16#...)

说明
8502 - 未知的命令或命令未执行: 请检查输入的内容,尤其是参数 FROM。 可能是输入不完整,漏掉了“@”或“.”字符。
8535 - SMTP 验证不完整。 输入的用户名或密码可能不正确。
8550 - 无法访问邮件服务器,或您没有访问权限。 输入的用户名或密码可能不正确,或者邮件服务器不支持登录访问。 该错误的另一个原因可能是在 TO_S 或 CC 参数中字符“@”后面输入的域名不正确。
8552 - 操作已中止: 超出分配的存储器大小;请稍后重试。
8554 - 传输失败: 请稍后重试。

说明 可能未报告的电子邮件传输错误

  • 收件人地址输入不正确不会令TM_MAIL产生 STATUS 错误。在这种情况下,无法保证其他具有正确电子邮件地址的收件人能收到电子邮件。
  • 有关SMTP错误代码的详细信息,请访问 Internet 或参见邮件服务器的错误文档。 也可以从邮件服务器读取最后一条错误消息。 该错误消息存储在 TM_MAIL 背景数据块的参数 buffer1 中。

 

weinxin
plc入门知识问答
每一个PLC工程师都应该关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: