我们这到各厂家的PLC为提高自己PLC的核心竞争力,在简单的输入输出模块的基础上有了一些功能模块,其中的Modbus通信功能模块就是一大亮点,因此我们本期的擂台的题目就是,就各位熟悉PLC厂家的Modbus模块做相关的介绍,以及该厂家Modbus模块用在一个简单的实例中的相关的设置和程序的编写,介绍的越详细,设置越想尽的获大奖!
PLC的类型任意选择,回答的最好最完全的,原创最多,阐述最详细,程序越准确者获一等奖!
工控PLC擂台每周一期,本期待103期结束一周后结贴。奖项设置:一等奖1名:50~100MP,二等奖5名:10MP,三等奖10名:50积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换
MODBUS协议应该说是目前使用最广泛的一种协议,从变频器到各类仪表都将支持MODBUS协议作为首选。各类组态软件以及触摸屏也都支持此协议,矩形科技的PLC的地址也是按照MODBUS协议来分类。这样可以那边和各家的组态以及HMI连接。
MODBUS协议将变量分为4种数据类型的变量,分别是0类型变量,1类型变量,3类型变量,4类型变量,分别0xxxx变量对应于线圈(输出以及中节点);1xxx变量为输入节点(DI点);
3xxxx变量为输入寄存器,一般为模拟量输入;4xxx变量为保持性寄存器,一般为模拟量输出寄存器和辅助寄存器。
那么因此我们也可以知道,1XXX,3XXX变量是只能读的,不能写的,0xxxx,4xxxx是可读可写的。
另外基于串口的MODBUS协议又分为MODBUS RTU,以及MODBUS ASCII,MODBUS ASCII的效率要低很多,基本同样的协议,数据量要大一倍。将一个数据分解成2个ASCII传送。
基于以太网的MODBUS协议称为MODBUS/TCP,国际互联网组织给工控领域唯一指定分配端口的就只有这个协议了(502端口)(很NB吧)。
有了前面的引入,就可以来编程了。MODBUS 协议可以大致的分为读和写2类型的命令。
但是针对不同的命令又有不同的功能码。
具体的MODBUS协议的命令组成如下:站地址+功能码+数据+效验组成(CRC16)
具体的可以看看MODBUS的协议。
矩形科技的MODBUS功能块应该是业内(国内、国际品牌)小PLC中最早开始做MODBUS功能块以通讯功能块的公司。我们在04年实现MODBUS标准功能块以及通讯的自由通讯指令。
矩形的MODBUS指令设置相当简单,上节点设置读或者写(0表示读,1表示写)。中节点设置站地址,从1-255(0一般为广播地址)。下节点设置需要读或者写的来源数据和目标数据的类型以及地址偏移,另外还有通讯的状态指示。占用6个寄存器,其中5个需要设置,1个为状态显示,无需设置。参数说明如下:
一个写操作的程序:上节点=1为写,中节点=2为站地址2,将主站0类型变量1地址开始写入2号站地址设备的0类型变量中,从1地址开始,数量是16个,如通讯故障可重试5次。就是将PLC的0001~0016的数据写入到对方的00001-000016中。串口操作为第三个串口。
看看一个MODBUS读的指令:上节点=0为读,中节点=1为站地址1,将从站4类型变量1001H地址开始读到PLC,存放在PLC的4类型变量的400地址开始,数量是10个,就是将对方的44097(1001H=4097)到44106的变量读入到PLC的40400到40409中。串口操作为第二个串口
当然在开始通讯之前,必须确定波特率,校验、停止位等一致。这个可以用SADDR指令配置。另外,是通讯那个串口操作是需要指定的,矩形的PLC一般有4个串口,可以通过通讯功能块的I2,I3组合来确定串口号。还有需要注意的,MODBUS主站是没有站地址概念的,从站才有。下面再介绍一下通过以太网如果通讯,实际的功能块参数很类似。
首先也需要配置IP地址和站号对应上,功能块和串口的类似。设置2个IP地址为从站2和从站3
主站(PLC)将40001~40016的数据写到从站2(192.168.1.152)的40001~40016中
上图的读说明:将从站3(IP地址192.168.1.153)40001~40016的数据读入到主站PLC,存放在40100~40015中。
最后一点需要注意的就是标准的MODBUS协议地址是从1开始的,但是有的设备的说明是从0开始,有可能地址需要+1或者-1来2者对应。自由通讯协议来实现MODBUS协议,则需要将MODBUS的协议了解很充分。
下面的程序图是站地址=02,功能码= 03(读保持型寄存器),地址= (03 E7H)长度=00 20的程序。通讯长度为8个字节。
三菱FX3U利用M485BD通讯模块与 MODBUS 设备通讯
在 Modbus 架构中,一个回路顶多一个 Master (主站),其余为 Slaver (副站),主要连接方式为 RS-485 通讯接口。
选择为 Slaver ,(表示把 FX3U PLC 当 Modbus 表头,缓存器地址当(modbus地址)只要撰写简单程序即可。但只可用 MODBUS 通讯格式,无法与其它通讯格式混用。 FX3U-M485BD实物图
Slaver 时:
D7900 = 1 (工作模式1:只能读写D缓存器 FUNCTION CODE = 3、4、6、10)
D7901_bit15... bit8 = MOD_BUS 站号 (0... 255)。
D7901_bit7... bit4 = MOD_BUS baud_rate。 (0 = 115200, 1= 57600,2 = 38400,3 = 19200, 4 = 9600, .... 9 = 300) D7901_bit3 ... bit0 = MOD_BUS format ( 2 = 8n1, 5 = 8o1,6 = 8e1, 7 = 8n2) Ex: D7901 = 0132H (#1,19200,8n1)
D7902 = MOD_BUS 有效启始位置 (0...7999)。
D7903 = MOD_BUS 有效结束位置 (0...7999)。
D7904_BIT5...BIT0 = MOD_BUS 长度限制 (1...60)。 D7904_BIT6 =1 (启动:状态缓存器 D7910、D7911)。 D7904_HIGH_BYTE = 通讯逾时 (timeout) 时间 (1... 255 x 50msec)。 (超过此时间,没有任何通讯,LED3 会亮起,且 D7911 的 BIT_8 会为 1) Ex: D7904 = 0ABCH (timeout = 10x50msec = 500msec,长度限制 = 3ch = 60 words)
D7910_HIGH_BYTE = MOD_BUS 通讯次数。 D7910_LOW_BYTE = MOD_BUS 通讯异常次数。
D7911_LOW_BYTE = MOD_BUS FUNCTION CODE (normal = 3, 4, 5, 6, 8, 10H)。 = MOD_BUS FUNCTION CODE (error = 83h, 84h, 85h, 86h, 90H)。 = MOD_BUS FUNCTION CODE (error = 00 ==> timeout)。 D7911_BIT8 = 通讯逾时旗标。例如:站号:1,通讯格式:(9600、8、NONE、1),起始地址:D0 ~ D500 当 MODBUS 地址,长度限制:60。
FX3U PLC 程序撰写:
接线:
1. FX3U-M485BD 端子脚位定义端子
-1 : MOD_BUS_MASTER TR+端子
-2 : MOD_BUS_MASTER TR-端子
-3 : MOD_BUS_MASTER/PC SG端子
-4 : PC TX端子
-5 : PC RX
2. FX3U-M485BD -CN3(ADP PORT)
CN3-1 : TX
CN3-2 : RX
CN3-3 : SG
FX3U-M485BD -CN3(ADP PORT)可接人机界面(HMI) 或 GPPW 软件。
OMRON PLC
Modbus协议
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。
两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
·十六进制,ASCII字符0...9,A...F
·消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
·1个起始位
·7个数据位,最小的有效位先发送
·1个奇偶校验位,无校验则无
·1个停止位(有校验时),2个Bit(无校验时)
错误检测域
·LRC(纵向冗余检测)
2、RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统
·8位二进制,十六进制数0...9,A...F
·消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
·1个起始位
·8个数据位,最小的有效位先发送
·1个奇偶校验位,无校验则无
·1个停止位(有校验时),2个Bit(无校验时)
错误检测域
·CRC(循环冗余检测)
ASCII模式
:地址 功能代码 数据数量 数据1... 数据nLRC高字节 LRC低字节回车 换行
RTU模式
地址功能代码 数据数量 数据1 ... 数据nCRC高字节 CRC低字节
定时中断
校验计算调用子程序
异或子程序
前几年搞过一个项目,要求对在线运动中的钢管进行探伤、测长外,还要增加对钢管重量的测量。用户要求PLC应选用S7-300,由工控机显示实时数据报表等。所用电子秤由用户提供,由于用户提供的电子秤与组态王无通讯协议,故选用通讯模块CP340,进行电子秤与PLC之间的数据传递。设计时按CP340的使用说明对PLC进行硬件设置与编程,其硬件设置见下图:
数据传递与ASCII码转换为BIN码的编程说明:
由于该探伤设备的控制内容很多,其编写程序很长,故本文只摘取与通讯有过的程序供大家参考。由于CP340与PLC通讯仅为接受称重数据。故程序仅调用CP340的FB2接收功能块,见下图:
其传递来的称重数据地址为:DB20.DBD4,该数据为ASCII码,原想直接将ASCII码数据由PLC传递给组态王,再由组态王将ASCII码转换为BIN码存入报表。可是查了组态王的命令语言函数,没有找到将ASCII码转换为BCD码的命令语句,又考虑如在组态王里编程进行转换,从运行速度上要比在PLC慢,故在PLC中,对接受的ASCII码的数据进行BIN码转换编程。称重数据是6位ASCII码,通过编程将6位ASCII码转换为BIN码送入DB1.DBD316,再由PLC上传给组态王。请见下面程序:
程序说明:
网络39为按读取指令将称重数据送入MD112:其T53为读取称重数据的命令信号,当被测钢管拨到称重位置时,使其架下的到位接近开关闭合,输入PLC的输入端,使其产生T53读取信号,其信号脉宽>钢管到位的摆动时间,用其后沿读取数据,避免读数的波动,确保度数准确。
网络40~44为将ASCII码(MD112)转换为BIN码(DB1.DBD316):现将ASCII码转换为BCD码,在通过”BCD_DI”指令将BCD码转换为BIN码(DB1.DBD316),由PLC上传给上位机(组态王)。
就写到这,谢谢大家。
HONEYWELL PLC --- MasterLogic 200
MODBUS通讯依据硬件分为MODBUS RS-232(9针、25针连接)、RS-485/422(双绞线连接)、MODBUS TCP(5类双绞线)。
MODBUS通讯的基本参数有:(所有的参数在每个节点上设置必须一致。)
1. 波特率:简单的说,就是约定数据发送、接收的快慢。
2. RTU/ASCII:定义数据类型,就是说明报文中的数据是ASCII代码 / 还是数。
3. 奇偶校验:利用校验码可以判断数据在传输过程中有没有被修改。在数据发出的一方先将传输的数据按照约定的规则计算得到一个校验码,并且随着数据一起发送出去。报文到达接收方以后又会将报文按照约定的规则对数据重新计算得到一个新的校验码,并且与报文中的旧校验码比对,校验码一致则表示数据正确。如果在通讯过程中有干扰使得前后数据不一致则新、旧的校验码也不一致,说明这个报文中的数据不是真正的数据,则报文无效。
4. 从站地址:在1:N的网络中,一个主站要与多个从站进行数据交换,所以每个从站必须有唯一的从站地址。注:主站没有地址。
以下介绍的是如何数据交换:
在PLC中的数据类型基本分为4种:(实际上就是4个数组。)
1. 状态量只读:如 DI 类型,它的数据是由现场的按钮、接近开关等设备决定的,我们只能读取状态而不能在软件中修改。在MODBUS通讯中规定这样的数据表为100001-199999。注意第一位的 1 是数据类型,后面的才是数据地址。
2. 状态量可读、可写:如继电器的状态,我们可以读取继电器线圈状态,同时在某一时刻也可以发出指令修改它的状态。这样的数据表为000001-099999。
3.模拟量只读:同样的模拟量也有只读:模拟量输入 -- AI点。 数据表为300001-399999。
4.模拟量可读、可写:对于PID的设定值,我们既要读取当前 SP 的数据,同时我们也可以修改它。这种类型的数据表为400001-499999。
作为从站,MODBUS地址定义:(即MODBUS地址与内部的地址映射。)
在Honeywell PLC中指需要将中间变量 M 寄存器中的某一地址段作为数据交换的寄存器就可以了。所以仅仅需要定义起始地址。
至此MODBUS通讯作为从站就设置好了。
--------------------------------------------------------------
同一个通讯端口也可以设置为主站节点:
1. 在这里选择需要应用P2P功能块,见上图的Active mode 的 Channel 2设置。
2. 选择任何一个P2P块,双击选择Snet(即串口网络)连接具体的硬件安装位置。
3. 在一块通讯卡上有2个通道,都可以设定为主站、从站、或者混合型,截图就是混合型的。
4. 下图的设置参数介绍,CH:即上图的通讯端口;Tigger Flag:上升沿即发出一个通讯的报文(发出这条指令),这里用了1秒的方波;Setting:定义MODBUS地址映射到控制器的内部地址。白底色是必填项;灰底色部需要组态。
至此PLC作为主站与其它的设备用MODBUS通讯的设置就完成了。
-------------------------------------------------------------------------------------------
从截图上我们可以看到还有一项:User frame definition 这是帧自定义的组态,就不叙述了。
-------------------------------------------------------------------------------------------------------
在帧监视功能下,可以看到报文的收、发数据(红色表示主站收到的报文)。
谢谢大家