ioPAC RTU Controllers
C/C++ Sample Code Programming Guide
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
ioPAC5542_data_logging_service_log_trigger_tag.c File Reference

ioPAC5542 Data Logging Trigger Tag Condition TAG Sample More...

#include "libmoxa_rtu.h"

Functions

int main (int argc, char *argv[])
 

Detailed Description

ioPAC5542 Data Logging Trigger Tag Condition TAG Sample

Date
02-26-2014
Author
TJ Tai
Version
V1.0
5542_data_logging_log_trigger_tag.jpg
Data Logging Log Trigger Tag Sample
Introduction:
DI channel data logging by trigger tag condition and FTP upload file to user-specific FTP server.
Logging tags are chose by the user. Data Logging files store on SD card.
Example:
1. Using default: ./ioPAC5542_data_logging_service_log_trigger_tag
2. Setting profile number and enabled FTP upload mode: ./ioPAC5542_data_logging_service_log_trigger_tag -p5 -u1
Default:
Profile of Data Logging = 0 [Setting in RTUxpress only]
Slot of DI module = 1 [Setting in RTUxpress only]
Logging Channel = DI0 to DI7 [Setting in RTUxpress only]
File Split record per file: 100 [Setting in RTUxpress only]
Enable FTP upload mode = 1 [FTP Server connection setting in RTUxpress only]
Help:
root@Moxa:/tmp#./ioPAC5542_data_logging_service_log_trigger_tag -h
Data Logging TAG program.

Usage: ./ioPAC5542_data_logging_service_log_trigger_tag [OPTIONS]

Options:
    -p        Profile of Data Logging. Default Profile = 0
    -u        Enable FTP upload mode. Default Enable = 1 [Setting Disable: 0]

Library:
TAG APIs

Function Documentation

int main ( int  argc,
char *  argv[] 
)
/*******************************************************************************
* Copyright Moxa Inc.
*
* TAG Service for Data Logging Application
*
* Date Author Comment
* 02-26-2014 TJ Tai Created.
******************************************************************************/
#include "libmoxa_rtu.h"
/*******************************************************************************
*
* Sample code for TAG Data Logging Service
*
*******************************************************************************/
int main(int argc, char * argv[])
{
int rc, i;
TAG_ERR_CODE retval = 0;
char szFileName[80] = "/etc/RTU/config.rtu";
TAG_INFO tagInfo;
UINT32 u32Val = 0;
int profile = 0; // default profile = 1
int ftpEnable = 1; // default enabled ftp upload
char dataLog[6][TAG_MAX_NAME_SIZE];
char event[1][TAG_MAX_NAME_SIZE];
UINT32 bitVal[2] = { 0, 1};
while(-1 != (rc = getopt(argc, argv, "hp:u:")))
{
switch(rc)
{
case 'p':
profile = atoi(optarg);
if(profile < 0)
{
printf("Error parameter: profile: %d\n", profile);
return -1;
}
break;
case 'u':
ftpEnable = atoi(optarg);
if(ftpEnable < 0 || ftpEnable > 1)
{
printf("Error parameter: FTP Enable: %d\n", ftpEnable);
return -1;
}
break;
case '?':
case 'h':
default:
printf("%s.\n\n", "Data Logging TAG program");
printf("Usage: ./ioPAC5542_data_logging_service_log_trigger_tag [OPTIONS]\n\n");
printf("Options:\n");
printf("\t%-8s Profile of Data Logging. Default Profile = %d\n",
"-p", 0);
printf("\t%-8s Enable FTP upload mode. Default Enable = %d [Setting Disable: %d]\n",
"-u", 1 , 0);
printf("\n");
return;
}
}
printf("%-25s: %d\n", "Profile", profile);
printf("%-25s: %d\n", "FTP Enable", ftpEnable);
sprintf(dataLog[0], "Service_Datalog_Status");
sprintf(dataLog[1], "Service_Datalog_StartStop_%d", profile);
sprintf(dataLog[2], "Service_Datalog_Status_%d", profile);
sprintf(dataLog[3], "Service_Datalog_Trigger_%d", profile);
sprintf(dataLog[4], "Datalog_FTPUpload_Trigger_%d", profile);
sprintf(dataLog[5], "Datalog_Storage_Usage_%d", profile);
sprintf(event[0], "S0_SR_ToggleSwitchMode");
retval = MX_RTU_Tag_Init();
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Init(), return code = %d.\n", retval);
return 0;
}
while(1)
{
// Check Service Init
retval = MX_RTU_Tag_Read(dataLog[0], &u32Val, sizeof(u32Val), NULL, NULL);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Read(%s) = %d\n", dataLog[0], retval);
}
if(u32Val == STATUS_READY)
{
printf("Data Logging Service Init Success.\n");
break;
}
else if(u32Val == STATUS_FAIL)
{
printf("Data Logging Service Init fail.\n");
return 0;
}
else if(u32Val == STATUS_INIT)
{
printf("Data Logging Service Initing.\n");
sleep(5);
}
}
// Config FTP Upload Start
retval = MX_RTU_Tag_Get_Info(dataLog[4], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[4], retval);
return 0;
}
if(ftpEnable == 1)
{
retval = MX_RTU_Tag_Write(dataLog[4], bitVal + 1, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[4], retval);
return 0;
}
}
else
{
retval = MX_RTU_Tag_Write(dataLog[4], bitVal + 0, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[4], retval);
return 0;
}
}
while(1)
{
retval = MX_RTU_Tag_Read(event[0], &u32Val, sizeof(u32Val), NULL, NULL);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Read(%s), return code = %d\r\n", event[0], retval);
return 0;
}
if(u32Val == 0)
{
// ToggleSwitchMode 1
// Data Logging Service Start
retval = MX_RTU_Tag_Get_Info(dataLog[1], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[1], retval);
return 0;
}
retval = MX_RTU_Tag_Write(dataLog[1], bitVal + 1, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[1], retval);
return 0;
}
// Trigger ON
printf("\rDatalog Service logging Once ");
fflush(0);
retval = MX_RTU_Tag_Get_Info(dataLog[3], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[3], retval);
return 0;
}
retval = MX_RTU_Tag_Write(dataLog[3], bitVal + 1, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[3], retval);
return 0;
}
}
if(u32Val == 1)
{
// ToggleSwitchMode 2
// Data Logging Service Stop
// Storage Checking
retval = MX_RTU_Tag_Read(dataLog[5], &u32Val, sizeof(u32Val), NULL, NULL);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Read(%s), return code = %d\r\n", dataLog[5], retval);
return 0;
}
printf("\rDatalog Storage Usage: %5d%", u32Val);
fflush(0);
// FTP Upload Stop
retval = MX_RTU_Tag_Get_Info(dataLog[4], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[4], retval);
return 0;
}
retval = MX_RTU_Tag_Write(dataLog[4], bitVal + 0, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[4], retval);
return 0;
}
// Trigger OFF
retval = MX_RTU_Tag_Get_Info(dataLog[3], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[3], retval);
return 0;
}
retval = MX_RTU_Tag_Write(dataLog[3], bitVal + 0, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[3], retval);
return 0;
}
retval = MX_RTU_Tag_Get_Info(dataLog[1], &tagInfo);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Get_Info(%s), return code = %d.\n", dataLog[1], retval);
return 0;
}
retval = MX_RTU_Tag_Write(dataLog[1], bitVal + 0, tagInfo.tagSize);
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Write(%s), return code = %d\r\n", dataLog[1], retval);
return 0;
}
}
}
retval = MX_RTU_Tag_Uninit();
if(retval != TAG_ERR_OK)
{
printf("MX_RTU_Tag_Uninit(), return code = %d\n", retval);
}
return 0;
}