forked from xuos/xiuos
support plc demo
This commit is contained in:
@@ -126,7 +126,6 @@ void tcp_socket_recv_run(int argc, char *argv[])
|
||||
sscanf(argv[1], "%d.%d.%d.%d", &tcp_socket_ip[0], &tcp_socket_ip[1], &tcp_socket_ip[2], &tcp_socket_ip[3]);
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, lwip_gwaddr);
|
||||
sys_thread_new("tcp_recv_demo", tcp_recv_demo, NULL, LWIP_TASK_STACK_SIZE, LWIP_DEMO_TASK_PRIO);
|
||||
}
|
||||
@@ -190,7 +189,6 @@ void tcp_socket_send_run(int argc, char *argv[])
|
||||
sscanf(argv[1], "%d.%d.%d.%d", &tcp_socket_ip[0], &tcp_socket_ip[1], &tcp_socket_ip[2], &tcp_socket_ip[3]);
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, tcp_socket_ip);
|
||||
sys_thread_new("tcp socket", tcp_send_demo, NULL, LWIP_TASK_STACK_SIZE, LWIP_DEMO_TASK_PRIO);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,6 @@ void udp_socket_recv_run(int argc, char *argv[])
|
||||
sscanf(argv[1], "%d.%d.%d.%d", &udp_socket_ip[0], &udp_socket_ip[1], &udp_socket_ip[2], &udp_socket_ip[3]);
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, lwip_gwaddr);
|
||||
sys_thread_new("udp_recv_demo", udp_recv_demo, NULL, LWIP_TASK_STACK_SIZE, LWIP_DEMO_TASK_PRIO);
|
||||
}
|
||||
@@ -190,7 +189,6 @@ void udp_socket_send_run(int argc, char *argv[])
|
||||
sscanf(argv[1], "%d.%d.%d.%d", &udp_socket_ip[0], &udp_socket_ip[1], &udp_socket_ip[2], &udp_socket_ip[3]);
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, lwip_gwaddr);
|
||||
sys_thread_new("udp_send_demo", udp_send_demo, NULL, LWIP_TASK_STACK_SIZE, LWIP_DEMO_TASK_PRIO);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ SRC_DIR :=
|
||||
ifeq ($(CONFIG_RESOURCES_LWIP),y)
|
||||
|
||||
ifeq ($(CONFIG_USING_CONTROL_PLC_OPCUA), y)
|
||||
SRC_DIR += opcua_demo
|
||||
SRC_DIR += opcua_demo plc_demo
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
******************************************************************************/
|
||||
|
||||
#define TCP_LOCAL_PORT 4840
|
||||
#define UA_URL_SIZE 100
|
||||
#define UA_STACK_SIZE 4096
|
||||
#define UA_TASK_PRIO 25
|
||||
#define UA_URL_SIZE 100
|
||||
#define UA_STACK_SIZE 4096
|
||||
#define UA_TASK_PRIO 15
|
||||
|
||||
/*******************************************************************************
|
||||
* Prototypes
|
||||
@@ -67,33 +67,28 @@ static void test_ua_connect(void *arg)
|
||||
UA_ClientConfig *config = UA_Client_getConfig(client);
|
||||
UA_ClientConfig_setDefault(config);
|
||||
|
||||
snprintf(ua_uri, UA_URL_SIZE, "opc.tcp://%d.%d.%d.%d:4840",
|
||||
snprintf(ua_uri, sizeof(ua_uri), "opc.tcp://%d.%d.%d.%d:4840",
|
||||
test_ua_ip[0], test_ua_ip[1], test_ua_ip[2], test_ua_ip[3]);
|
||||
|
||||
retval = UA_Client_connect(client, ua_uri);
|
||||
ua_pr_info("ua uri: %d %s\n", strlen(ua_uri), ua_uri);
|
||||
|
||||
retval = UA_Client_connect(client,ua_uri);
|
||||
if (retval != UA_STATUSCODE_GOOD)
|
||||
{
|
||||
ua_print("ua: [%s] ret %x\n", __func__, retval);
|
||||
ua_pr_info("ua: [%s] connected failed %x\n", __func__, retval);
|
||||
UA_Client_delete(client);
|
||||
return;
|
||||
}
|
||||
|
||||
ua_print("ua: [%s] start Ua Test!\n", __func__);
|
||||
ua_pr_info("ua: [%s] connected ok!\n", __func__);
|
||||
UA_Client_disconnect(client);
|
||||
UA_Client_delete(client);
|
||||
}
|
||||
|
||||
void test_ua_connect_thr(void *arg)
|
||||
void test_sh_ua_connect(void *arg)
|
||||
{
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, test_ua_ip);
|
||||
test_ua_connect(NULL);
|
||||
}
|
||||
|
||||
void test_sh_ua_connect(void)
|
||||
{
|
||||
int result = 0;
|
||||
pthread_t th_id;
|
||||
pthread_attr_t attr;
|
||||
sys_thread_new("ua test", test_ua_connect_thr, NULL, UA_STACK_SIZE, UA_TASK_PRIO);
|
||||
sys_thread_new("ua test", test_ua_connect, NULL, UA_STACK_SIZE, UA_TASK_PRIO);
|
||||
}
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(0),
|
||||
@@ -148,7 +143,6 @@ void *test_sh_ua_brower_objects(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, test_ua_ip);
|
||||
sys_thread_new("ua object", test_ua_browser_objects, NULL, UA_STACK_SIZE, UA_TASK_PRIO);
|
||||
return NULL;
|
||||
@@ -202,9 +196,8 @@ void *test_sh_ua_get_info(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
ETH_BSP_Config();
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, test_ua_ip);
|
||||
sys_thread_new("ua object", test_ua_browser_objects, NULL, UA_STACK_SIZE, UA_TASK_PRIO);
|
||||
sys_thread_new("ua info", test_ua_get_info, NULL, UA_STACK_SIZE, UA_TASK_PRIO);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
SRC_FILES := plc_demo.c
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (c) 2021 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 ua_demo.c
|
||||
* @brief Demo for OpcUa function
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2021.11.11
|
||||
*/
|
||||
|
||||
#include "open62541.h"
|
||||
#include "plc.h"
|
||||
#include "ua_api.h"
|
||||
#include "sys_arch.h"
|
||||
#include "plc_bus.h"
|
||||
#include "plc_dev.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Definitions
|
||||
******************************************************************************/
|
||||
|
||||
#define PLC_BUS_NAME "plc bus"
|
||||
#define PLC_DRV_NAME "plc driver"
|
||||
#define PLC_BUF_LEN 1000
|
||||
|
||||
#define PLC_STACK_SIZE 4096
|
||||
#define PLC_TASK_PRIO 15
|
||||
|
||||
#define plc_print KPrintf
|
||||
|
||||
/*******************************************************************************
|
||||
* Prototypes
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Variables
|
||||
******************************************************************************/
|
||||
|
||||
struct PlcBus plc_demo_bus;
|
||||
struct PlcDriver plc_demo_drv;
|
||||
struct PlcDevice plc_demo_dev;
|
||||
|
||||
char plc_demo_ip[] = {192, 168, 250, 5};
|
||||
|
||||
/*******************************************************************************
|
||||
* Code
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
void PlcTestInit(void)
|
||||
{
|
||||
lwip_config_tcp(lwip_ipaddr, lwip_netmask, plc_demo_ip);
|
||||
|
||||
PlcBusInit(&plc_demo_bus, PLC_BUS_NAME);
|
||||
PlcDriverInit(&plc_demo_drv, PLC_DRV_NAME);
|
||||
|
||||
// register plc device
|
||||
plc_demo_dev.state = DEV_INIT;
|
||||
PlcDevRegister(&plc_demo_dev, NULL, "plc test device");
|
||||
}
|
||||
|
||||
void PlcTestRead(void *arg)
|
||||
{
|
||||
int ret = 0;
|
||||
struct PlcOps *ops = NULL;
|
||||
char buf[PLC_BUF_LEN];
|
||||
|
||||
plc_demo_dev.priv_data = (ua_dev_t *)malloc(sizeof(ua_dev_t));
|
||||
ua_dev_t *ua_ptr = plc_demo_dev.priv_data;
|
||||
memset(ua_ptr, 0, sizeof(ua_dev_t));
|
||||
strcpy(ua_ptr->ua_remote_ip, OPC_SERVER);
|
||||
|
||||
PlcTestInit();
|
||||
plc_demo_dev.net = PLC_IND_ENET_OPCUA;
|
||||
ops = plc_demo_dev.ops;
|
||||
ret = ops->open(&plc_demo_dev);
|
||||
if(EOK != ret)
|
||||
{
|
||||
plc_print("plc: [%s] open failed %#x\n", __func__, ret);
|
||||
free(plc_demo_dev.priv_data);
|
||||
return;
|
||||
}
|
||||
ret = ops->read(&plc_demo_dev, buf, PLC_BUF_LEN);
|
||||
if(EOK != ret)
|
||||
{
|
||||
plc_print("plc: [%s] read failed\n", __func__);
|
||||
free(plc_demo_dev.priv_data);
|
||||
return;
|
||||
}
|
||||
free(plc_demo_dev.priv_data);
|
||||
ops->close(&plc_demo_dev);
|
||||
}
|
||||
|
||||
void PlcTestTask(int argc, char *argv[])
|
||||
{
|
||||
sys_thread_new("plc read", PlcTestRead, NULL, PLC_STACK_SIZE, PLC_TASK_PRIO);
|
||||
}
|
||||
|
||||
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(3),
|
||||
plc, PlcTestTask, test PLC);
|
||||
|
||||
Reference in New Issue
Block a user