config_gtk.c

来自「CNC 的开放码,EMC2 V2.2.8版」· C语言 代码 · 共 643 行 · 第 1/2 页

C
643
字号
		pConf->FlagInverted = 0;		IOParamDevice = ForInputs?&InputDeviceParam[ NumLine ]:&OutputDeviceParam[ NumLine ];		ComboVal = ConvComboToNum( (char *)gtk_entry_get_text((GtkEntry *)((GtkCombo *)*IOParamDevice)->entry), Devices );		if ( ComboVal>0 )		{			int FirstIO = -1;			if ( ComboVal==1 )				pConf->DeviceType = DEVICE_TYPE_DIRECT_ACCESS;			else				pConf->DeviceType = DEVICE_TYPE_COMEDI+ComboVal-2;			IOParamFlag = ForInputs?&InputFlagParam[ NumLine ]:&OutputFlagParam[ NumLine ];			if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON( *IOParamFlag ) ) )				pConf->FlagInverted = 1;			for (NumObj=0; NumObj<NBR_IO_PARAMS; NumObj++)			{				IOParamEntry = ForInputs?&InputParamEntry[ NumLine ][ NumObj ]:&OutputParamEntry[ NumLine ][ NumObj ];				switch( NumObj )				{					case 0:						text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);						FirstIO = atoi( text );						break;					case 2:						text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);						if ( pConf->DeviceType==DEVICE_TYPE_DIRECT_ACCESS )							sscanf( text, "%X", &pConf->SubDevOrAdr );						else							pConf->SubDevOrAdr = atoi( text );						break;					case 3:						text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);						pConf->FirstChannel = atoi( text );						break;					case 4:						text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);						pConf->NbrConsecutivesChannels = atoi( text );						break;				}			}			/* verify if not overflowing */			if ( FirstIO+pConf->NbrConsecutivesChannels>( ForInputs?NBR_PHYS_INPUTS:NBR_PHYS_OUTPUTS ) )			{				printf("Error in I/O conf: overflow for Ixx or Qxx mapping detected...\n" );				FirstIO = -1;			}			/* done at the end, do not forget multi-task ! */			pConf->FirstClassicLadderIO = FirstIO;		}//if ( ComboVal>0 )	}}#ifdef USE_MODBUSGtkWidget * CreateModbusModulesIO( void ){	static char * Labels[] = { "Slave Address", "TypeAccess", "1st Modbus Ele.", "Nbr Modbus Ele.", "Logic", "1st %I/%Q Mapped" };	GtkWidget *vbox;	GtkWidget *hbox[ NBR_MODBUS_MASTER_REQ+2 ];	int NumObj;	int NumLine;	GList * ItemsDevices = NULL;	int ScanDev = 0;	StrModbusMasterReq * pConf;	char BuffValue[ 40 ];	GtkWidget *ModbusParamLabel[ NBR_MODBUS_PARAMS];		GtkWidget *SerialPortLabel;	GtkWidget *SerialSpeedLabel;	GtkWidget *PauseInterFrameLabel;	GtkWidget *DebugLevelLabel;	do	{		ItemsDevices = g_list_append( ItemsDevices, ModbusReqType[ ScanDev++ ] );	}	while( ModbusReqType[ ScanDev ] );	vbox = gtk_vbox_new (FALSE, 0);	gtk_widget_show (vbox);	for (NumLine=-2; NumLine<NBR_MODBUS_MASTER_REQ; NumLine++ )	{		hbox[NumLine+2] = gtk_hbox_new (FALSE, 0);		gtk_container_add (GTK_CONTAINER (vbox), hbox[NumLine+2]);		gtk_widget_show (hbox[NumLine+2]);		for (NumObj=0; NumObj<NBR_MODBUS_PARAMS; NumObj++)		{			switch( NumLine )			{				case -2:				{					if ( NumObj==0 )					{						SerialPortLabel = gtk_label_new( "Serial port (blank = IP mode)" );						gtk_box_pack_start(GTK_BOX (hbox[ NumLine+2 ]), SerialPortLabel, FALSE, FALSE, 0);						gtk_widget_show( SerialPortLabel );						SerialPortEntry = gtk_entry_new( );						gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), SerialPortEntry, FALSE, FALSE, 0 );						gtk_widget_show ( SerialPortEntry );						gtk_entry_set_text( GTK_ENTRY(SerialPortEntry), ModbusSerialPortNameUsed );//TODO: configplc file written by hand for now...gtk_editable_set_editable( GTK_EDITABLE(SerialPortEntry), FALSE);												SerialSpeedLabel = gtk_label_new( "Serial speed" );						gtk_box_pack_start(GTK_BOX (hbox[ NumLine+2 ]), SerialSpeedLabel, FALSE, FALSE, 0);						gtk_widget_show( SerialSpeedLabel );						SerialSpeedEntry = gtk_entry_new( );						gtk_widget_set_usize( SerialSpeedEntry,90,0 );						gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), SerialSpeedEntry, FALSE, FALSE, 0 );						gtk_widget_show ( SerialSpeedEntry );						sprintf( BuffValue, "%d", ModbusSerialSpeed );						gtk_entry_set_text( GTK_ENTRY(SerialSpeedEntry), BuffValue );//TODO: configplc file written by hand for now...gtk_editable_set_editable( GTK_EDITABLE(SerialSpeedEntry), FALSE);												PauseInterFrameLabel = gtk_label_new( "Pause Inter-Frame" );						gtk_box_pack_start(GTK_BOX (hbox[ NumLine+2 ]), PauseInterFrameLabel, FALSE, FALSE, 0);						gtk_widget_show( PauseInterFrameLabel );						PauseInterFrameEntry = gtk_entry_new( );						gtk_widget_set_usize( PauseInterFrameEntry,90,0 );						gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), PauseInterFrameEntry, FALSE, FALSE, 0 );						gtk_widget_show ( PauseInterFrameEntry );						sprintf( BuffValue, "%d", ModbusTimeInterFrame );						gtk_entry_set_text( GTK_ENTRY(PauseInterFrameEntry), BuffValue );//TODO: configplc file written by hand for now...gtk_editable_set_editable( GTK_EDITABLE(PauseInterFrameEntry), FALSE);												DebugLevelLabel = gtk_label_new( "Debug level" );						gtk_box_pack_start(GTK_BOX (hbox[ NumLine+2 ]), DebugLevelLabel, FALSE, FALSE, 0);						gtk_widget_show( DebugLevelLabel );						DebugLevelEntry = gtk_entry_new( );						gtk_widget_set_usize( DebugLevelEntry,70,0 );						gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), DebugLevelEntry, FALSE, FALSE, 0 );						gtk_widget_show ( DebugLevelEntry );						sprintf( BuffValue, "%d", ModbusDebugLevel );						gtk_entry_set_text( GTK_ENTRY(DebugLevelEntry), BuffValue );					}					break;				}				case -1:				{					GtkWidget **IOParamLabel = &ModbusParamLabel[ NumObj ];					*IOParamLabel = gtk_label_new( Labels[ NumObj ] );					gtk_widget_set_usize(*IOParamLabel,(NumObj<=1 || NumObj==5)?120:100,0);					gtk_box_pack_start(GTK_BOX (hbox[ NumLine+2 ]), *IOParamLabel, FALSE, FALSE, 0);					gtk_widget_show( *IOParamLabel );					break;				}				default:				{					pConf = &ModbusMasterReq[ NumLine ];					switch( NumObj )					{						/* For req type (combo-list) */						case 1:						{							int ValueToDisplay = pConf->TypeReq;							GtkWidget **IOParamDevice = &ModbusParamEntry[ NumLine ][ NumObj ];							*IOParamDevice = gtk_combo_new( );							gtk_combo_set_value_in_list( GTK_COMBO(*IOParamDevice), TRUE /*val*/, FALSE /*ok_if_empty*/ );							gtk_combo_set_popdown_strings( GTK_COMBO(*IOParamDevice), ItemsDevices );							gtk_widget_set_usize( *IOParamDevice,120,0 );							gtk_box_pack_start ( GTK_BOX (hbox[NumLine+2]), *IOParamDevice, FALSE, FALSE, 0 );							gtk_widget_show ( *IOParamDevice );					        	gtk_entry_set_text((GtkEntry*)((GtkCombo *)*IOParamDevice)->entry, ModbusReqType[ ValueToDisplay ]);							break;						}						/* For flags */						case 4:						{							GtkWidget **IOParamFlag = &ModbusParamEntry[ NumLine ][ NumObj ];							*IOParamFlag = gtk_check_button_new_with_label( "Inverted" );							gtk_widget_set_usize( *IOParamFlag,100,0 );							gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), *IOParamFlag, FALSE, FALSE, 0 );							gtk_widget_show ( *IOParamFlag );							if ( pConf->LogicInverted )								gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( *IOParamFlag ), TRUE );							break;						}						/* For numbers/strings */						default:						{							switch( NumObj )							{								case 0:									strcpy( BuffValue, pConf->SlaveAdr );									break;								case 2:									sprintf( BuffValue, "%d", pConf->FirstModbusElement );									break;								case 3:									sprintf( BuffValue, "%d", pConf->NbrModbusElements );									break;								case 5:									sprintf( BuffValue, "%d", pConf->OffsetVarMapped );									break;							}							{								GtkWidget **IOParamEntry = &ModbusParamEntry[ NumLine ][ NumObj ];								*IOParamEntry = gtk_entry_new( );								gtk_widget_set_usize( *IOParamEntry,(NumObj<=1 || NumObj==5)?120:100,0 );								gtk_box_pack_start( GTK_BOX (hbox[NumLine+2]), *IOParamEntry, FALSE, FALSE, 0 );								gtk_widget_show ( *IOParamEntry );								gtk_entry_set_text( GTK_ENTRY(*IOParamEntry), BuffValue );							}							break;						}					}				}//default:			}		}	}	return vbox;}void GetModbusModulesIOSettings( void ){	int NumObj;	int NumLine;	StrModbusMasterReq * pConf;	GtkWidget **IOParamEntry;	char * text;	char BuffValue[ 40 ];	for (NumLine=0; NumLine<NBR_MODBUS_MASTER_REQ; NumLine++ )	{		pConf = &ModbusMasterReq[ NumLine ];		strcpy( pConf->SlaveAdr, "" );		pConf->LogicInverted = 0;		for (NumObj=0; NumObj<NBR_IO_PARAMS; NumObj++)		{			IOParamEntry = &ModbusParamEntry[ NumLine ][ NumObj ];			switch( NumObj )			{				case 0:					text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);					strcpy( BuffValue, text );					break;				case 1:					pConf->TypeReq = ConvComboToNum( (char *)gtk_entry_get_text((GtkEntry *)((GtkCombo *)*IOParamEntry)->entry), ModbusReqType );					break;				case 2:					text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);					pConf->FirstModbusElement = atoi( text );					break;				case 3:					text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);					pConf->NbrModbusElements = atoi( text );					break;				case 4:					if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON( *IOParamEntry ) ) )						pConf->LogicInverted = 1;					break;				case 5:					text = (char *)gtk_entry_get_text((GtkEntry *)*IOParamEntry);					pConf->OffsetVarMapped = atoi( text );					break;			}		}//for (NumObj=0; 		/* verify if not overflowing */		if ( pConf->OffsetVarMapped+pConf->NbrModbusElements>( (pConf->TypeReq==MODBUS_REQ_INPUTS_READ)?NBR_PHYS_INPUTS:NBR_PHYS_OUTPUTS ) )		{			printf("Error in I/O modbus conf: overflow for Ixx or Qxx mapping detected...\n" );			strcpy( BuffValue, "" );		}		/* done at the end, do not forget multi-task ! */		/* the first char is tested to determine a valid request => paranoia mode ;-) */		strcpy( &pConf->SlaveAdr[ 1 ], &BuffValue[ 1 ] );		pConf->SlaveAdr[ 0 ] = BuffValue[ 0 ];	}//for (NumLine=0; 	text = (char *)gtk_entry_get_text(GTK_ENTRY(SerialPortEntry));	strcpy( ModbusSerialPortNameUsed ,text );	text = (char *)gtk_entry_get_text(GTK_ENTRY(SerialSpeedEntry));	ModbusSerialSpeed = atoi( text );	text = (char *)gtk_entry_get_text(GTK_ENTRY(PauseInterFrameEntry));	ModbusTimeInterFrame = atoi( text );	text = (char *)gtk_entry_get_text(GTK_ENTRY(DebugLevelEntry));	ModbusDebugLevel = atoi( text );}#endifvoid GetSettings( void ){#ifndef HAL_SUPPORT	GetIOSettings( 1/*ForInputs*/ );	GetIOSettings( 0/*ForInputs*/ );#ifdef USE_MODBUS	GetModbusModulesIOSettings( );#endif#ifndef RT_SUPPORT	ConfigHardware( );#endif#endif}void OpenConfigWindowGtk(){	GtkWidget *nbook;	ConfigWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_window_set_title( GTK_WINDOW(ConfigWindow), "Config" );	gtk_window_set_modal( GTK_WINDOW(ConfigWindow), TRUE );	nbook = gtk_notebook_new( );	gtk_notebook_append_page( GTK_NOTEBOOK(nbook), CreateSizesPage(),				 gtk_label_new ("Sizes") );#ifdef USE_MODBUS	gtk_notebook_append_page( GTK_NOTEBOOK(nbook), CreateModbusModulesIO( ),				 gtk_label_new ("Modbus distributed I/O") );#endif	gtk_container_add( GTK_CONTAINER (ConfigWindow), nbook );	gtk_widget_show( nbook );	gtk_window_set_position( GTK_WINDOW(ConfigWindow), GTK_WIN_POS_CENTER );	gtk_window_set_policy( GTK_WINDOW(ConfigWindow), FALSE, FALSE, TRUE );	gtk_signal_connect ( GTK_OBJECT(ConfigWindow), "destroy",                        GTK_SIGNAL_FUNC(GetSettings), NULL );	gtk_widget_show( ConfigWindow );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?