图1 系统框图
(1) 通讯格式的确定
作者使用的通讯参数:9600波特率,8位数据位、1位停止位,奇校验。本实例中定义整个帧长22个字节。
帧格式:

(2) 上位机程序设计
上位机程序设计包括两个模块:用户应用程序和串行通讯程序.用户应用程序是图形化的供用户操作的界面。串行通讯程序是底层运行的程序,它负责与下位机的通讯。
上位机通讯程序:
Sub Form_Load() '窗体加载打开串口
MSComm1.PortOpen = True
Mscomm1.settings="9600,o,8,1"
End Sub
Sub MSComm1_OnComm() '有数据输入
If MSComm1.CommEvent = comEvReceive Then
If MSComm1.InBufferCount = 22 Then
buffer = MSComm1.Input
If buffer(0) = &HFF And buffer(1) = &HFF And buffer(21) = &HCC Then
Call StateToBuffer'将读入的数据读入应
'用程序处理
Call IniState '初始化状态
Call StateToBuffer'确定发送给PLC的
'数据
MSComm1.Output =Buffer'发出数据
Else
MSComm1.InBufferCount = 0
End If
Else
M
SComm1.InBufferCount = 0
MSComm1.PortOpen = False'通讯失败关闭串口
'然后重新打开
MSComm1.PortOpen = True
End If
End Sub
(3) 下位机程序设计
下位机程序设计指使用PLC编程软件对PLC进行编程,实现对电机的控制。
当TSX Neza处于ASCII模式时,状态位%S100置为"1"。发送与接受由%MSG模块与EXCH指令组成。%MSG模块用来控制数据交换,EXCH指令用来控制数据交换。发送或接收帧的最大为128字节。
EXCH指令由控制区、发送区、接收区组成,如表1所示。EXCH指令有3个用途:发送;发送/接收;接收。
表1 EXCH指令

控制区高位字节为命令,低位字节为发长度LgT/LgR,长度字节表示发送字符的长度(LgT),在接收的结尾被改写为接收字符的长度(LgR)。当接收到帧的末尾字节后结束接收。结束码可以为用户修改(系统字%SW68的低位字节)。该字节默认值为H0D。
在使用EXCH指令的发送模式,仅需要有控制区与发送区,TSX Neza仅传送发送区的数据。
在使用EXCH指令的发送/接收模式时,先发送,在发送结束时TSX Neza切换为等待接收的状态。如果接收状态正常且询问长度(LgT)和响应(LgR)的长度都小于%Mwi保留区(长度L),那么等接收到响应后,把它复制到与发送表相关的%Mwi区。如果不是这种情况,则位%MSG.E变为1。当检测到结束码或接收区满了时,接收结束。
在使用EXCH指令的接收模式,仅需要有控制区和接收区,TSX Neza仅接收数据。等接收到响应后,把它复制到与发送表相关的%Mwi区。如果不是这种情况,则位%MSG.E变为1。当检测到结束码或接收区满了时,接收结束。
我们使用内部字MW1作为控制区,MW2至MW11作为发送区,其中MW2、MW3作为前导码。MW12至MW17作为接受区。在PLC程序中读取内部字作为工作的判定条件。
本实例PLC每450ms与PC机通讯一次。
(4) 硬件部分
硬件包括RS232与RS485转换,如果上位机与下位机距离远的话,还要考虑485总线上的干扰问题。
硬件设置:
TER端口可以在PLC配置对话框中修改;
类型:半双工;
速率:9600bps;
格式:1个起始位,8个数据位、1个停止位。