用VB实现欧姆龙PLC及计算机间的串行通信

时间:2023-03-21作者:佚名
1 引言
在工业控制领域中,plc作为一种稳定可靠的控制器得到广泛的应用。但它也有自身的一些缺点,即数据的计算处理和管理能力较弱,不能给用户提供良好的界面等。而计算机恰好能弥补plc的不足,它不但有很强的数据处理和管理能力,而且能给用户提供非常美观而又易于操作的界面。将plc与计算机结合,可使系统达到既能及时地采集、存储数据,又可处理和使用好数据,两者结合的关键是plc与计算机之间的通信。本文以omron公司的cpmia小型plc为例,详细的讨论了plc与计算机通信的原理和用vb如何实现plc与计算机的通信。
2 通行原理与方法
上位机要能够通过plc监控下层设备的状态,就要实现上位机与plc间的通信,一般工业控制中都是采用rs232c实现。上位机首先向plc发送查询数据的指令(实际上是查询plc中端子的状态和dm区的值等),plc接收了上位的指令后,进行校验(fcs校验码),看其是否正确,如果正确,则向上位机传送数据(包含首尾校验字节)。否则,plc拒绝向上位机传送数据。上位接收到plc传送的数据,也要判断正确与否,如果正确,则接收,否则,拒绝接收。
由于cpm1a没有提供串行通信口,我们利用其提供的外设端口实现通信。plc与计算机之间的连接是通过omron提供的专用电缆cqm1-cif01来实现的,其硬件连接图如图1所示。
用VB实现欧姆龙PLC及计算机间的串行通信

3 plc与计算机间的通信规约
计算机与plc间的通信是以“帧”为单位进行的,并且在通信的过程中,计算机具有更高的优先级。首先,计算机向plc发出命令帧,然后,plc作出响应,向计算机发送回响应帧。其中命令帧和响应帧的格式如下:
(1) 命令帧格式。为了方便计算机和plc的通讯,cpm1a对在计算机连接通信中交换的命令和响应规定了相应的格式。当计算机发送一个命令时,命令数据主准备格式如图2所示。
用VB实现欧姆龙PLC及计算机间的串行通信

其中@放在首位,表示以@开始,设备号为上位机识别所连接的plc的设备号。识别码为命令代码,用来设置用户希望上位机完成的操作,fcs为帧检验代码,一旦通信出错,通过计算fcs可以及时发现。结束符为“*”和cr回车符,表示命令结束。
(2) 响应帧格式。由plc发出的对应于命令格式的响应帧格式如图3所示。
用VB实现欧姆龙PLC及计算机间的串行通信
其中,异常码可以确定计算机发送的命令是否正确执行。其它的与正文中的含义相同。正文仅在有读出数据时有返回。
4 通信程序的设计
为了充分利用计算机数据处理的强大功能,我们可以采用计算机有优先权的方式,在计算机上编写程序来实现计算机与plc的通信, 计算机向plc发出命令发起通信,plc自动返回响应。本文中采用vb来编写计算机与plc间的通讯程序。在vb中提供了通信控件—应用通信控件(mscomm),实现通过串行端口传送和接受的功能。
下面介绍mscomm控件的属性:
*commport:设定通信连接端口代号,程序必须指定所要使用的串行端口号,WINOOWs系统使用所设定的端口与外界通信。
*portopen:设定通信口状态,若为真,通信端口打开,否则关闭。
*settings:设定通信口参数,其格式是"bbbb,p
,d,s",其中bbbb为通信速率(波特率),p为通信检查方式(奇偶校验), d 为数据位数,s为停止位数,其设定应与plc的设定一致。
*input:将对方传送至输入缓冲区的字符读入到程序。
*output:将字符写入输出缓冲区。
*inbuffercount:传回接收缓冲区中的字符数。
*outbuffercount:传回输出缓冲区中的字符数。
*inputlen:设定串行端口读入字符串的长度。
*inputmode:设定接收数据的方式。
*rthreshold:设定引发接收事件的字符数。
*commevent:传回oncomm事件发生时的数值码
*oncomm事件:无论是错误或事件发生,都会触发此事件。
(1) 控件参数的初始化。
初始化程序如下:
mscomm.comport=2 `使用串口com2
mscomm.settings="9600, e, 7, 2" `波特率9600,偶校验,7位数据位,2位停止位
mscomm.portopen=true `打开通信端口,准备通信
(2) 计算校验码fcs,计算fcs的vb自定义函数如下:
function fcs(byval inputstr as string) as string
dim slen, i, xorresult as integer
dim tempfes as string
slen=len(inputstr) `求输入字符串长度
xorresult = 0
for i = 1 to slen
xorresult = xorresult xor asc(mid$(inputstr, i, 1)) `按位异或
next i
tempfes=hex$(xorresult) `转化为16进制
if len(tempfes)=1then tempfes =“0” tempfes
fcs = tempfes
end function
(3) 计算机与plc通信程序。
主要是一个自定义函数。
function readdata(byval inputstr as string, byval num as integer) as string
dim outputstr as string
dim instring as string
dim returnstr as string
dim endstring as string
dim fcsstring as string
dim returnfcsstring as string)
mscomm.inbuffercount=0
outputstr=inputstr fcs(inputstr) “*” `给出命令帧
mscomm.output=outputstr chr$(13) `向plc传送命令帧
do
doevents
loop while mscomm.inbuffercount < 15
instring=mscomm.input `获取plc的响应帧
`结束码判断
endstring = mid$(instring, len(instring) -
num- 5, 2)
if endstring = "13" then
readdata = "error"
exit function
elseif endstring = "14" then
readdata = "error"
exit function
elseif endstring = "15" then
readdata = "error"
exit function
elseif endstring = "18" then
readdata = "error"
exit function
elseif endstring = "a3" then
readdata = "error"
exit function
elseif endstring = "a8" then
readdata = "error"
exit function
end if
`响应帧校验
endstring = mid$(instring, 1, len(instring) - 4)
returnfcsstring = mid$(instring,len(instring) - 3, 2)
fcsstring = fcs(endstring)
if fcsstring <> returnfcsstring then
readdata = "error"
exit function
end if
returnstr = mid$(instring,
len(instring) - num - 3, num)
readdata = returnstr
end function
从上面程序可以看到,计算机对plc返回的响应帧要进行fcs校验,并利用异常码排除返回的异常数据,这样不但可以提高计算机获取信息的正确性,而且提高了计算机监控的实时性。
5 结束语
本文介绍的通信方法在我校cims研究中心自行研制的一套机电一体化设备中得到实施运用,经试验运行,证明这种通信方法稳定、可靠,确实是一种非常有效的方法。将plc与计算机通信网络连接起来,plc作为下位机,计算机作为上位机,形成一个优势互补的自动控制系统,实现了“集中管理,分散控制”。其中各个plc子系统或远程工作站在生产现场对各个被控对象进行控制,利用网络连接构成一个plc综合控制,满足了现代自动化系统向信息化、网络化、智能化的过渡。

相关阅读

电工新手必备干货——电路设计和家庭电路控制系统大全

电路设计 与电路工程明确用电需求,出设计图纸。 所有线路应遵循平竖直,最短原则,减少弯线避免后期维修困难。 空调,厨房,卫生间,客厅,卧室,电脑及大功率电器等用专有的...
2023-06-11

找出家里的“电费刺客”,高额电费退退退

最近不少人 会有这样的疑惑 没怎么用电却交了 高额电费? 今天,就让我们找到潜伏在家中的 “电费刺客” ↓↓↓ 家里那些不起眼的 “超龄”电器 你不信! 那就让我们来“一探究竟...
2023-06-11
找出家里的“电费刺客”,高额电费退退退

几种PFC拓扑电路对比分析

最基本的有桥boost PFC电路 有桥boostPFC电路是最基本的电路,就不叙述了。 双Boost无桥PFC 双boost无桥拓扑的优点是使用功率元件比较少, 两个管子可以一起驱动, 这简化了驱动电路的设计...
2023-06-26
几种PFC拓扑电路对比分析

15KW电机一启动就跳总闸,测量一切正常,电流却有一百多安,这是怎么回事呢?

在工业生产中,电机作为驱动核心,其稳定运行直接关系到生产效率和安全。今天,我们就来探讨一个实际案例,关于一台15KW电机启动时遇到的跳闸问题,并深入解析其背后的电流特性与空开...
2024-08-15
15KW电机一启动就跳总闸,测量一切正常,电流却有一百多安,这是怎么回事呢?

电动机的故障原因及维修方法,这一篇帮您掌握,科普涨知识

一、电动机故障产生的原因 1.内部原因 内部原因指机内线圈断路、烧坏,连接部位脱焊、腐蚀,开关及触点氧化等。 2.外部原因 外部原因是指由于电机外部条件造成的故障原因,例...
2023-06-13
电动机的故障原因及维修方法,这一篇帮您掌握,科普涨知识

热销商品

公牛开关插座面板全屋定制全屋配齐家装报价单官方正品付款链接Q9

公牛开关插座面板,为您的全屋定制家装提供一站式解决方案。我们提供全屋配齐的家装报价单,确保您的家装项目完美无缺。所有产品均为官方正品,品质保证,让您用得放心。...
¥ 1

3M自粘橡胶条高硬度耐压实心幕墙玻璃舞台搭建货架专用减震密封条

3M自粘橡胶条是一款专为高要求工业及建筑场景设计的高性能密封减震材料,采用高硬度实心橡胶材质,具备优异的耐压性、抗老化性和持久弹性。其独特的自粘背胶设计,安装...
¥ 1.6

定做定制各类密封条三元乙丙橡胶硅胶PVC防火阻燃EVA氯丁石墨丁晴

本公司专业定做各类定制密封条,涵盖三元乙丙橡胶(EPDM)、硅胶、PVC、EVA、氯丁橡胶、丁腈橡胶及石墨复合等多种材质,满足不同行业对密封、防水、隔音、隔热及防火阻燃...
¥ 1

公牛官方旗舰店开关插座空调16A插座五孔10A面板暗装多孔G12白灰

公牛官方旗舰店提供一系列高质量的开关插座和空调配件。这款16A插座五孔面板采用暗装设计,适用于多种安装环境,如墙面、天花板等。它具有10A的电流容量,可以满足家庭...
¥ 5.55

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店

西门子开关插座无框皓彩米绒白亚光二三插USB10A五孔一开旗舰店,作为西门子品牌的专卖店,提供了一系列高品质、设计新颖的家居电气产品。这里销售的开关插座采用无框...
¥ 8.77

网站栏目