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 中。

评论