S7-200系列PLC中的自由口通信是一种比较灵活的通信,相对而言其通信程序的设计难度也会更大点,有很多人问,设计自由口通信有没有什么设计思路可供参考,接下就简单分享下本人认为的自由口通信程序的设计思路,仅供大家参考。
这里以S7-200PLC通过三菱的专用通信协议控制三菱的变频器,实现对变频器的运行及频率修改以及变频器状态监视为例,说明自由口通信程序设计时的一个完整过程。
一、 编写前期准备工作:
分析通信协议,根据通信协议准备需要发送的数据,确定接收信息时使用何种方式作为消息的起始条件和结束条件的判断方式,确定校验的算法,并设计校验的功能块程序。
1) 根据通信协议,准备需要发送的数据和回传数据的格式。三菱专用通信协议格式如下所示。
PLC写入到变频器的数据格式:
发送:
回传:
PLC从变频器中读取数据的数据格式:
发送数据的数据格式:
回传数据格式:
正确回传:
错误回传:
校验:
指令代码:
根据以上通信协议的描述,我们可以准备如下的通信用数据:
根据通信协议准备好的数据格式,确定接收信息时的起始条件和结束条件的判断及通信校验程序的设计。
从上面通信协议及准备好的通信的数据中,可以发现回传的信息中并特定的字符作为消息的起始和结束条件,因此在此可以使用空闲线作为消息的起始条件判断,使用消息定时器作为消息的结束条件的判断。
对于校验程序的算法使用的是对从站好开始的ASCAII所对应的十六进制数相加,然后取其低八位数据在转换成ASCAII作为校验码,依次根据算法可编写一个对应的校验功能块的子程序
功能码作用
启动Modbus事务处理的客户机创建Modbus应用数据单元。功能码(PDU中的)向服务器指示将执行哪种操作?
用一个字节编码Modbus数据单元的功能码域。有效范围是十制制1-255(128-255为异常响应保留)。当从客户机向服务器发送报文时,功能码域通过服务器执行哪种操作?
从客户机向服务器发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。这个域还包括离散项目和寄存器地址、处理项目的数量以及域中的实际数据字节数。
在某种请求中,数据域可以是不存在的,在此情况下服务器不需要任何附加信息。功能码仅说明操作。
功能码的类型
功能码主要分为有效功能码、异常功能码和错误功能码。
如果在一个正确接收ModbusADU中,不出现与请求Modbus功能有关的差错,那么服务器至客户机的响应数据会包含请求中的正常功能码。如果出现与请求Modbus功能有关的差错,那么响应数据会包含一个异常码和错误码。
例如,客户机能够读一组离散量输出或输入的开/关状态,或者用户能够读/写一组寄存器数据内容。当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或出现某种差错(称为异常响应)。对于一个正常响应来说,服务器仅对原始功能码响应。
对于异常响应,服务器返回一个与客户机等同的码,设置该原始功能码的高有效位为逻辑1,并加该异常码后增加错误码,以通知客户机异常原因。
有效功能码
有效功能码有二十几种,但是一般使用上都以1、2、3、4、5、6、15、16等八种为常用,以及另外特殊使用的20、21两种,此为GeneralReferenceRegister,绝大部份的Modbus设备并不会提供此Register。于PLC上主要的控制数据有下列四种型式。此八种功能码就是处理这些控制资料,详细说明如下各点:
控制数据四种型式:
DI:DigitalInput(数字输入,离散输入),一个地址一个数据位,用户只能读取它的状态,不能修改。以一个 bit表示On/Off,用来记录控制信号的状态输入,例如:开关,接触点,马达运转,超限switch等。于PLC上被称为Inputrelay、input coil等。
DO:DigitalOutput(数字输出,线圈输出),一个地址一个数据位,用户可以置位、复位,可以回读状态。以一个 bit表示On/Off,用来输出控制信号,以激活或停止马达,警铃,灯光等。于PLC上被称为Output relay、Outputcoil等。
AI:Analog Input(模拟输入,输入寄存器),一个地址16位数据,用户只能读,不能修改,,以16 bitsinteger表示一个数值,用来记录控制信号的数值输入,例如:温度、流量、料量、速度、转速、文件板开度、液位、重量等。于PLC上被称为Inputregister。
AO:AnalogOutput(模拟输出,保持寄存器),一个地址16位数据,用户可以写,也可以回读,以16 bitsinteger表示一个数值,用来输出控制信号的数值,例如:温度、流量、速度、转速、文件板开度、饲料量等设定值。于PLC上被称为Outputregister、Holding register。