Как я могу общаться с устройством RS232 в Objective-C? - PullRequest
2 голосов
/ 04 марта 2011

Я пытаюсь написать командную строку, программу Foundation Objective-C, и мне нужно связаться с последовательным устройством RS232.

Есть идеи, как это сделать?

РЕДАКТИРОВАТЬ - Это НЕ для iPhone!Это НАСТОЛЬНОЕ ПРИМЕНЕНИЕ.

Ответы [ 2 ]

4 голосов
/ 04 марта 2011

Я предполагаю, что вы используете адаптер RS-232 / USB. Если бы я делал это, я бы выяснил, на каком устройстве оно отображается, и просто открыл его, используя функцию open ("/ dev / ttyS0" и т. Д.). Затем вы можете заключить дескриптор файла и функции доступа в объект.

Вот страница, посвященная игре с последовательными портами в средах POSIX: http://www.easysw.com/~mike/serial/serial.html

0 голосов
/ 09 июля 2013

Я использовал так называемый «Serial Device Server» от moxa, и он работал как шарм.

Преимущества перед последовательным USB-конвертером:

  • Устройство может быть интегрировано в любую точку сети
  • на стороне приложения это просто хорошо задокументированное сетевое программирование

Сервер устройств в целом позволяет вам подключаться к последовательному устройству, используя такие сети, как LAN или WiFi .

Со стороны программного обеспечения было бы довольно легко программировать сеть / сокет, как:

(Использование GCDAsyncSocket )

Подготовка данных

static u_int8_t cmd1[] = { 0x1a, 0x73, 0x10 }; //defined by the serial device's protocol
static u_int8_t cmd2[] = { 0x1b, 0x51, 0x01 };

self.data = [NSMutableData dataWithBytes:&cmd1 length:sizeof(cmd1)];
[self.data appendData:[string dataUsingEncoding:NSUTF8StringEncoding]];
[self.data appendBytes:&cmd2 length:sizeof(cmd2)];

отправка данных

-(IBAction)buttonAction:(id)sender
{
    NSError *error = nil;
    [self.socket connectToHost:@"192.168.1.9" onPort:1234 withTimeout:-1 error:&error];
    if (error) {
        NSLog(@"error: %@", error);
    }
}


-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
    [self.socket writeData:self.data withTimeout:-1 tag:23];
}
...