Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2014, 11:08   #1
Григорийoss
 
Регистрация: 15.09.2013
Сообщений: 4
По умолчанию Диспенсер карт CRT-571

Доброго всем дня. Застрял на очень интересном месте, согласно документации посылка дынных в порт идет удачно, но железка не обрабатывает команду. Нужна помощь. Устройство называется CRT-571. В комплекте к нему шли dll подключение к сом порту , инициализация происходит нормально, но вот после отправки команды на выдачу карточки - тишина.
Код как это все делается прилагаю:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;

namespace dll
{
    unsafe class Program
    {
        [DllImport("CRT_571.dll")]
        public static extern IntPtr CommOpen(String Port);

        [DllImport("CRT_571.dll")]
        public static extern IntPtr CommSetting(IntPtr ComHandle, String ComSeting);

        [DllImport("CRT_571.dll")]
        public static extern IntPtr CommOpenWithBaut(String Port, uint Baudrate = 9600);

        [DllImport("CRT_571.dll")]
        public static extern IntPtr CommClose(IntPtr ComHandle);

        [DllImport("CRT_571.dll")]
        public static extern IntPtr ExecuteCommand(IntPtr ComHandle,
                                                    byte TxAddr,
                                                    byte TxCmCode,
                                                    byte TxPmCode,
                                                    int TxDataLen,
                                                    byte[] TxData,
                                                    ref byte RxReplyType,
                                                    ref byte  RxStCode0,
                                                    ref byte  RxStCode1,
                                                    ref byte  RxStCode2,
                                                    ref int RxDataLen,
                                                    byte[] RxData
            );

        [DllImport("CRT_571.dll")]
        public static extern IntPtr ICCardTransmit(IntPtr ComHandle, byte TxAddr, byte TxCmCode, byte TxPmCode, int TxDataLen, byte[] TxData, ref byte[]  RxReplyType, ref byte[]  RxCmCode, ref byte[]  RxPmCode, ref byte[]  RxStCode0, ref byte[]  RxStCode1, ref byte[]  RxStCode2, ref int RxDataLen, byte[] RxData);
        
        static void Main(string[] args)
        {
            byte[] CmData = new byte[1024];
            byte Addr;
            byte CmCode;
            byte PmCode;
            int CmDataLen;

            byte ReType = 0xFE;
            byte St2 = 0xFE;
            byte St1 = 0xFE;
            byte St0 = 0xFE; 
            int ReDataLen = 0;
            byte[] ReData = new byte[1024];
            IntPtr rc;
            try
            {
                string port = File.ReadAllLines("ports.txt")[2];
                IntPtr hCom = CommOpenWithBaut(port, 9600);
                Console.WriteLine(String.Format("COMID: {0}", hCom));

                CmData = Enumerable.Repeat((byte)0x00, CmData.Length).ToArray();

                Addr = 0x00;
                CmCode = 0x30; // Initialize command 
                PmCode = 0x30; // Parameter code 
                CmDataLen = 1; // Data size (bytes) 
                CmData[0] = 0x30; 
                
                rc = ExecuteCommand(hCom, Addr, CmCode, PmCode, CmDataLen, CmData,
                    ref ReType, ref St0, ref St1, ref St2,ref ReDataLen, ReData);

                Console.WriteLine("Retype1: {0:X}", ReType);
                Console.WriteLine("St0: {0:X}, St1: {0:X}, St2: {1:X}", St0, St2, St2);

                if ((int)rc == 0)
                {
                    if (ReType == 0x50)
                    {
                        Console.WriteLine("Positive response");
                    }
                    if (ReType == 0x4e)
                    {
                        Console.WriteLine("Negative response");
                    }
                }
                CommClose(hCom);
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}
Вложения
Тип файла: rar то что писали исходя из документации.rar (183.9 Кб, 36 просмотров)
Тип файла: pdf CRT-571interface Sketch and power connection1.pdf (75.9 Кб, 34 просмотров)
Тип файла: rar CRT-571 DLL Specification.rar (137.4 Кб, 42 просмотров)
Тип файла: rar CRT-571interface Sketch and power connection1.rar (56.7 Кб, 32 просмотров)

Последний раз редактировалось Stilet; 28.09.2014 в 13:19.
Григорийoss вне форума Ответить с цитированием
Старый 28.09.2014, 11:45   #2
Григорийoss
 
Регистрация: 15.09.2013
Сообщений: 4
По умолчанию

Есть идеи?
Григорийoss вне форума Ответить с цитированием
Старый 28.09.2014, 12:41   #3
Григорийoss
 
Регистрация: 15.09.2013
Сообщений: 4
По умолчанию

Подскажите куда копать то, очень нужна помощь
Григорийoss вне форума Ответить с цитированием
Старый 29.09.2014, 10:28   #4
cerkonst
Пользователь
 
Аватар для cerkonst
 
Регистрация: 18.01.2011
Сообщений: 19
По умолчанию

Раскажите немного поподробнее, порт открывается? комманды отсылаются? какие коды ответов приходят? либо на каком этапе выбрасывает?
___________________________________ _________
Самые гениальные идеи - самые простые.
Помог с ответом нажми на весы.
cerkonst вне форума Ответить с цитированием
Старый 29.09.2014, 12:54   #5
cerkonst
Пользователь
 
Аватар для cerkonst
 
Регистрация: 18.01.2011
Сообщений: 19
По умолчанию

И почему вы решили что Baud rate 9600, если в примере 38400? Но наверно это не важно, вы бы в любом случаи что-то получили, хоть непонятицу.
___________________________________ _________
Самые гениальные идеи - самые простые.
Помог с ответом нажми на весы.
cerkonst вне форума Ответить с цитированием
Старый 29.09.2014, 13:23   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не верный импорт.
по спецификации должна быть однобайтовая кодировка.
Код:
        [DllImport("CRT_571.dll"),CharSet = CharSet.Ansi]
        public static extern IntPtr CommOpen(String Port);

        [DllImport("CRT_571.dll"),CharSet = CharSet.Ansi]
        public static extern IntPtr CommSetting(IntPtr ComHandle, String ComSeting);

        [DllImport("CRT_571.dll"),CharSet = CharSet.Ansi]
        public static extern IntPtr CommOpenWithBaut(String Port, uint Baudrate = 9600);

        [DllImport("CRT_571.dll")]
        public static extern int CommClose(IntPtr ComHandle);

        [DllImport("CRT_571.dll")]
        public static extern int ExecuteCommand(IntPtr ComHandle,
                                                    byte TxAddr,
                                                    byte TxCmCode,
                                                    byte TxPmCode,
                                                    int TxDataLen,
                                                    byte[] TxData,
                                                    ref byte RxReplyType,
                                                    ref byte  RxStCode0,
                                                    ref byte  RxStCode1,
                                                    ref byte  RxStCode2,
                                                    ref int RxDataLen,
                                                    byte[] RxData
            );

        [DllImport("CRT_571.dll")]
        public static extern int ICCardTransmit(IntPtr ComHandle, byte TxAddr, byte TxCmCode, byte TxPmCode, int TxDataLen, byte[] TxData, ref byte[]  RxReplyType, ref byte[]  RxCmCode, ref byte[]  RxPmCode, ref byte[]  RxStCode0, ref byte[]  RxStCode1, ref byte[]  RxStCode2, ref int RxDataLen, byte[] RxData);
поидее так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинаторика: Сколькими способами из колоды карт в 36 листов можно выбрать неупорядоченный набор из 5 карт так, чтобы .... sergey163 Помощь студентам 2 28.11.2013 23:27
USB. Программно обновить список подключенных к карт-ридеру карт. Человек_Борща Win Api 5 27.11.2012 20:15
Sleep и CRT )Игнат( Паскаль, Turbo Pascal, PascalABC.NET 1 04.12.2010 08:59
CRT x93 Помощь студентам 0 05.06.2010 21:59
Uses CRT; sir.andrey Помощь студентам 9 18.03.2010 14:43