2017-02-09 3 views
1

Я пытаюсь установить связь с промышленным весовым мостом, используя последовательный порт. Я знаю, как писать код (C#). Проблема в том, что когда я соединяю мост с индикатором, отображается вес. Однако, когда я соединяю мост с моим ПК и запускаю программу, все, что возвращается, это «\ 0» (NULL). Когда я подключаю свой компьютер к индикатору и запускаю программу, я получаю непрерывный «\ 0». Я использую индикатор xk3190-a9. вот пример программыВозврат последовательного порта « 0»

namespace SerialPort 
{ 
    class Program 
    { 
     private static string dev = ""; 
     static void Main(string[] args) 
     { 
      System.IO.Ports.SerialPort mySerialPort = new System.IO.Ports.SerialPort("COM15") 
      { 
       BaudRate = 2400, 
       Parity = Parity.None, 
       StopBits = StopBits.Two, 
       DataBits = 8, 
       RtsEnable = true, 
      }; 
      mySerialPort.DataReceived += DataReceivedHandler; 
      mySerialPort.Open(); 
      Console.WriteLine("Press any key to continue..."); 
      Console.ReadKey(); 
      mySerialPort.Close(); 
     }  
     private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
     { 
      System.IO.Ports.SerialPort sp = (System.IO.Ports.SerialPort) sender; 
      dev += sp.ReadExisting(); 
       Console.WriteLine(dev); 
     } 
    } 
} 

Мой вопрос заключается, нужен ли мост «специальные» команды для отправки обратно вес или что я могу сделать, чтобы получить вес. Любые другие данные из порта будут достигнуты. Кроме того, я пробовал разные настройки порта, все же результат.

+1

Вы не должны задавать этот вопрос на SO, так как большинство здесь не знают, какой весовой мост или индикатор. Вы должны запросить эту информацию (обычно это своего рода руководство по эксплуатации) от поддержки/производителя устройства. Это может быть проблема с аппаратным обеспечением (неправильный кабель), неправильная конфигурация связи (например, баланс может быть сконфигурирован отдельно, чтобы принимать широкий диапазон бодрет/паритетов/и т. Д., Вы должны ** знать **, как он в настоящее время настроен или перенастроить его, как вы необходимо) или просто неправильно использовать протокол связи (команды и т. д.). – Sinatr

+0

Наряду с комментариями @Sinatr. В большинстве случаев ваша проблема заключается в том, что для последовательного протокола не применяется последовательный протокол. // Еще одна проблема, с которой вы можете столкнуться, заключается в том, что реализация Microsoft 'SerialPort' довольно затруднительна, особенно событие DataReceived. // Привязывание обоих этих ответов вместе, общий подход последовательного порта - это «SerialPort.SendBytes», затем «SerialPort.ReceiveBytes». Байты, которые вы отправляете и ожидаете получить, основаны на протоколе связи. – KDecker

+0

@KDecker Я пробовал подход к байтам, за исключением ошибочной реализации Microsoft, какой другой lib вы порекомендовали бы. Sinatr Руководство - китайский, и после перевода он рассказывает о программном обеспечении, поставляемом вместе с мостом, для которого требуется Windows Xp: P, который находится на китайском языке и только весит ... Я хотел бы сделать больше, чем взвешивать, иначе я бы использовал индикатор ... –

ответ

0

После поиска в Интернете и не найдя решение, которое подойдет моему делу, я отказался от цифрового преследования и посоветовался с специалистом по весовому мосту. В случае, если вы тоже вытаскиваете свои волосы, обратите внимание на следующее:

  1. Большинство весовых мостов (грузовых автомобилей и транспортных средств) отправят вес в качестве аналогового сигнала. Таким образом, даже если у них есть последовательный порт, ваш компьютер определенно не «получит», следовательно, возвращает \ 0.
  2. Чтобы получить вес вашего программного обеспечения, вам придется пройти через индикатор, который имеет преобразователи на его материнской плате, которые считывают аналоговый сигнал и могут преобразовывать его в цифровой сигнал.
  3. Насколько это возможно, некоторые из них имеют очень низкие значения BaudRates, и скорость может быть установлена ​​на странное число (см. 4), поэтому вы можете попробовать с 100 до 9600. В моем случае BaudRate был 600, который я никогда не пробовал, поэтому непрерывный \ 0
  4. Знайте, как настроить свой индикатор. Простой поиск Google с использованием номера индикатора должен дать хорошее руководство по английскому языку, это может показаться путающим вначале, но это единственный способ изменить BaudRate (среди других настроек) и избегайте всех догадок.
  5. Простые индикаторы возвращаются GrossWeight и в большинстве случаев этого достаточно, но упаковывают вам нужно вес на ось или вы хотите вес на каждой ячейки нагрузки вам может понадобиться расширенный индикатор как Avery Взвешивание Tronix E1310

Это примечания следует руководствоваться вы к жизнеспособному решению, я получил шахту от 1,3 & 4.

+0

Вы знаете, что в классе 'SerialPort' есть параметр, чтобы игнорировать любые символы NULL, поступающие по потоку. Если вы получаете непрерывный поток символов NULL, вы можете включить эту опцию. Данные могут быть там где-то, и вы просто не видите этого. Кроме того, такие звуки звучат как проблема электротехники. – Snoopy

+0

@Snoopy это дополнение приходит слишком поздно man –

+0

Все ваши ** вещи, которые следует отметить **, должны были быть опубликованы в исходном вопросе. – Snoopy

Смежные вопросы