1、上位机与PLC之间通讯实现
欧姆龙PLC—CJ1M(CPU21)有两个串行通讯口,一是通过欧姆龙专用串口通讯线CS1W-CN226,其网络类型设置为Toolbus,同时将DIP4串行通讯设状态置为ON;一是通过欧姆龙九针串口通讯线XM2Z-200S-CV,其网络类型设置为SYSMAC WAY,其它为默认设置,包括端口为COM1,波特率为9600。图1所示为上位机通过RS-232C端口连接到PLC的示意图,也可以称作1:1连接。

图1 RS-232C端口的1:1连接
图2所示为上位机与PLC之间通讯实现过程。

图2 上位机与PLC之间通讯实现过程
2. VB与PLC之间通讯协议和程序实现
2.1 链接系统的通讯协议
在纱线数据通讯中,只需要在上位机系统中编写上位机通讯程序,无需在PLC中编写任何程序,PLC CPU会根据上位机发来的命令帧自动生成响应帧返回给上位机。命令帧和响应帧之间包含需要通讯的数据,只有保证正确实现命令帧和响应帧之间的应答,才能实现准确的数据交换。命令和应答有两种方式,一种是从上位机发命令到PLC,另一种方式允许PLC发命令给上位机,我们采用浅一种方式。
从上位机发送命令时的命令帧和响应帧如图3。

图3 命令帧和响应帧格式
命令帧中:
@——命令开始标志,所有命令都以“@”开始;
节点号——与上位机连接的PLC,在1:1连接中默认值为00;
标题码——设置两字节的命令代码,如RD代表读PLC的DM区数据;
正文——设置命令参数
FCS——设置两字符的帧检查顺序码,用于校验,是用两位ASCII码表示的8位数据,是从“@”开始到正文结束的所有字符的ASCII码按位异或运算的结果;
结束符——表示命令的结束,用“*”和回车符“CHR$(13)”标明。
应答帧中:
@、节点号、标题码、FCS和结束符同命令帧中的含义。
异常号——返回命令的执行状态,,是否有错误发生。
2.2 通讯端口初始化
在上位机与PLC实现通讯之前,必须先在上位机VB中设置通讯控件MSComm1的相应属性,通讯口初始化程序一般放在窗体加载程序中。
Private Sub Form_Load()
MSComm1.CommPort = 1 ‘设置Com1通讯口
MSComm1.Settings = “9600,e,7,2” ‘波特率9600,e偶校验,7位数据位,2位停止位
MSComm1.PortOpen = True ‘打开通讯端口
MSComm1.InBufferCount = 0 ‘清空接收缓冲区
End Sub
其它设置均取通讯控件MSComm1的默认值。
2.3 帧格式代码
采用基于Windows操作系统功能强大的面向对象的程序设计语言——Visual Basic,编写了上位机程序,建立了上位机与PLC之间良好的通讯协议。以读内存DM区为例:
上位机命令帧:
"@" + "00" + "FA" + "1" + "00000000" + "0101" + "82" + 开始地址+读取个数+FCS+结束符
PLC应答帧:
"@" + "00" + "FA" + "1" + "00000000" + "0101" + "82" + "0000"+读取数据 +FCS+结束符
其中:
FA——表示FINS命令
0101——表示连续读内存区
82——表示读内存DM区
2.4 校验算法实现
为了保证通讯数据准确无误的传输,欧姆龙PLC对通讯数据以按位异或算法进行校验。代码如下,仅供参考。
Option Explicit
Function FCS(ByVal temp1 As String) As String
Dim slen1, i, xorresult1 As Integer ‘ 定义变量
Dim tempfcs1 As String
xorresult1 = 0
slen1 = Len(temp1) ‘ 求输入字符串的长度
For i = 1 To slen1
xorresult1 = xorresult1 Xor Asc(Mid(temp1, i, 1)) ‘从首字符到尾字符获取ASCII码,按位异或
Next i
Tempfcs1 = Hex$(xorresult1) ‘转换为16进制
If Len(tempfcs1) = 1 Then
FCS = "0" & tempfcs1
Else
FCS = tempfcs1
End If
End Function
3. 结束语
本文作者创新点主要通过RS-232C串口通讯,采用面向对象的可视化编程工具——Visual Basic建立上位机与欧姆龙PLC-CJ1M(CPU21)之间的数据通讯,获取纱线在线检测数据,现场实测表明能够快速准确在线测量纱线的CV值、瞬时直径、平均直径、粗节最大值、细节最小值等等,实时反映纱线的不匀率,对提高棉纺企业纱线质量具有重要的意义。