产品描述
西门子中国授权代理商-电源总代理商公司
1 引言
可编程控制器(Programmable Logic Controller)简称PLC或PC,是一种以微处理器为器件的过程控制装置,主要用于生产过程中按时间顺序控制或逻辑控制的场合,以取代复杂的继电器控制装置。PLC一般采用梯形图(LAD)、功能块图(FBD)、指令表和顺序功能表图(SFC)编程,可以方便地通过改变控制程序实现系统的改进和扩充,不必改变硬件设备,具有良好的柔性。它从初的逻辑控制、顺序控制已发展成为具有逻辑判断、定时、计数、记忆和算术运算、数据处理、联网通讯及PID回路调节等功能的现代PLC。PLC系统与通用计算机可直接或通过通讯处理单元、通讯转接器相连构成网络,以实现信息的转换,构成分布式控制系统,系统可由一台计算机与多台PLC构成,以便完成较大规模的复杂控制。它以构成简单、编程简单、性高、有优良的抗干扰能力,适用于恶劣的工业环境等特点,越来越得到广泛的应用。
山西铝厂3#焙烧炉采用丹麦史密斯公司的气态悬浮焙烧炉。焙烧炉是将含水分的氢氧化铝经高温焙烧成工业用氧化铝,它的热能来自四套燃烧站,分别为干燥热发生器、启动热发生器、点火燃烧站和主燃烧站。四套燃烧站都采用德国西门子S5—95U小型可编程控制器,与Honeywell 的系统连接构成整个控制系统。下面以3#焙烧炉的干燥热发生器为例来说明了编程控制器在焙烧炉的应用。
2 S5—95U简介
S5—95U是德国西门子公司开发的SIMATIC S5系列控制器中一种小型控制器,其构成系统模块化,使其体积小而功能强大。它不单运行,需与其它部件交换数据,与现场设备构成廉价的分布式控制系统。
2.1 组成
S5—95U由电源模板、处理单元(CPU)、存储器、用户存储器、输入输出模板(I/O)、编程器及外部设备组成。本机有16个数字输入、16个数字输出、8个模拟输入、1个模拟输出、4个中断输入、2个记数输入,可用扩展单元增加其容量,大扩展到256个数字输入输出,通过接口与过程控制系统及其它PLC通讯,实现指令控制和数据交换。
2.2 程序的编程及结构
S5—95U的控制功能是靠程序的执行来实现的。通过用梯形图、语句表在个人计算机上编程,也可通过SIMATIC编程器用语句表编程,然后装载到PLC的存储器中。程序采用STEP5语言编程,模块化结构。结构化编程可完成复杂的任务,它把整个程序分成一个个立的程序块,这样可使编程简单、容易修改,能使程序部分标准化,程序测试调试简便。有五种块类型:(1)组织块OB(组织管理程序)用以表示操作系统和应用程序之间的接口。分两大类,一类由系统程序调用,另一类由用户调用。由系统调用的组织块用以控制循环、中断驱动和定时驱动程序的执行,如可编程控制器的重新启动和设备出错的恢复等功能块。由用户调用的组织块如OB3触发扫描时间、OB251PID控制算法,它集成在操作系统中。组织块不是应用程序的一部分,因而不能被读或修改。(2)顺序块SB(给顺序控制编程的特殊块)(3)程序块PB(经结构化处理的应用程序所产生的块)一些主要程序块应能提供一个应用程序的总貌,与各种工艺相关的功能则在不同的次级程序块中被编程。应用程序大部分都由程序块组成。(4)功能块FB(一个控制程序功能需操作或用于实现重复使用和特别复杂的功能)它在程序存贮中只存放一次而可重复调用,每次调用可赋于不同的参数。其类型有可编程功能块、集成入操作系统的功能块和标准化功能块。(5)数据块(存储处理控制程序所需的数据)
2.3 程序的扫描
应用程序扫描一般是循环扫描。在启动程序之前,输入模板的信号被读出并传送到过程输入映象。在执行程序后,过程输出映象的信号状态被传送给输出模板,然后开始一新的程序扫描。它的扫描周期由控制程序的长短来决定。此外,还有中断控制程序处理和时间控制程序处理。
2.4 程序的装载和存贮
程序装载到PLC有两种方法:一种是以编程器在线装载,另一种是以存贮器子模板装载,分自动和手动装载。自动程序装载是程序由存贮器子模板自动装载到PLC的程序存贮器中。手动程序装载是程序由存贮器子模板拷贝到PLC的程序存贮器中。
存贮时,程序从PLC的程序存贮器拷贝到PLC的程序存贮器中。
3 工艺流程及控制要求
3.1 工艺流程
湿的氢氧化铝进入文丘里干燥器(由干燥热发生器提供热能),物料水分被蒸发后,被气流带走,文丘里干燥器的出口温度大约控制在130—160℃范围内。干燥热发生器的好坏直接影响氧化铝的提产。
3.2 控制要求
3.2.1 点火过程控制
干燥热发生器的点火过程控制是一典型的顺序控制。其启动顺序如下:
A 煤气阀V02到启动位置,风机M12启动。
B 9秒后,风门M11到大。
C 40秒后,风门M11调到启动位置。
D 煤空阀V05关,9秒后,泄漏控制开始,运行18秒。
E 检漏阀V04开,煤气喷入,点打火,燃烧运行,火焰连续监测。
3.2.2 温度控制
干燥热发生器主要靠调节进入文丘里干燥器的煤气流量来实现温度的控制。
4 控制功能的实现
4.1 顺序控制及逻辑控制
顺序控制是可编程控制器的主要功能。以前顺序控制是采用继电器、计数器、阀门等机诫设备来实现。S5—95U利用基本的逻辑元素和运算来实现逻辑控制功能,利用定时器、记时器来实现时间控制功能。干燥热发生器的程序包括主顺序程序块、风门电机(M11/M12)控制程序块、阀门(V02/V03/V04)控制程序块、煤气捡漏控制程序块、报警联锁程序块、模拟量的处理等几部分程序。
主程序循环扫描,通过主程序调用其它程序。
现场报警会引起启动过程中断。如电机M12报警、阀V03 V04 V05报警、火焰报警、点位置报警、点电磁阀报警等。过程报警会引起停车。如煤气压力P05报警、煤气流量报警、燃烧风流量报警等。报警信号不仅输出到继电器,同时也输出到可编程控制器的控制面板的指示灯。
干燥热发生器的起停与焙烧炉其它设备有联锁,该联锁通过系统中IPC620的逻辑控制实现,并直接输出到可编程控制器的联锁指示灯。
4.2 模拟量的控制及处理
4.2.1 V02阀定位器控制,通过自控系统中回路调节来实现
V02阀在点火过程中,都处在启动位置,燃烧运行后,通过系统给定值来自动增减阀门,实现自动调节。
4.2.2 燃烧风风门的控制,通过S5—95U可编程控制器实现
燃烧风风门的控制是根据检测的煤气流量值,经模拟量处理后,按一定的对应关系,由S5—95U计算出风门开度,然后输出到风门。具体处理过程如下:
A 煤气检测流量FT01(脉冲信号)转换成煤气流量(电流信号)
B 煤气流量值的修正
C 据修正后的标准流量FI01计算出风门控制量FC11
4.2.3 模拟量的处理
S5—95U可编程控制器只做运算,它的结构相对比较简单,但程序设计比较麻烦。在解决实际问题时,为不导致数溢出,在编制程序时,为参加运算的数选择适当的比例因子,使参加运算的数和中间结果的都符合表示法的形式,算出的得数还需程序人员还原。它的数字量一般都是二进制码的16位数,可以直接使用STEP5操作进行加减和比较运算。而标准功能块则用于这些值的乘除运算。所有模拟量的读入和输出都通过模拟输入输出模板和标准功能块FB250读入和FB251输出,其数据都存入数据块中。模拟输入模板把模拟过程信号转换成CPU能够处理的数字值,模拟输出模板则实现相反的功能。如模拟输入量有煤气压力P05、煤气流量F01、风流量FT11、阀位反馈值、煤气温度T01、煤气压力P01等,模拟输出量有阀位设定ZY01、面板显示的流量值FI01、面板显示风流量FI11等。
5 功能块的应用
5.1 功能块的特点
功能块可用处理器的全部操作指令系统对一个功能块编程,只能用语句表对功能块编程和存档,可用图形表示,可给功能块赋参数,功能块具称等特点。因此,功能块可充分利用处理器,但另一方面,功能块不如程序块那样容易编程。
5.2 功能块的编程
功能块采用语句表用编程器来编程。功能块分为两大类:即带块参数的功能块和不带功能块的功能块。无块参数的功能块编程在本质上同程序块的编程基本一样,随着编程器提示,输入功能块名(包含8个以内的字符)。带块参数的功能块,则在输入块名以后应该这些块参数的名字、参数类型和数据类型。当所有块参数都引入后,再用控制功能的编程继续输入。
5.3 标准功能块的应用
标准功能块都集成在CPU操作系统中,执行速度快,且不占用户存储空间,常用的标准功能块有模拟量读入功能块FB250 RLG: AE、模拟量输出功能块FB251 。此外,可编程在运算过程中经常还会用到16位码变换器FB241
COD:16、16位二进制乘法FB242 MUL:16、16位二进制除法FB243 DIV:16、数到浮点数转换FB15、浮点数到数转换 FB16、浮点数相乘FB19、浮点数相除FB20等标准功能块。还有一种由用户编程的功能块,如V02调节阀自动增减功能块FB21和FB22。
6 结束语
实践证明,PLC是实现现场自动化的理想控制器。它的体积小、功能强、程序设计简单、灵活通用、维护方便等一系列优点特别是高性和较强的适应恶劣环境的能力,是得到用户的。作为从事工业自动化的技术人员,不但要熟悉各种控制系统的原理和结构,而且还要了解控制对象的工艺过程和控制要求。只有这样,才能设计、安装调试和维护好工业自动控制系统,确保氧化铝生产过程和经济稳定运行。
关键词:串行通信 Delphi 动态链接库DLL 构件 句柄 设备控制 块DCB 可编程控制器 PLC
在自动测量和控制系统中,常常需要在上位机(微机)和PLC(可编程控制器) 之间进行数据交 换和发送控制信号,串行通信是其主要手段,我们在开发一套自动测试系统时就是采用串行 通信的方法,即由上位机向PLC发送命令,控制其进行各种测试线路的切换。
1 通信协议
在本系统中微机和PLC采用一对一通信连接,上位机作主局,PLC作子局。通信开始时由上位 机向PLC发出呼叫,PLC收到上位机的呼叫后应答,并返回应答信号,然后上位机发标,PL C应答,接着上位机发数据块,PLC应答,数据全部发完后上位机发一结束标志,至此上位机 与PLC的通信结束。
该协议使用的传输控制字符有:
ENQ(查询):在需要通信时作为发送方的请求。
ACK(认可):接收方给发送方的应答,表示正确接收信息包。
SOH(标):表示要传送的是标。
ETB(数据结束):标志数据块的结束。
STX(文本开始):标志数据块的开始。
ETX(文本结束):标志文本块的结束。
EOT(结束):表示传送结束。
LRC:纵向冗余校验码,即对所有的传输码进行异或计算。
2 bbbbbbs95下用Delphi实现串行通信
在bbbbbbs95环境下用Delphi3.0实现串行通信有3种方法:①使用VB的通信构件MSComm ;② 调用bbbbbbs95下的API函数来完成通信;③熟悉C/C++或其它语言的用户可以将自己的程序 编译链接为DLL(动态链接库),这样Delphi就可以调用DLL里的函数来通信。下面就这3种方 法分别加以讨论。
2.1 使用VB通信构件
在使用VB构件之前,要将VB构件文件MSComm32.OCX安装到Delphi的动态构件库中。打开 主菜单Component选择Import ActiveX Control...项,在弹出的对话框里选中Microsoft Co mm Control5.0(安装VB5.0后必有此项),再单击Install按钮。此时Delphi载入VB构件文件并重新编译DCL(Delphi Component Library)。编译完成后,MSComm的小按钮出现在ActiveX 页中,这时程序就可以使用此 构件了。应该注意的是,安装前要确保VB通信构件的控制文件MSComm32.OCX(在VB4.0以上版 本中)在编译DCL之前已在\bbbbbbs\System下。接着向窗体中 添加1个MSComm构件并进行串行口的初始化,初始化子例程序如下:
Procedure Tbbbb1.bbbbCreate(Sender:Tbbbbbb);
begin
mPort:=2; {使用COM2口为通信口}
MSComm1.InBufferSize:=1024; {设定接收队列长度为
1KB}
MSComm1.OutBufferSize:=1024; {设定发送队列长度为
1KB}
MSComm1.Settings:=‘9600,N,8,1';{波特率9600b/s,无校验,8个数据位,1 个停止位}
MSComm1.bbbbbLen:=0; {读取整个接收缓冲区内容}
MSComm1.bbbbbBufferCount:=0; {接收缓冲区}
MSComm1.PortOpen=:True; {打开串行口}
End;
用bbbbb属性从接收对列读入字符串:ReadBuffer:=MSComm1.bbbbb;用Output属性发送字 符串:MSComm1.Output:=WriteBuffer;然后根据上述通信协议,即可快速编制出通信软件 。
2.2 调用bbbbbbs95下的API函数
bbbbbbs95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样 ,要进行串行通信,也需要先对串口进行初始化。bbbbbbs95把串行口作为设备文件,对串 口操作就是对文件操作。因此,先为串口分配1个文件句柄,以后对串口操作都将通过 这个文件句柄来完成。初始化过程如下:
(1)调用CreateFile函数为串口分配1个文件句柄。
Var HComm:THandle;
HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
如果对串行口1操作,用字符串COM1代替COM2即可。
(2)调用SetupComm函数设置串行口的输入和输出缓存区。
SetupComm(HComm,1024,1024);
(3)1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数 获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位 等,后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。
Var DCB:TDCB;
GetCommState(HComm,DCB);
BuildCommDCB(‘9600,N,8,1',DCB);
SetCommState(HComm,DCB);
(4)用PurgeComm函数来接收缓存区的内容。
PurgeComm(HComm,PurgeRXbbbbb);
(5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R eadFile函数用于接收数据,WriteFile函数用于发送数据。
Var
OverLapped:TOverLapped;
DataIn:Byte;
DataOut:Byte;
BufferSize:Integer;
COMSTAT cs;
ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
{从串行口读输入缓存的字节,存入DataIn变量中}
WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
{向串行口写输出缓存的字节,要写的数据存放在DataOut}
按照上述步骤,再根据的通信协议,即可完成串行通信。
2.3 调用其它语言编写的DLL
由于这里所说的其它语言包含面很广,可以是开发人员所熟悉的编程语言(只要其支持DLL即 可),如C和C++等,所以如何编写DLL就不再详述了。将编写好的DLL进行编译,然后把编译 通过后的DLL放在\bbbbbbs\System子目录下,在Delphi下打开1个单元文件,将DLL里的所 有函数在单元文件中声明,格式如下:
unit UnitName;
interface
procedure p1(bbbbb1:type1;bbbbb2:type2;...);stdcall;
external‘DLLName';
…
implementation
end
其中UnitName为单元文件名,p1为调用过程名,bbbbb1、bbbbb2为参数名,type1、type2为 参数类型名,DLLName为DLL名。串行通信时,只要将此单元包含进编程单元就行了。
3 结 论
对使用Delphi开发bbbbbbs95下与PLC进行串行通信程序的3种方法进行比较可以得出这样的 结论:
(1)使用VB通信构件不但能够实现API的所有功能,而且程序简单明了。
(2)调用bbbbbbs95的API通信函数,可以设计和开发出各种通信软件,但编程复杂。
(3)3种方法适合那些熟悉其它编程语言的开发人员。
以上所有程序均在bbbbbbs95中文版下使用Delphi3.0调试通过。
作者单位:合肥工业大学计算机系(230061)
参考文献
1 李汉涛,杨长春.bbbbbbs下三线制串行通信的实现方法.电脑技 术,1998;(7)
2 王仲文译.精通串行通信.北京:电子工业出版社
一、MSComm控件的主要属性及事件
(1)CommPort:设置或返回串行端口号,缺省值1。
(2)Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′
(3)PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:={True|False}
(4)InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。
(5)InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。
(6)RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或过该值后就产生代码为ComEvReceive的OnComm事件。
(7)SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为ComEvSend的OnComm事件。
(8)bbbbbLen:设置或返回接收缓冲区内用bbbbb读入的字节数,设置该属性为0表示bbbbb读取整个缓冲区的内容。
(9)bbbbb:从接收缓冲区读取一串字符。
(10)OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
(11)OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。
(12)OutPut:向发送缓冲区传送一串字符。
如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:
(1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold的值。
(2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold的值。
(3)ComEvFrame:值为1004,硬件检测到帧错误。
(4)ComEvRxOver:值为1008,接收缓冲区溢出。
(5)ComEvTxFull:值为1010,发送缓冲区溢出。
(6)ComEvRxParity:值为1009,奇偶校验错误。
(7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。
二、程序样例
下面是一接收程序的样例(主要部分),大家可根据实际需要进行完善。
在bbbb中放置一Memo控件用于显示接收的数据,Combobox1选择通信参数(Setting属性值),Combobox2选择串口(CommPort属性值),按Button1开始接收数据,按Button2停止接收。
procedure Tbbbb1.bbbbCreate(Sender: Tbbbbbb);
begin
Mscomm1.InBufferCount :=0; // 清空接收缓冲区
Mscomm1.bbbbbLen :=0; // bbbbb读取整个缓冲区内容
Mscomm1.RThreshold :=1; // 每次接收到字符即产生OnComm事件
end;
procedure Tbbbb1.Button1Click(Sender: Tbbbbbb);
begin
Mscomm1.Settings :=ComboBox1.Text;
if ComboBox2.Text =′com1′ then // 设只考虑COM1和COM2两种情况
mPort :=1
else
mPort :=2;
Mscomm1.PortOpen :=true; // 打开串口
Mscomm1.DTREnable :=true; // 数据终端准备好
Mscomm1.RTSEnable :=true; // 请求发送
end;
procedure Tbbbb1.Button2Click(Sender: Tbbbbbb);
begin
Mscomm1.PortOpen :=false; // 关闭串口
Mscomm1.DTREnable :=false;
Mscomm1.RTSEnable :=false;
end;
procedure Tbbbb1.MSComm1Comm(Sender: Tbbbbbb);
var
recstr:Olevariant;
begin
if mEvent = 2 then
begin
recstr := Mscomm1.bbbbb ;
Memo1.text := Memo1.Text + recstr;
end;
end;
上位机(pc)<->全透明网关<->下位机(单片机)
全透明网关是一个tcp转rs232设备,有自己的ip和端口。
下位机原来接收pc的串口发送数据。但是现在有了tcp->rs232的全透明网关,所以理论可以实现在局域网内任何一台pc都可给下位机的网关发送数据。
概述
----本例说明如何以自由协议实现计算机与S7-200的通信,计算机作为主站,可以实现对PLC从站各寄存器的读/写操作。
----计算机通过COM口发送指令到PLC的PORT0(或PORT1)口,PLC通过RCV接收指令,然后对指令进行译码,译码后调用相应的读/写子程序实现指令要求的操作,并返回指令执行的状态信息。
通信协议
----在自由口模式下,通信协议是由用户定义的。用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接受指令(RCV)来控制通信操作。在自由口模式下,通信协议由梯形图程序控制。
指令格式定义
计算机每次发送一个33字节长的指令来实现一次读/写操作,指令格式见表1 说明:
起始字符
----起始字符标志着指令的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符以接收真对该PLC的指令。
指令类型
----该字节用来标志指令的类型,在本例中05H代表读操作,06H代表写操作。
目标PLC站地址
----目标PLC站地址占用指令的B2、B3两个字节,以十六进制ASCII码的格式表示目标PLC的站地址。
目标寄存器地址
----在PLC内部可以用4个字节来表示一个寄存器的地址(但不能表示一个位地址)。前两个字节表示寄存器类型,后两个字节表示寄存器号。
00 00(H): I寄存器区
01 00(H): Q寄存器区
02 00(H): M寄存器区
08 00(H): V寄存器区
例如:
IB000的地址可表示为 00 00 00 00(H)
VB100的地址可表示为 08 00 00 64(H)
读/写字节数M
----当读命令时,始终读回从目标寄存器开始的连续8个字节的数据(转换为十六进制ASCII码后占用16个字节),可以根据自己的需要取用,M可以任意写入。
----当写命令时,M表示的是要写入数据的十六进制ASCII码所占用的字节数。例如要写入1个字节的数据,数据在指令中以十六进制ASCII码表示,它将占用2个字节,此时应向M中写入"02"。同理,如果要写入5个字节的数据,M中应写入"0A"。
要写入的数据
----要写入的数据在指令中以十六进制ASCII码的格式表示,占用指令的B14-B29共16个字节。数据区填满,但只有前M个字节的数据会被写入目标寄存器。一条指令多可以写入8个字节的数据(此时M中应写入"10",代表十进制的16)
BCC校验码
----在传输过程中,指令有可能受到任何的干扰而使原来的数据信号发生扭曲,此时的指令当然是错误的,为了侦测指令在传输过程中发生的错误,接收方对指令作进一步的确认工作,以防止错误的指令被执行,简单的方法就是使用校验码。BCC校验码的方法就是将要传送的字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的。
----在本例中,bcc为指令B1到B29的异或和,BCC为bcc的十六进制ASCII码。
----bcc=B1 xor B2 xor B3 xor B4 xor …… xor B29
结束字符
----结束字符标志着指令的结束,在本例中被定义为ASCII码的"G",不同的PLC从站可以定义不同的结束字符以接收真对该PLC的指令。
PLC在接到上位机指令后,将发送一个21字节长反馈信息,格式见表2
说明:
起始字符
----起始字符标志着反馈信息的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符,这样上位机可以根据信息的起始字符来判断反馈信息的来源。
状态信息
----该字节包含指令执行的状态信息,在本例中
01H 代表 读取正确
02H 代表 写入正确
03H 代表 BCC校验码错误
04H 代表 指令不合法
数据区
----反馈信息的B3到B18为读指令所要读取的数据,以十六进制ASCII码表示。
BCC校验码
----与上位机指令中的BCC校验码类似,它是反馈信息B3到B18的异或和。
结束字符
----结束字符标志着反馈信息的结束,在本例中被定义为26H。
指令中为何要使用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而停止接收的错误
产品推荐