EL6002模块简介
EL6002模块是倍福推出的满足ANSI/EIA/TIA-232-F标准的串行通信接口模块,该模块提供2个相互独立的串行口可供用户使用,两个串行接口可独立配置,互不影响,EL6002的两个串口之间是电气隔离的,串口与EtherCAT口之间也是电气隔离的,所以其中一个串口损坏的情况下是不影响另一个串口使用。
EL6002的针脚定义
EL6002采用DB9接口,其针脚定义符合下图所示,实际常用的针脚就是2脚Rx,3脚Tx,5脚GND。EL6002支持流控功能(RTS/CTS)且在官方出厂设置中是默认开启的,如果终端设备不支持流控功能(很多串口的设备例如传感器都没有配备流控功能)此时一定要关闭该功能,否则无法收发数据!
流控功能的关闭在COE-Online选项卡里操作,如下图所示
EL6002模块的参数设置
在串口通信时,一般重点关注设备的波特率和数据位的设置,在EL6002中,这两个参数可以从如下两个位置设置,注意,只能在设备在线的时候,这个设置才会生效,图片展示的是Online下的,使用时,一定要保证设备是Online Data的状态
EL6002模块所用到的库
EL6002模块是RS232串口,在测试的时候可以采取自发自收的形式,把2脚和3脚短接就可以了,使用串口通信的时候需要用到PLC的串口通信库Tc2_SerialCom,该串口库提供了自由口编程所需要的基本操作函数和功能块及结构体,对于自有协议的终端设备可以很方便地按照厂家的协议实现对应的功能,其中常用的几个功能块如下图所示,其中Background Communication下的SerialLineControl是用来控制串口硬件的,一般放在一个单独的Task中运行,且运行周期要快于PLC的Task(假如我们把串口的用户程序放在PLC的Task中运行的话),为了在115200的波特率(假定为8N1的配置下)下每个周期都能传输22byte的数据,建议运行周期设置为1ms(具体的计算方式可查看倍福的官方文档,这里不作为重点讲解,低于这个波特率例如9600时运行周期可以改大些)Send+Receive下的功能块是用来收发数据的,ReceiveByte可以收byte类型,SendByte可以发送byte类型的数据,其他的函数功能类似,特别指出的是,ReceiveData一般用来收发一组数据(支持int,real等等类型),配合数组和取地址符(ADR()使用),可以很灵活地应对各种应用场景。
EL6002示例程序
这里以自发自收一组SINT数据为例,SINT为有符号整型(signed integer),在内存中占用8个bit位,首先需要在GVL文件夹下新建一个全局变量列表,如下图所示,并在全局变量列表中填入以下内容
然后在POU文件夹下新建一个程序(PRG),命名为BACKGROUND,内容填入以下代码
在MIAN程序中写入以下代码,该代码用来发送一个内含4个SINT类型的数据,并把接收的数据存放到nDataToBeReceived数组中。
然后新建一个Task,命名为SerialComBackGroundTask,周期(Cycle ticks)设置为1ms
为该Task分配程序BACKGROUND
完成以上工作后,先点击“生成->生成解决方案”对程序进行编译,然后激活配置(Active Configuration)下载到控制器中运行即可。
示例程序已打包,可在如下链接中下载
链接: EL6002示例程序