📄 西门子(中国)自动化与驱动集团-应用实例-自由口模式下plc与计算机的通信.htm
字号:
<LI>PLC在接到上位机指令后,将发送一个21字节长反馈信息,格式见表2 <BR>说明:
<OL>
<LI>起始字符 <BR><FONT
color=#ffffff>----</FONT>起始字符标志着反馈信息的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符,这样上位机可以根据信息的起始字符来判断反馈信息的来源。
<LI>状态信息 <BR><FONT
color=#ffffff>----</FONT>该字节包含指令执行的状态信息,在本例中 <BR>
<TABLE align=center>
<TBODY>
<TR>
<TD>01H</TD>
<TD width=10> </TD>
<TD>代表</TD>
<TD width=10> </TD>
<TD>读取正确</TD></TR>
<TR>
<TD>02H</TD>
<TD width=10> </TD>
<TD>代表</TD>
<TD width=10> </TD>
<TD>写入正确</TD></TR>
<TR>
<TD>03H</TD>
<TD width=10> </TD>
<TD>代表</TD>
<TD width=10> </TD>
<TD>BCC校验码错误</TD></TR>
<TR>
<TD>04H</TD>
<TD width=10> </TD>
<TD>代表</TD>
<TD width=10> </TD>
<TD>指令不合法</TD></TR></TBODY></TABLE>
<LI>数据区 <BR><FONT
color=#ffffff>----</FONT>反馈信息的B3到B18为读指令所要读取的数据,以十六进制ASCII码表示。
<LI>BCC校验码 <BR><FONT
color=#ffffff>----</FONT>与上位机指令中的BCC校验码类似,它是反馈信息B3到B18的异或和。
<LI>结束字符 <BR><FONT
color=#ffffff>----</FONT>结束字符标志着反馈信息的结束,在本例中被定义为26H。
</LI></OL></LI></UL>
<P><IMG alt="" border=0 height=7 src=""
width=7> <B>指令中为何要使用ASCII码</B> <BR><FONT
color=#ffffff>----</FONT>一条指令除包含数据外,还包含必要的控制字(起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆。
<BR><FONT
color=#ffffff>----</FONT>例如本例中,指令的起始字符为"g",其ASCII码值为67H,结束字符为"G",其ASCII码值为47H。假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。
<BR><FONT
color=#ffffff>----</FONT>为了避免这种情况的发生,可以用文本来传送二进制数据。通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。这样,数据中的47H以ASCII码的形式进行传送就变成了34H
37H 两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。
<P><FONT color=#336699><B>表1 上位机指令格式</B></FONT> <BR>
<TABLE align=center width=430>
<TBODY>
<TR>
<TD align=middle bgColor=#ece0e0 class=v15
width=80>Byte0</TD>
<TD align=middle bgColor=#ece0e0
class=v15>起始字符</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte1</TD>
<TD align=middle bgColor=#ece0e0
class=v15>指令类型(读/写)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte2</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=2>目标PLC站地址(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte3</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte4</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=8>目标寄存器地址(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte5</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte6</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte7</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte8</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte9</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte10</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte11</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte12</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=2>读/写字节数M(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte13</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte14</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=16>要写入的数据(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte15</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte16</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte17</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte18</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte19</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte20</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte21</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte22</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte23</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte24</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte25</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte26</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte27</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte28</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte29</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte30</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=2>BCC校验码(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte31</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte32</TD>
<TD align=middle bgColor=#ece0e0
class=v15>结束字符</TD></TR></TBODY></TABLE>
<P><SPAN style="COLOR: #336699; FONT-SIZE: 12px"><B>表2
反馈信息格式</B></SPAN> <BR>
<TABLE align=center width=430>
<TBODY>
<TR>
<TD align=middle bgColor=#ece0e0 class=v15
width=80>Byte0</TD>
<TD align=middle bgColor=#ece0e0
class=v15>起始字符</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte1</TD>
<TD align=middle bgColor=#ece0e0
class=v15>状态信息</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte2</TD>
<TD align=middle bgColor=#ece0e0 class=v15
rowSpan=16>数据区(十六进制ASCII码)</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte3</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte4</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte5</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte6</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte7</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte8</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte9</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte10</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte11</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte12</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte13</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte14</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte15</TD></TR>
<TR>
<TD align=middle bgColor=#ece0e0
class=v15>Byte16</TD></TR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -