forked from xuos/xiuos
				
			Merge branch 'control_framework' of https://gitlink.org.cn/IACU/xiuos into control_framework
This commit is contained in:
		
						commit
						b37885b839
					
				| 
						 | 
					@ -1,3 +1,3 @@
 | 
				
			||||||
SRC_FILES := ge_versamax001.c
 | 
					SRC_FILES := ge_versamax001.c ge_cpe100.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(KERNEL_ROOT)/compiler.mk
 | 
					include $(KERNEL_ROOT)/compiler.mk
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,57 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					typora-copy-images-to: upload
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 艾默生(原GE) 通信测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[TOC]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 小型VersaMAX CPU001测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 通信接线及参数设置
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* 串口
 | 
				
			||||||
 | 
					  * COM2为15孔D型 RS485。波特率:19200,数据位:8位,停止位:1位,校验:偶校验。接线按下图典型双线接法。
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 存储区
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 存储区 I,Q,AI,R区。其他内存区如M,AQ不能直接访问,要通过程序转换访问。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 通信测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-  共测试BOOL,INT16,FLOAT共三种类型数据。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 测试R区及Q区数据。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- R区数据测试,用功能码03,以字为单位读取。配方中start_address字段为PLC地址直接减1。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Q区数据测试,用功能码01,以位为单位读取。配方中start_address字段为PLC地址直接减1。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 中型PLC CPE100通信测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 通信接线及参数设置
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 网口
 | 
				
			||||||
 | 
					  - 网口RJ45,参数 IP:192.168.250.28 端口号:502
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 存储区
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 存储区 I,Q,AI,R区。其他内存区如M,AQ不能直接访问,要通过程序转换访问。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 通信测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-   共测试BOOL,INT16,INT32,FLOAT,DOUBLE共五种类型数据。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 测试R区及Q区数据。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- R区数据测试,用功能码03,以字为单位读取。配方中start_address字段为PLC地址直接减1。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Q区数据测试,用功能码01,以位为单位读取。配方中start_address字段为PLC地址直接减1。
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,64 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2022 AIIT XUOS Lab
 | 
				
			||||||
 | 
					 * XiUOS is licensed under Mulan PSL v2.
 | 
				
			||||||
 | 
					 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 | 
				
			||||||
 | 
					 * You may obtain a copy of Mulan PSL v2 at:
 | 
				
			||||||
 | 
					 *        http://license.coscl.org.cn/MulanPSL2
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
				
			||||||
 | 
					 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
				
			||||||
 | 
					 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
				
			||||||
 | 
					 * See the Mulan PSL v2 for more details.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @file ge_cpe100.c
 | 
				
			||||||
 | 
					 * @brief PLC GE Versamax app
 | 
				
			||||||
 | 
					 * @version 3.0
 | 
				
			||||||
 | 
					 * @author AIIT XUOS Lab
 | 
				
			||||||
 | 
					 * @date 2022.9.27
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <control.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int Adapter4GActive(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ControlGecpe100Test(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int i, j = 0;
 | 
				
			||||||
 | 
					    int read_data_length = 0;
 | 
				
			||||||
 | 
					    uint8_t read_data[128] = {0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONNECTION_ADAPTER_4G
 | 
				
			||||||
 | 
					    Adapter4GActive();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ControlProtocolType modbus_tcp_protocol = ControlProtocolFind();
 | 
				
			||||||
 | 
					    if (NULL == modbus_tcp_protocol) {
 | 
				
			||||||
 | 
					        printf("%s get modbus tcp protocol %p failed\n", __func__, modbus_tcp_protocol);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf("%s get modbus tcp protocol %p successfull\n", __func__, modbus_tcp_protocol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (CONTROL_REGISTERED == modbus_tcp_protocol->protocol_status) {
 | 
				
			||||||
 | 
					        ControlProtocolOpen(modbus_tcp_protocol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (;;) {
 | 
				
			||||||
 | 
					            read_data_length = ControlProtocolRead(modbus_tcp_protocol, read_data, sizeof(read_data));
 | 
				
			||||||
 | 
					            printf("%s read [%d] modbus tcp data %d using receipe file\n", __func__, i, read_data_length);
 | 
				
			||||||
 | 
					            if (read_data_length) {
 | 
				
			||||||
 | 
					                for (j = 0; j < read_data_length; j ++) {
 | 
				
			||||||
 | 
					                    printf("j %d data 0x%x\n", j, read_data[j]);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            i++;
 | 
				
			||||||
 | 
					            memset(read_data, 0, sizeof(read_data));
 | 
				
			||||||
 | 
					            PrivTaskDelay(10000);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //ControlProtocolClose(modbus_tcp_protocol);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					PRIV_SHELL_CMD_FUNCTION(ControlGecpe100Test, ge cpe100 Demo, PRIV_SHELL_CMD_MAIN_ATTR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 109 KiB  | 
| 
						 | 
					@ -0,0 +1,73 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "device_id": 1,
 | 
				
			||||||
 | 
					    "device_name": "GE_CPE100_TCP",
 | 
				
			||||||
 | 
					    "communication_type": 0,
 | 
				
			||||||
 | 
					    "socket_config": {
 | 
				
			||||||
 | 
					        "plc_ip": "192.168.250.28",
 | 
				
			||||||
 | 
					        "local_ip": "192.168.250.233",
 | 
				
			||||||
 | 
					        "gateway": "192.168.250.1",
 | 
				
			||||||
 | 
					        "netmask": "255.255.254.0",
 | 
				
			||||||
 | 
					        "port": 502
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "protocol_type": 2,
 | 
				
			||||||
 | 
					    "read_period": 2000,
 | 
				
			||||||
 | 
					    "read_item_list": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "Q001",
 | 
				
			||||||
 | 
					            "value_type": 1,
 | 
				
			||||||
 | 
					            "function_code": 1,
 | 
				
			||||||
 | 
					            "start_address": 0,
 | 
				
			||||||
 | 
					            "quantity": 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "Q010",
 | 
				
			||||||
 | 
					            "value_type": 1,
 | 
				
			||||||
 | 
					            "function_code": 1,
 | 
				
			||||||
 | 
					            "start_address":9,
 | 
				
			||||||
 | 
					            "quantity": 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "Q066",
 | 
				
			||||||
 | 
					            "value_type": 1,
 | 
				
			||||||
 | 
					            "function_code": 1,
 | 
				
			||||||
 | 
					            "start_address": 65,
 | 
				
			||||||
 | 
					            "quantity": 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "Q100",
 | 
				
			||||||
 | 
					            "value_type": 1,
 | 
				
			||||||
 | 
					            "function_code": 1,
 | 
				
			||||||
 | 
					            "start_address":99,
 | 
				
			||||||
 | 
					            "quantity": 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "R11",
 | 
				
			||||||
 | 
					            "value_type": 3,
 | 
				
			||||||
 | 
					            "function_code": 3,
 | 
				
			||||||
 | 
					            "start_address": 10,
 | 
				
			||||||
 | 
					            "quantity": 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "R12",
 | 
				
			||||||
 | 
					            "value_type": 9,
 | 
				
			||||||
 | 
					            "function_code": 3,
 | 
				
			||||||
 | 
					            "start_address": 11,
 | 
				
			||||||
 | 
					            "quantity": 2
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "R14",
 | 
				
			||||||
 | 
					            "value_type": 8,
 | 
				
			||||||
 | 
					            "function_code": 3,
 | 
				
			||||||
 | 
					            "start_address": 13,
 | 
				
			||||||
 | 
					            "quantity": 4
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "value_name": "R18",
 | 
				
			||||||
 | 
					            "value_type": 4,
 | 
				
			||||||
 | 
					            "function_code": 3,
 | 
				
			||||||
 | 
					            "start_address": 17,
 | 
				
			||||||
 | 
					            "quantity": 2
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,58 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "device_id": 1,
 | 
				
			||||||
 | 
					    "device_name": "GE_VersaMAX_RTU",
 | 
				
			||||||
 | 
					    "communication_type": 1,
 | 
				
			||||||
 | 
					    "serial_config": {
 | 
				
			||||||
 | 
					        "station": 1,
 | 
				
			||||||
 | 
					        "baud_rate": 19200,
 | 
				
			||||||
 | 
					        "data_bits": 8,
 | 
				
			||||||
 | 
					        "stop_bits": 1,
 | 
				
			||||||
 | 
					        "check_mode": 2
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "protocol_type": 3,
 | 
				
			||||||
 | 
					    "read_period": 2000,
 | 
				
			||||||
 | 
					  "read_item_list": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "value_name": "Q001",
 | 
				
			||||||
 | 
					      "value_type": 1,
 | 
				
			||||||
 | 
					      "function_code": 1,
 | 
				
			||||||
 | 
					      "start_address": 0,
 | 
				
			||||||
 | 
					      "quantity": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       "value_name": "Q010",
 | 
				
			||||||
 | 
					      "value_type": 1,
 | 
				
			||||||
 | 
					      "function_code": 1,
 | 
				
			||||||
 | 
					      "start_address": 9,
 | 
				
			||||||
 | 
					      "quantity": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       "value_name": "Q066",
 | 
				
			||||||
 | 
					      "value_type": 1,
 | 
				
			||||||
 | 
					      "function_code": 1,
 | 
				
			||||||
 | 
					      "start_address": 65,
 | 
				
			||||||
 | 
					      "quantity": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       "value_name": "Q100",
 | 
				
			||||||
 | 
					      "value_type": 1,
 | 
				
			||||||
 | 
					      "function_code": 1,
 | 
				
			||||||
 | 
					      "start_address": 99,
 | 
				
			||||||
 | 
					      "quantity": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       "value_name": "R11",
 | 
				
			||||||
 | 
					      "value_type": 3,
 | 
				
			||||||
 | 
					      "function_code": 3,
 | 
				
			||||||
 | 
					      "start_address": 10,
 | 
				
			||||||
 | 
					      "quantity": 1
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "value_name": "R12",
 | 
				
			||||||
 | 
					      "value_type": 9,
 | 
				
			||||||
 | 
					      "function_code": 3,
 | 
				
			||||||
 | 
					      "start_address": 11,
 | 
				
			||||||
 | 
					      "quantity": 2
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue