本文讲述如何利用node-red与欧姆龙CP1H进行以太网连接,读取PLC地址数值或多个读取,网页效果图如下。
网页效果图如上,下面开始讲解图上功能该如何制作,首先准备一个欧姆龙PLC,型号为CP1H,该型号图示如下。
接通电源,如下图示。
本型号没有内置以太网接口,需添加模块,模块型号为CP1W-CIF41。
添加模块后可以自行设置模块IP地址,本文模块IP地址为192.168.1.10。
说明:本型号PLC在添加模块后,需先用数据线直连通讯,找到D32455和D32456这两个寄存器中的十六进制数并转换成十进制,如模块插在选件板插槽1需查看D32155和D32156,还需要注意选件板插在插槽1位置要把DIP#4往右拨,插在插槽2位置需把DIP#5往右拨,找到寄存器中十六进制转换成十进制后可以进入网页设置或更改地址,如本文地址为192.168.1.10那么网页地址为入http://192.168.1.10/C00.htm,设置完成后在换成网口通讯。
网口通讯完成后,我们在程序里写几条程序方便读取数值,如下图示。
由于作为案例来使用,写了几条简单的数据转移指令,也可以自行写指令。
程序下载通讯完成后,打开node-red。
打开node-red后,需先添加几个节点,节点为(node-red-dashboard,node-red-node-ui-table,node-red-contrib-omron-fins),如下图示。
下载完成后,拉出第一个节点。
打开【text input】节点,在【group】栏点击右侧画笔新增群组,如下图示。
点击画笔进入【dashboard group】节点,在【name】栏输入【IP地址】,【tab】栏点击右侧画笔新增一个标签,如下图示。
点击【tab】画笔进入【dashboard tab】配置,在【name】输入【PLC测试】,在【lcon】栏输入【dashboard】,如下图示。
点击右上角的【更新】按钮,回到【text input】节点把该节点配置完成,在【label】栏输入【IP地址】,在【mode】栏选择【text input】,【topic】栏属性值为【msg.topic】,如下图示。
拉出第二个节点。
【change】节点为node-red自带节点,可以在【功能】节点工具箱找到,打开【change】节点,点击左下角的【添加】按钮新增一条属性框,选中【设定】,属性值为【flow.plc】to the value【msg.payload】,如下图所示。
拉出【button】节点。
打开【button】节点,在【group】栏选中之前配置的【[plc测试]IP地址】,在【label】栏输入【连接PLC】,【payload】属性值为【flow.plc】,【topic】属性值为【msg.topic】,如下图所示。
拉出【function】节点。
【function】节点能够在【功能】节点工具箱中找到,打开【function】节点,在【名称】栏输入【函数1】,代码如下图所示。
拉出【fins controal】节点。
打开【fins control】节点,在【name】栏输入【用于控制目的】,在【connection】栏点击右侧画笔进入【fins connection】节点进行连接设定,如下图所示。
进入【fins connection】节点,在【protocol】栏选择【tcp】网络通讯,【mode】栏选择【cp】型号,【host】栏输入PLC IP地址,【port】栏输入端口号,【ICF】栏输入【0x80】,【DA1】栏输入IP地址最后几位数,【SA1】栏输入【179】,如下图所示。
点击完成回到【fins control】节点,在【output property】属性值为【msg.payload】,【command】属性值为【msg.topic】,【</>Connect opts】栏属性值为【msg.options】,如下图所示。
再次拉出【button】节点
打开【button】节点,在【group】栏选择【[PLC测试]IP地址】群组,【label】栏输入【断开PLC】,【topic】栏属性值为【msg.topic】,如下图所示。
再次拉出【function】节点。
打开【function】节点,在【名称】栏输入【函数2】,输入以下代码。
拉出【text】节点。
打开【text】节点,在【group】栏选择【[PLC测试]IP地址】,【label】栏输入【状态】,【value format】栏属性值为【{{msg.stat}}】,如下图所示。
再次拉出【text】节点置于【连接PLC】节点后方。
打开【text】节点,在【group】栏选择【[PLC测试]IP地址】,【label】栏输入【PLC地址】,【value format】栏属性值为【mag.payload】,如下图所示。
把【函数1】节点跟【状态】节点相连,【函数2】节点跟【用于控制目的】节点相连,如下图所示。
拉出【inject】节点跟【状态】节点相连。
打开【inject】节点,属性值条件为【msg.payload】=【时间戳】,如下图所示。
另起一行,拉出【text input】节点。
打开【text input】节点,在【group】栏点击右侧画笔再次新增一个群组,进入【dashboard group】节点,在【name】栏输入【读取内存地址】,【tab】栏选择之前建好的【PLC测试】标签,如下图所示。
【dashboard group】节点新增好后点击更新回到【text input】节点,在【group】栏选择刚刚建好的【[PLC测试]读取内存地址】群组,在【label】栏输入【内存地址】,【mode】栏选择【text input】,【topic】属性值为【msg.topic】,如下图所示。
拉出【change】节点。
打开【change】,选择【设定】,属性值条件为【flow.address】to the value【msg.payload】,如下图。
拉出【button】节点。
打开【button】,在【group】栏选择【[PLC测试]读取内存地址】群组,【label】栏输入【读取内存】,【payload】栏输入【flow.address】,【topic】栏输入【msg.payload】,如下图所示。
拉出【fins read multiple】节点。
打开【fins read multiple】节点,在【name】栏输入【fins读取多个】,在【connection】选择建好的IP地址,在【addresses】栏属性值【flow.address】,在【output property】属性值为【msg.payload】,【output】栏选择【unsignd key/value】,如下图所示。
拉出【function】节点。
打开【function】节点,代码如下图所示。
拉出【text】节点。
打开【text】节点,在【group】栏选择【[PLC测试]读取内存地址】,在【label】栏输入【数值】,【value format】栏属性值为【{{msg.payload[0]}}】,如下图所示。
另起一行拉出【form】节点。
打开【form】节点,在【group】栏点击右侧画笔进入【dashboard group】节点新增群组,进入【dashboard group】节点,在【name】栏输入【读取多个内存地址】,在【tab】栏选择之前的【PLC测试】标签,如下图所示。
点击更新按钮回到【form】节点,在【group】栏选择【[PLC测试]读取多个内存地址】群组,在【form】栏下面点击【element】新增两个条件,第一个条件为【label】栏输入【读取多个地址】,【名称】栏输入【address】,【type】栏输入【text】,第二个条件为【label】栏输入【数量】,【名称】栏输入【count】,【type】栏输入【number】,如下图所示。
拉出【fins read】节点。
打开【fins read】节点。在【name】栏输入【fins读取】,在【connection】栏选择IP地址,【address】栏属性值为【msg.payload.address】,【count】栏属性值为【msg.payload.count】,【output property】栏属性值为【msg.payload】,【output】栏选择【unsigned key/value】,如下图所示。
拉出【function】节点。
打开【function】节点,输入以下代码,如图所示。
打开节点管理下载节点(node-red-node-ui-table),如图所示。
拉出【table】节点。
打开【table】节点,在【group】栏选择【[PLC测试]读取多个内存地址】,如下图所示。
拉出【inject】节点,与【函数】节点相连,如下图所示。
打开【inject】节点,属性值为【msg.payload】={}json,如下图所示。
{}json内容为,如下图所示。
把【inject】节点跟【fins读取多个】节点后的【函数节点】相连,如下图所示。
把【用于控制目的】节点跟【fins读取多个】和【fins读取】相连,如下图所示。
部署完成后我们就可以进入网页观看效果图了.
网页效果图如下。
暂无评论内容