void ClassicLadderEndOfAppli( void ) { CyclicThreadRunning = 0; if(modmaster) { CloseSocketModbusMaster( ); } if(modslave) { CloseSocketServer( ); } }
void PrepareModbusMaster( void ) { if(modmaster) { CloseSocketModbusMaster( ); InitSocketModbusMaster( ); } }
void InitSocketModbusMaster( ) { int Error; int ScanClientSock; // WSAStartup for Windows already done for socket server... for( ScanClientSock=0; ScanClientSock<NBR_CLIENTS_MAX; ScanClientSock++ ) { ClientSocketOpened[ ScanClientSock ] = -1; ClientSockDescrip[ ScanClientSock ] = SOCK_INVALID; } ClientSocketRunning = 1; #ifdef __WIN32__ ThreadHandleClient = CreateThread( NULL/*no security attributes*/, 16*1024L/*default stack size*/, (LPTHREAD_START_ROUTINE)SocketModbusMasterLoop/* thread function*/, NULL/*argument to thread function*/, THREAD_QUERY_INFORMATION/*use default creation flags*/, &ThreadIdClient/* returns the thread identifier*/); if ( ThreadHandleClient==NULL ) #else Error = pthread_create( &thread_socket_client, NULL, (void *(*)(void *))SocketModbusMasterLoop, (void *)NULL ); if (Error) #endif { printf(_("ERROR CLASSICLADDER- Failed to create thread I/O modbus master...\n")); CloseSocketModbusMaster( ); } else { Error = 0; if ( ModbusSerialPortNameUsed[ 0 ]!='\0' ) { if ( !SerialOpen( ModbusSerialPortNameUsed, ModbusSerialSpeed ) ) Error = -1; printf(_("INFO CLASSICLADDER---I/O modbus master Data bits %i Stop bits %i Parity %i\n"),ModbusSerialDataBits,ModbusSerialStopBits,ModbusSerialParity); } if ( Error!=-1 ) printf(_("INFO CLASSICLADDER---I/O modbus master (%s) init ok !\n"), ModbusSerialPortNameUsed[ 0 ]!='\0'?_("Serial"):_("Ethernet")); } }