做为博途的硬件,1200和1500本体都不具有串口通讯功能,只能使用扩展板或是通讯模块完成。
其中1200使用CB1241或CM1241进行串口通讯,本文将使用CM1241进行演示。
1、硬件介绍
1200的PLC一台,有意思的板子(以下简单4D板)一台。
其中1200带扩展模块CM1241 RS232;4D板使用标准的MODBUS_RTU 通讯。
因此,需要将CM1241上RS232公头口转化为RS485,我们使用了一个转换器将RS232口转化为RS485,型号是DT-9001;
关于板子及其通讯的介绍详见下方链接文章:汇川ESAY系列之串口MODBUS主站通讯(有意思的与外设IO板)_汇川easy串口0是那个-CSDN博客
2、PLC侧编程
关于此类编程可先使用调试助手调试一遍,再与硬件配合,这样可以方便的查看程序中的错误,以以发送出的字节。
2.1、新建项目。
在新建项目中添加设备时添加1200PLC,同时在“属性”/“以太网设置”中设置“IP地址”,新建“子网”,开启“系统和时钟存储器”。都是习惯性的操作。对CM1241进行端口设置。
注意CM1241使用的硬件标识符,在编程时会使用到。
2.2、设置变量,取消勾选“优化的块访问”
2.3、创建UDT数据类型(可选),以方便后续编程。将MODBUS_RTU指令使用的管脚全部放入UDT中,程序中使用哪个就调用哪个。
2.4、程序
VARMB_COMM_LOAD_Instance {S7_SETPOINT := 'True'} : MB_COMM_LOAD;MB_MASTER_Instance {S7_SETPOINT := 'True'} : MB_MASTER;//主站的多重实例名称Mb : "MODBUS_RTU";//声明了DTU(PLC自定义数据类型)//数据处理mbDataSendOrRCV1: Array[1..50] OF Word := [50 (())]; (*MB发送或是收到的数据*)arrMiddleBool: Array[1..50] OF Bool := [50 (())]; (*将需要发送的数据拆成布尔数组*)arrMiddleBoolR : Array[1..50] OF Bool := [50 (())]; (*将收到的数据转换布尔数组*)diSendData : Array[0..2] OF DWord; (*0人工输入的数据(处理前)1临时变量,2收到的数值*)diRcvData : DWord; //收到的数值,对应diSendData【0】;diMbSendData : Array[1..50] OF Word;iIndex : Array[0..10] OF Int; //程序中使用的所有索引值都从此数组中引用;byTimer : Byte; //4D板子的延时IEC_Timer_0_Instance {S7_SETPOINT := 'True'} : TON_TIME;bVar : Array[0..1] OF Bool;