s7-200在自由端口模式下怎么样解决报文的结束字符与数字字符混淆的问题?
能结合实际例子的回答、原创最多、阐述最全的将得大奖。
下周初结贴,9个最优回帖分别获得20MP、10MP、10MP、10MP、20积分、20积分、20积分、20积分、20积分!
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
楼主最近还看过
在S7-200中,可以使用ASCII码来区分数据和结束字符,当然还可以包括起始字符。
一条指令除包含数据外,通常还包含必要的控制字(起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆, 就难以区分结束字符和其他的数据。
例如,指令的起始字符为"g",其ASCII码值为67H,结束字符为"G",其ASCII码值为47H。假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。
为了避免或区分结束字符与数字字符发生这种情况,可以用文本来传送二进制数据。通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。这样,数据中的47H以ASCII码的形式进行传送就变成了34H 37H 两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。
当然这里需要使用ASCII码的转换,稍显啰嗦一点,但这样做完全可以杜绝混淆。
(1) 注意PC 机与S7 - 200 的通信方式
西门子S7- 200 PLC 的通信功能较强, 有多种通信方式可供用户选择, 如: 单主站方式、多主站方式以及使用调制解调器的远程通信方式等。在本测控装置中, 采用单主站方式。在运行Windows 或Windows NT 操作系统的个人计算机( PC 机) 上安装STEP 7- Micro/WIN32 编程软件后, PC 机就可作为通信中的主站。它可与一个或多个从站相连, STEP 7 - Micro/WIN 32 每次和一个S7- 200 CPU 通信, 但可以访问网络上的所有CPU。该通信方式的硬件配置为PLC 到PC 机通信口的电缆连接器, 即带RS- 232 口的隔离型PC/PPI 电缆, 用五个DIP 开关设置波特率和其它配置项。它支持的波特率为9.6kbps 或19,2kbps , 支持的协议为PPI 协议。这里并没有使用PPI 协议, 而是使用PC/PPI 电缆和自由端口通信功能来实现S7- 200 CPU 与PC 机间的通信。自由端口模式是计算机或其它带有串行通信接口的设备与 S7- 200 CPU 之间通信的一种廉价和灵活的方法。它以用户定义的通信协议为基础, 通过使用相关的中断指令 和专用的通信指令控制S7 - 200 CPU 通信口的操作模式, 实现与多种智能设备的连接。
具体地说, 所谓自由通信端口模式是指CPU 的串行 通信接口可由用户程序控制的一种通信操作模式, 其梯形图程序可以使用接收完成中断、字符接收中断、发送 完成中断、发送指令( XMT) 和接收指令( RCV) 等控制通信过程。在该模式下, 通信协议完全由用户程序控制。CPU 处于STOP 模式时, 自由通信端口模式被禁止, CPU 重新建立使用其它协议的通信, 例如与编程设备的
通信。只有当CPU 处于RUN 模式时, 才能使用自由通信端口模式。通过将特殊寄存器字节SM30 或SM130 的协议选择( mm) 置1 可以将通信端口设置为自由端口模式, 处于该模式时不能与编程设备通信。
可以用反映CPU 模块上的工作方式开关当前位置的特殊存储器位SM0.7 来控制自由端口模式的进入。当SM0.7 为1 时, 工作方式开关处于RUN 位置, 可选择自由端口模式; 当SM0.7 为0 时, 工作方式开关处于TERM 位置, 应选择PC/PPI 协议模式, 以便用于编程设备监视或控制CPU 模块的操作。
(2)自由端口模式下PLC 串行通信程序的编程避免混淆要点
计算机与可编程控制器通信时, 为了避免通信中的各方争用通信线, 一般采用主从工作方式, 即计算机为主机, 可编程控制器为从机; 只有主机才有权主动发送请求报文, 从机收到后返回响应报文。下面主要谈一谈编程过程中应注意的几个问题。
首先是电缆切换时间的处理。因为使用了PC/PPI 电缆, 所以在S7- 200 CPU 的用户程序中应考虑电缆的切换时间。S7- 200 CPU 接收到RS232 设备的请求报文到它发送响应报文的延迟时间必须大于等于电缆的切换时间。波特率为9600bps 和19200bps 时, 电缆的切换时间分别为2ms 和1ms。在梯形图程序中可用定时中断实现切换延时。
其次就是通信可靠性的处理, 校验码的采用是提高通信可靠性最常用的措施之一。用得较多的是异或校验, 即将每一帧中的第一个字符( 不包括起始字符) 到该帧中正文的最后一个字符作异或运算, 并将异或的结果 ( 异或校验码) 作为报文的一部分发送到接收端。接收方接收到数据后计算出所接收到的数据的异或校验码, 再与发送方传过来的校验码比较, 如果不同, 可以判断通信有误。
最后防止起始字符、结束字符与数据字符的混淆要点。因为报文的起始字符和结束字符只有8 位, 接收到的报文数据区内出现与起始字符或结束字符相同的数据字符的机率很大, 这可能会引起字符混淆。可以在发送前对数据作某种处理, 例如选择起始字符和结束字符为某些特殊的值, 而将数据字符转化为BCD 码或ASCII码后再发送, 这样可以避免出现上述的情况, 但是会增加编程的工作量和数据传送的时间。
一条指令除包含数据外,还包含必要的控制字(起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆。
----例如本例中,指令的起始字符为"g",其ASCII码值为67H,结束字符为"G",其ASCII码值为47H。假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。
----为了避免这种情况的发生,可以用文本来传送二进制数据。通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。这样,数据中的47H以ASCII码的形式进行传送就变成了34H 37H 两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。
上位机指令格式详细如下:
Byte0起始字符
Byte1指令类型(读/写)
Byte2目标PLC站地址(十六进制ASCII码)
Byte3
Byte4目标寄存器地址(十六进制ASCII码)
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12读/写字节数M(十六进制ASCII码)
Byte13
Byte14要写入的数据(十六进制ASCII码)
Byte15
Byte16
Byte17
Byte18
Byte19
Byte20
Byte21
Byte22
Byte23
Byte24
Byte25
Byte26
Byte27
Byte28
Byte29
Byte30BCC校验码(十六进制ASCII码)
Byte31
Byte32结束字符
表2 反馈信息格式
Byte0起始字符
Byte1状态信息
Byte2数据区(十六进制ASCII码)
Byte3
Byte4
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12
Byte13
Byte14
Byte15
Byte16
Byte17
Byte18BCC校验码(十六进制ASCII码)
Byte19
Byte20结束字符