PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 61354|回复: 0

[西门子] 松下PLC与PC机的通用通讯

[复制链接]
发表于 2024-2-26 14:06:43 | 显示全部楼层 |阅读模式
点击上方"深圳智控科技"↑关注我们



松下PLC与PC机的通用通讯

PLC和PC机的通信,是普遍遇到的一种应用场景,对于大部分的开发者来说,实现松下协议有些复杂,现实首选的通信方式为通用协议,当利用winpro的IEC编程环境时,可以灵活的使用ST开发语言,开发出复杂的应答通信协议。

系统硬件组成和连接

1丶FPX-C30T为系统的核心组成。

2丶PLC使用自带的COM0。

3丶松下的5针通信电缆用于和PC机的串口通信。

4丶PC机采用市售的USB转232口和松下的串口线连接。

项目的建立和配置

项目的建立,选择PLC和开发语言如下



串口配置如下



PLC和PC之间的通讯协议和数据定义

命令采用定长帧,PC为主,PLC为从,所有的帧都是采用应答的方式。

帧格式如下

PC机发送帧,长度为固定20个字节

帧头      命令      命令附加数据     LRC校验

0x25 0x25 cmdL cmdHdata0 ... Data13 LRCL LRCH

动作

cmd指令代码

动作1

0x0001

动作2

0x0002

动作3

0x0003


PLC应答帧,长度为固定的6个字节

帧头      应答命令      LRC校验

0x25 0x25 cmdLcmdH    LRCL LRCH

正确应答时为PC机发送的命令,目前唯一的错误应答命令为0x0080帧校验错误。

帧头为固定的0x25 0x25,方便帧头定位。

程序说明

思路:

收字符是系统后台自动进行的,PLC程序判断收到的字符,如果字符不为帧头,0x25 0x025,则清除缓存,如果帧头则等收到20个字节后,首先判断校验码,如果校验码正确,则根据cmd指令做动作并应答,如果校验错误,则反馈给PC帧错误应答。

LRC:

除帧头之外有效16位数据的累加和

lrc := 0;

fori := 1to8by1do

lrc := lrc + recvbuff;

end_for;

如何清除接受缓存:

使用ClearReceiveBuffer(SYS_TOOL_PORT):

如何判断收到的字符长度:

接受缓存的第一个字为收到的字符长度,例如DT100为接受缓存起始的话,那么DT100中就是接收到的字符长度。

如何发送字符:

使用函数

SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

注意sendbuff[0]为发送字符的剩余数量,所以真正开始的字符要从sendbuff[1]开始。

从上面可以看到,winpro的开发非常类似于c语言或者basic语言的开发方式,函数指令也是很人性化的命名方式,便于开发者的记忆和使用。

程序代码

(*初始化发送字符数组  *)

if(sys_bIsFirstScan) then

fori := 0to9by1do

sendbuff := 0;

end_for;

end_if;

(* 收到的字符串 *)

if (recvbuff[0] >= 2) then

(* 如果收到的字符不为协议的起始,则清除收到的缓存 *)

if (recvbuff[1] <>16#2525) then

ClearReceiveBuffer(SYS_TOOL_PORT);

elsif (recvbuff[0] = 18) then

(* 正确,则校验后处理 *)

lrc := 0;

fori := 1to8by1do

lrc := lrc + recvbuff;

end_for;

if (lrc = recvbuff[9]) then

if (recvbuff[1] = 16#0001) then

(* 动作1处理,略*)

(* 应答pc机 *)

sendbuff[0] := 6;

sendbuff[0] := 16#2525;

sendbuff[1] := 16#0001;

sendbuff[2] := 16#0001;

SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

elsif (recvbuff[1] = 16#0002) then

(* 动作2处理,略*)

(* 应答pc机 *)

sendbuff[0] := 6;

sendbuff[0] := 16#2525;

sendbuff[1] := 16#0002;

sendbuff[2] := 16#0002;

SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

elsif (recvbuff[1] = 16#0003) then

(* 动作3处理,略*)

(* 应答pc机 *)

sendbuff[0] := 6;

sendbuff[0] := 16#2525;

sendbuff[1] := 16#0003;

sendbuff[2] := 16#0003;

SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

end_if;

else

(* 应答lrc错误 *)

sendbuff[0] := 6;

sendbuff[0] := 16#2525;

sendbuff[1] := 16#0080;

sendbuff[2] := 16#0080;

SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

end_if;

ClearReceiveBuffer(SYS_TOOL_PORT);

end_if;

end_if;

文章版权归深圳市智控科技有限公司所有,转载请注明出处。



深圳市智控科技有限公司创建于2005年,致力于提供智能化、全方位、多层次的运动控制系统。代理产品有:






回复查看更多产品资讯

回复1或松下查看:松下产品信息

回复2或TOYO查看:台湾东佑达产品信息

回复3或步进查看:步进电机产品信息

回复4或电缸查看:大雅电缸产品信息

回复5或视觉查看:视觉检测相关信息

回复6或运动查看:运动控制器/卡相关信息

Tel:0755-27833360  27857851

官网:www.stonker.com.cn

微信号:zhikongkeji



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-4-27 14:54 , Processed in 0.050301 second(s), 27 queries .

快速回复 返回顶部 返回列表