PLC-串口通信实例

随着微电子及控制技术的不断发展,PLC已逐渐成为一种智能型、综合型控制器,由PLC构成的集散控制是现代工业控制的一个重要组成部分。PLC具有使用简单方便,故障率低,抗干扰能力强等优点;但同时,数据的计算处理与管理能力较弱,且无法提供良好的人机界面。将计算机与PLC结合起来,可使两者优势互补,充分利用计算机友好的人机界面,实现人机对话和监控功能,并可进行一定的辅助决策,组成高性能价格比的控制系统。实现计算机与PLC结合的控制系统的关键之一是二者之间的通信。

    本设计选用三菱FX2N系列的PLC,以Visual c++6.0作为开发工具对PLC通讯主程序进行设计,串口通讯采用ActiveX控制Microsoft Communication Control 6.0,最后用PLC编程电缆将PLC编程口与计算机串口连接进行调试。

1 三菱PLC与计算机之间通信协议

    串行通信是指外设和计算机间使用一根数据信号线一位一位地传输数据,每一位数据都占据一个固定的时间长度。“串行”是指外设与接口电路之间的信息传送方式,CPU与接口之间仍按并行方式工作。串行通信的四个重要参数:波特率(衡量通信速度的参数)、奇偶校验位(一种简单的检错方式)、数据位(衡量通信中实际数据位的参数)和停止位(表示单个数据包的最后一位)。

    (1)三菱FX2N系列通信数据帧格式

    FX2N系列的PLC与计算机之间的通信采用RS-232C标准,其传输速率一般设为9 600 bps,实际传输过程还可设其它,比如115 200 bps等。奇偶校验位采用偶校验。数据以帧为单位发送和接收。一个多字符帧由起始字元、命令号码、元件首地址、结束字元、和校验五部分组成,其中和校验值是将命令码STX—ETX之间的字符的ASCII码(十六进制数)相加,取得所得和的最低二位数。STX和ETX分别表示该字符帧的起始标志和结束标志。

    起始字元(STX):ASCII码的起始字元STX对应的16进制数位0x02。无论命令信息还是回应信息,它们的起始字元均为STX,接收方以此来判知传输资料的开始;

    命令号码:为两位16进制数。所谓命令号码是指上位机要求下位机所执行的动作类别,例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息中,下位机会将上位机接收到的命令号码随同其它信息一同发送给上位机;

    元件首地址:对应要操作的元件的相应的地址。如从D123单元中读取数据时,要把它对应的地址:0x10F6发送给PLC;

    元件个数:一次读取位元件或字元件的数量;

    结束字元(ETX):ASCII码的结束字元ETX对应的16进制数为0x03。无论命令信息还是回应信息,它们的结束字元均为ETX,接收方以此来判知此次通讯已结束;

    校验码(Checksum):校验码是将STX—ETX之间的ASCII字元的16进制数值以"LRC(Longitudinal Redundancy Check)"法计算出1个Byte长度(两个16进制数值00-FFH)的校验码。当下位机接收到信息后,用同样的方法计算出接收信息的校验码,如果两个校验码相同,则说明传送正确。

    (2)三菱FX2N系列通信命令

    FX2N系列PLC有4个通信命令,它们是读命令(30H)、写命令(31 H)、强制通命令(37H)、强制断命令(38H)。

    (3)三菱FX2N系列通信控制字符

    ENQ(ASCII代码05H):计算机向PLC发送请求;

    ACK(ASCII代码06H):PLC对ENQ的确定回答;NAK(ASCII代码15H):PLC对ENQ的否认回答;

    STX(ASCII代码02H):报文开始;

    ETX(ASCII代码02H):报文结束。

    (4)FX2N系列设备地址

    ①读写时的软设备地址

    S0-S7:0000H;X0-X7:0080H;Y0-Y7:00AOH;TO-T7:00COH;M0-M7:0100H;CO-C7:01COH;DO-D7:1000H

    ②置位/复位时的软设备地址

    S0-S7:0000H;X0-X7:0400H;Y0-Y7:0500H;TO-T7:0600H:MO-M7: 0800H;CO-C7:0E00H;DO-D7:0100H

    ③传输过程

    PC机与FX系列PLC之间采用应答方式通信,传输出错则组织重发。其传输过程如图1所示。

传输过程

图1传输过程

    PLC根据PC机的命令,在每个循环扫描结束处的END语句后组织自动应答,无需用户在PLC一方编写程序。

2 系统功能设计

    系统主要实现PLC与计算机的通讯,具体主要完成PC机指令下传、监测PLC状态、接收PLC信息等功 能。系统组成:小型PLC一台、RS232串口、编程电缆、通讯界面。主操作界面在完成系统功能的前提下,力求明了直观,操作简单灵活方便。系统以VC++6.0为平台,设计的界面如图2所示。

系统界面

图2 系统界面

本程序设计了四个串口可供选择,只有在选择串口之后才可进行“打开串口,关闭串口”的操作,当打开串口以后,就可以对PLC进行相应的操作了,为了使界面整洁干净,特别设计了“清空发送区”和“清空接收区”选项,当发送数据和接收数据放满编辑框时只需点击这两个按钮,数据就会清空。且实现代码相当简单,m_sSend.Empty()、m_sReceive.Empty()就可轻松实现这一任务。

 

    PC机与PLC的通讯程序流程图如图3所示。

PC机与PLC的通讯流程图

图3 PC机与PLC的通讯流程图

    系统通信控制程序采用了MSComm控件。此控件提供了两种通信方法:①文件驱动,即用MSComm控件的OnComm文件捕获并处理通信事件和错误,它是处理串行端口交互作用的一种非常有效的方法;②查询方式,通过查询串口属性来获得事件和错误,实质上还是属于事件驱动,但在有些情况下显得更为便捷。MSComm6.0控件的属性:①CommPort,设置或返回通信端口号;②Settings,以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位;③PortOpen,设置或返回通信端口的状态,也可以打开和关闭端口;④Input,返回和删除接收缓冲区中的字符;⑤InputMode,设置或返回Input属性取回的数据的类型,数据取回的形式为字符串或二进制数据的数组;⑥CommEvent返回最近的通信事件或错误的数字代码,通信程序设计时可以根据该属性值执行不同的操作,在运行时为只写;⑦Output,将字符串写入发送缓冲区。

    MSComm6.0控件只有一个事件,即Oncomm事件。在通信时如果发生错误或者事件,将会引发Oneomm事件并且改变其属性值,通过GetCommEvent()可获得Oncomm产生事件或错误的代码。在与PLC进行通信的过程中,使用MSComm6.0控件可以自动完成PLC对计算机发送信息的接收,最终实现PC机对PLC的状态检测。

    软件实现过程:FX2N系列的PLC与计算机之间的通信采用RS-232C标准,其传输速率固定为9 600bps,奇偶校验位采用偶校验。数据以帧为单位发送和接收。PC机向PLC中写数据时首先需对串口进行初始化,并对波特率、校验位等进行设置,然后根据通信协议对PLC进行相应的读写、复位、置位等操作,PLC根据PC机送来的控制字进行相应的操作。数据发送,采用专用发送指令XMT TABLE,CommPort,其中TABLE为发送缓冲区的首地址,首地址中保存要发送的字节数,即数据长度,最大为255,其后的地址中保存要发送的数据,CommPort指定用于发送的端口。对于数据接收,使用接收指令RCV TABLE,CommPort,接收指令激活初始化或结束接收信息,通过制定端口接收信息并存储于数据缓冲区中,数据缓冲区的第一个数据指明了接收的字节数。

3 系统功能验证

    将计算机用通讯电缆与PLC相连后,首先发送请求05H以后,验证计算机与PLC是否可以正常通信,接收区显示06,表示PLC对ENQ的确定回答,即PLC已准备好,可以进行下面的操作,具体如图4和图5。

    这里主要对PLC读值功能进行验证。读操作命令格式如下:

    STX—CMD0一数据段一ETX—SUMH—SUML

    在按上述命令格式发送相应的代码后,就可直接读取PLC响应的信息了。响应信息格式如下:

    STX—DATA—ETX—SUMH—SUML

    图6和图7分别是对PLC进行读值验证时发送数据和接收数据的显示。

 发送数据显示

图6 发送数据显示

接收数据显示

图7 接收数据显示

    其中接收数据显示中的023030033633,是对x软地址值(0080H)读取后接收到的数据。具体算法如下:

    nSUMLx=(0X30+0X30+0X03)%16=3<9,

    nSUMHx=((0X30+0X30+0X03)%256)/16=6<9,

    nSUMLx=0x30+nSUMLYl=0X33,

    nSUMHx=0X30+nSUMHY2=0X36

    故,转变成两字节ASCII代码SUMLx=33;SUMHx=36。

    理论分析和实际操作的结果是一致的,即证明了本设计是准确无误的。

4 结语

    本文主要使用Visual C++6.0作为开发工具,通过编写各个模块对应的操作程序,最后用通讯电缆将PC机与三菱PLC相连进行调试,基本上达到了预期的设计目标,实现了计算机与PLC的通信功能。

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对不起,我无法提供实际的代码示例。然而,我可以向你解释如何使用台达PLC与Modbus-RTU进行通信,并给出一些基本的概念。 首先,确保你已经连接好了Modbus-RTU通信模块,并且了解PLC的通信参数(例如串口设置、波特率、数据位、停止位等)。 下面是一个简单的伪代码示例,展示了如何使用Modbus-RTU协议与台达PLC进行通信: ```python import minimalmodbus # 创建Modbus instrument对象 instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 1) # 请根据实际情况修改串口名称和从站地址 # 配置通信参数 instrument.serial.baudrate = 9600 instrument.serial.bytesize = 8 instrument.serial.parity = minimalmodbus.serial.PARITY_NONE instrument.serial.stopbits = 1 # 读取保持寄存器的值 register_address = 0x0000 # 请根据实际情况修改寄存器地址 num_registers = 1 # 请根据实际情况修改读取的寄存器数量 value = instrument.read_registers(register_address, num_registers) # 写入保持寄存器的值 register_address = 0x0000 # 请根据实际情况修改寄存器地址 value_to_write = 1234 # 请根据实际情况修改要写入的值 instrument.write_register(register_address, value_to_write) ``` 请注意,这只是一个伪代码示例,你需要根据实际情况修改串口名称、从站地址、寄存器地址、通信参数和要读写的值。 在实际应用中,你需要根据你的PLC型号和Modbus-RTU通信模块的规格,使用相应的库或软件来进行通信。台达PLC通常有自己的通信库,你可以查找相关的文档和示例代码以获得更准确的信息。 希望这些信息能对你有所帮助!如果你有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值