利用VB的MSComm控件编程实现PC与三菱PLC FX系列通信

编写pc的通信程序可采用汇编语言编写,或采用各种高级语言编写,或采用工控组态软件,或直接采用plc厂家的通信软件(如三菱的melse medoc等)
下面利用vb6.0以一个简单的例子来说明编写通信程序的要点。假设pc要求从plc中读入从d123开始的4个字节的数据(d123、d124),其传输应答过程及报文如图7-16所示。
图7-16  传输应答过程及命令报文
命令报文中10f6h为d123的地址,04h表示要读入4个字节的数据。校验和sum=30h+31h+30h+46h+36h+30h+34h+03 h=174h,溢出部分不计,故sumh=7,suail=4,相应的ascⅱ码为“37h”,“34h”。应答报文中4个字节的十六进制数,其相应的ascⅱ码为8个字节,故应答报文长度为12个字节。
根据pc与fx系列plc的传输应答过程,利用vb的mscomm控件可以编写如下通信程序实现pc与fx系列plc之间的串行通信,以完成数据的读取。mscomm控件可以采用轮询或事件驱动的方法从端口获取数据。在这个例子中使用了轮询方法。
1)通信口初始化
private sub initialize()
mscomm1.commport =1
mscomm1.settings = “9600,e,7,1”
mscomm1.inbuffersize = 1024
mscomml.outbuffersize = 1024
mscomm1.inputlen = 0
mscomml.inputmode = cominputtext
mscomm1.handshaking = comnone
mscomm1.portopen = true
end sub
2)请求通信与确认
private function makehandshaking()as boolean
dim inpackage as string
mscomml.outbuffercount = 0
mscomml.inbuffercount = 0
mscomml.output = chr(&h5)
do
doevents
loop until mscomml.inbuffercount = 1
inpackage = mscomml.input
if inpackage = chr(&h6) then
makehandshaking = true
else
makehandshaking = false
end if
end function
3)发送命令报文
private sub sendframe ()
dim outstring as string
mscomml.outbuffercount = 0
mscomml.inbuffercount = 0
outstrin = chr(&h2)+″on″+″10f604″+chr(&h3)+″74″
mscomml.output = outstring
end sub
4)读取应答报文
private sub receiveframe()
dim instring as string
do
doevents
loop until mscomml.inbuffercount = 12
instring = mscomml.inpult
end sub

Pasternack发布正斜率均衡器系列新型,可安装在电路板应用中
特斯拉将在下周二的“电池日”展示电池性能
人工智能如何打造出护城河
电磁屏蔽材料的原理是什么
这家FPGA公司今年同比增长700%,他们时代到来了吗?
利用VB的MSComm控件编程实现PC与三菱PLC FX系列通信
PCB工艺之外层干膜流程介绍
动力环境监控app是什么?
MATLAB课程之第三章v3 M文件知识(3)
告别充电“线”制时代 无线充电功能将普及
到2025年,英国考虑无法实现其5G目标
蓝牙5技术的到来给我们带来了哪些不一样的体验?
城市餐饮油烟污染现状及治理对策
乐pro3最新消息:搭载骁龙821处理器4GB+QC3快充,旗舰跌至1699
电感的品质因数Q
只需四步,帮助企业做好MaxCompute成本优化
轻舟智航携手华砺智行推出5G+V2X无人公交方案
汽车内饰主流制造工艺介绍
我们真的需要一个新势力造车品牌吗?
无线充电标准混战 TI频祭杀手锏