PC 앱과 통신 (송수신)해야하는 MT2070 스캐너가 있습니다. Symbol.MT2000.ScannerServices 어셈블리에서 ScannerServicesClient.SendLabel을 사용하여 PC에서 스캐너로 보내는 중입니다.Symbol MT2070 스캐너가 PC에서 데이터를 수신 중입니다.
그러나 스캐너 용 PC에서 보낸 데이터를 수신하지 못했습니다. Symbol.MT2000 어셈블리에서 아무 것도 찾을 수 없었습니다.이를 처리하거나 데이터 수신에 대한 예제를 찾았습니다.
누군가가 나를 예를 들어 설명해 주거나 내가 이걸 성취 할 수있는 방법을 안다면 많은 도움이 될 것입니다.
private readonly SerialPort _port = new SerialPort()
private void SetupPort()
{
_port.PortName = "COM1";
_port.BaudRate = 9600;
_port.DataBits = 8;
_port.Parity = Parity.None;
_port.StopBits = StopBits.One;
try
{
_port.Open();
_port.DataReceived += PortDataReceived;
_port.ErrorReceived += PortErrorReceived;
}
catch (Exception Ex)
{
OnCommsMessage("Exception opening port: " + Ex.Message);
}
}
private void PortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
OnCommsMessage("PortDataReceived");
}
private void PortErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
OnCommsMessage("PortErrorReceived");
}
DataReceived는 절대로 제기되지 않습니다. SerialPort.GetPortNames()를 사용하면 COM1, COM2, COM4, COM5, COM9, $ device \ COM21, $ device \ COM23이 표시됩니다.
UPDATE (I는 사람들을 위해 몇 가지 장치 이름을 추가하기로되어있어 확실하지) 나는 지난 2를 제외하고 사람들의 모든 포트를 설정 시도
작업 솔루션
internal class MT2000CradleCommunicator : BaseCradleCommunicator
{
private readonly ScannerServicesClient _scannerServicesClient = new ScannerServicesClient();
public override void Start()
{
if (_scannerServicesClient.Connect(true))
{
OnCommsMessage("ScannerServicesClient Connected");
SetRawMode();
}
else OnCommsMessage("ScannerServicesClient Failed to connect");
}
public override void Send(string message)
{
RESULTCODE result = _scannerServicesClient.SendRawData(MessageToRawData(message), 1000);
if (result == RESULTCODE.E_OK)
{
Receive();
}
else OnCommsMessage("Error sending data: " + result);
}
private void SetRawMode()
{
const int ATTRIBUTE_NUM_WIRED_HOST_NUM = 383;
const byte API_HOST_RAW = 18;
ScannerHostParameters hostParameters = new ScannerHostParameters(_scannerServicesClient);
RawParameters rawHostParameters;
RESULTCODE result = hostParameters.GetRawParameters(out rawHostParameters);
if (result == RESULTCODE.E_OK)
{
rawHostParameters.Type = RawParameters.RawHostType.RS232;
rawHostParameters.BaudRate = RawParameters.RawBaudRates.RAWSERIAL_9600;
result = hostParameters.StoreRawParameters(rawHostParameters);
if (result != RESULTCODE.E_OK)
OnCommsMessage("Set Parameters failed: " + result);
}
else OnCommsMessage("GetParams failed: " + result);
byte wHostNum;
result = _scannerServicesClient.GetAttributeByte(ATTRIBUTE_NUM_WIRED_HOST_NUM, out wHostNum);
if (result == RESULTCODE.E_OK)
{
OnCommsMessage("Get host: " + wHostNum);
result = _scannerServicesClient.SetAttributeByte(ATTRIBUTE_NUM_WIRED_HOST_NUM, API_HOST_RAW);
if (result != RESULTCODE.E_OK)
OnCommsMessage("Set host failed: " + result);
}
else OnCommsMessage("Get host failed: " + result);
}
private static RawData MessageToRawData(string message)
{
byte[] bytes = Encoding.ASCII.GetBytes(message);
return new RawData(bytes, bytes.Length, 1);
}
private void Receive()
{
RawData rawData;
RESULTCODE result = _scannerServicesClient.ReadRawData(out rawData, 5000);
if (result == RESULTCODE.E_OK)
{
OnCradleMessageReceived(BytesToAsciiString(rawData.Data));
}
else
{
OnCommsMessage("Comms timeout: Failed to receive data");
}
}
private static string BytesToAsciiString(byte[] data)
{
return Encoding.ASCII.GetString(data, 0, data.Length);
}
}
무선 네트워크를 통해 Bluetooth 또는 Infra Red를 통해 데이터를 보내십니까? 게시 할 수있는 몇 가지 샘플 코드가 있습니까? – jp2code
@ jp2code 블루투스. 수신을위한 샘플 코드가 없기 때문에 작업을 수행 할 수있는 것처럼 보이지 않습니다. – JKF
@ JKF, 스캐너에서 PC로 보내는 샘플 코드를 얻을 수 있습니까? 고맙습니다. – soclose