Tag: python

MODBUS RTU CRC16计算

我用C编写了一个MODBUS CRC16计算器。我之前有一个python做这个,我想把它转换成C.我在网上发现了一些代码,但它没有给我正确的答案。 对于我的python代码,我把它作为我的CRC16.py #!/usr/bin/env python def calc(data): crc_table=[0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441,0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840,0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441,0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041,0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040] crc_hi=0xFF crc_lo=0xFF for w in data: index=crc_lo ^ ord(w) crc_val=crc_table[index] crc_temp=crc_val/256 crc_val_low=crc_val-(crc_temp*256) crc_lo=crc_val_low ^ crc_hi crc_hi=crc_temp crc=crc_hi*256 +crc_lo return crc 接下来,我将使用脚本输入我的变量: import math import subprocess import serial import time from time import sleep import struct import CRC16 import sys address = chr(0x01) function_code = chr(0x04) start_at_reg = […]

编译多个模块时,import_array()出现Numpy / CAPI错误

我正在尝试编译一个C ++模块,用于scipy.weave ,它由几个头文件和源C ++文件组成。 这些文件包含广泛使用Numpy / C-API接口的类和方法。 但我没有弄清楚如何成功地包含import_array() 。 过去一周我一直在努力解决这个问题,我很疯狂。 我希望你可以帮助我,因为weave 帮助不是很清楚。 在实践中,我首先有一个名为pycapi_utils的模块,它包含一些用C对象与Python对象接口的例程。 它pycapi_utils.h文件pycapi_utils.h和源文件pycapi_utils.cpp例如: //pycapi_utils.h #if ! defined _PYCAPI_UTILS_H #define _PYCAPI_UTILS_H 1 #include #include #include #include #include typedef std::tuple pykeyval; //Tuple type (string,Pyobj*) as dictionary entry (key,val) typedef std::list kvlist; //Declaration of methods PyObject* array_double_to_pyobj(double* v_c, long int NUMEL); //Convert from array to Python list […]

在Windows中使用C绑定构建Python包(VC90)会导致LNK1181致命错误

我正在尝试构建一个绑定到C库(libspotify)的Python包(pyspotify)。 我正在使用Python 2.7.5并为某些必需的命令行工具安装了VS2008 Express。 当我从命令提示符(具有管理员权限)调用python setup.py build ,我得到以下输出: running build running build_py running build_ext building ‘spotify._spotify’ extension 然后~18个,一个包中的每个.c文件: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Isrc -Ic:\Python\Python27\include -Ic:\Python\Python27\PC /Tcsrc\module.c /Fobuild\temp.win32-2.7\Release\src\module.obj module.c 然后是showstopper: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:c:\Python\Python27\libs /LIBPATH:c:\Python\Python27\PCb uild spotify.lib /EXPORT:init_spotify build\temp.win32-2.7\Release\src\module.ob j build\temp.win32-2.7\Release\src\session.obj […]

使用wiringPi2-python(非root)分段故障捕获GPIO

我正在使用wiringPi2-python将覆盆子GPIO引脚从低电平切换到高电平并返回。 一切正常,但在切换引脚值后,抛出了Segmentation fault并且程序停止。 我需要使用这种方法,因为这似乎是在没有sudo情况下访问GPIO引脚的唯一方法 在启动程序之前,我需要设置引脚输出并导出它们: $ echo 17 > /sys/class/gpio/export $ echo out > /sys/class/gpio/gpio17/direction 然后是一些python shell: $ python Python 2.7.3 (default, Jan 13 2013, 11:20:46) [GCC 4.6.3] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. >>> import wiringpi2 as pi >>> pi.wiringPiSetupSys() 0 >>> pi.digitalWrite(17, 1) Segmentation fault $ 我试过这种方法,但它没有更好。 该程序仍然停止: […]

如何通过cython将MPI通信器从python传递给C?

我试图通过cython将一个MPI_Comm通信器句柄作为参数包装一个C函数。 因此,我希望能够从python调用该函数,并将其传递给mpi4py.MPI.Comm对象。 我想知道的是,如何从mpi4py.MPI.Comm转换为MPI_Comm 。 为了演示,我使用了一个简单的“Hello World!” – 类型函数: helloworld.h : #ifndef HELLOWORLD #define HELLOWORLD #include void sayhello(MPI_Comm comm); #endif helloworld.c : #include #include “helloworld.h” void sayhello(MPI_Comm comm){ int size, rank; MPI_Comm_size(comm, &size); MPI_Comm_rank(comm, &rank); printf(“Hello, World! ” “I am process %d of %d.\n”, rank, size); } 我现在想从python中调用这个函数,如下所示: from_python.py : import mpi4py import helloworld_wrap helloworld_wrap.py_sayhello(mpi4py.MPI.COMM_WORLD) 意思是mpirun […]

修改静态变量是否安全?

从C ++ 11开始,静态变量初始化保证是线程安全的。 但是如何修改多个线程中的静态变量呢? 如下 static int initialized = 0; Initialize() { if (initialized) return; initialized = 1; // Is this thread safe? } 我问这个问题的原因是我正在阅读Py_Initialize()的源代码,我试图将Python嵌入到multithreadingC ++应用程序中,我想知道在多个线程中多次调用Py_Initialize()是否安全? Py_Initialize()的实现归结为函数_Py_InitializeEx_Private ,如下所示 // pylifecycle.c static int initialized = 0; _Py_InitializeEx_Private(int install_sigs, int install_importlib) { if (initialized) return; initialized = 1; // a bunch of other stuff } C的结论与C ++相同吗? […]

在python中使用全局变量

我是python的新手。 我试图将我的一个C程序转换为相应的python程序,但是我无法在python中使用全局变量。 我在c和python中的代码是: #include int globalcount; void noofways(int firstnumchosen,int sum,int numofnum) { if(sum<0) return; if(sum==0 && numofnum!=0) return; if(sum==0 && numofnum==0){ globalcount++; return; } if(numofnumsum) return; noofways(firstnumchosen+1,sum,numofnum); noofways(firstnumchosen+1,sum-firstnumchosen,numofnum-1); } int main() { noofways(1,8,3); printf(“Required number: %d”,globalcount); return 0; } def noofways(firstnumchosen, sum, numofnum): global count count=0 if sum<0: return if sum==0 and not(numofnum==0): return if […]

如何从Python访问C全局变量?

你有一个用SWIG( http://swig.org/ )编写的python模块,名为“swigMod1”,以及.i扩展名文件中名为“int A1 = 0;”的全局C变量。 在python环境下键入“import swigMod1”和“swigMod1.cvar.A1”,导入新扩展并允许您在执行期间读取和修改A1。 如果您运行两个swig模块,则语法如“swigMod1.cvar.A1 = swigMod2.cvar.A2”将变量A1(在第一个模块中)复制到A2(在第二个模块中)。 这是我项目中非常有用的function,我想在下一个考虑的案例中保留它。 您现在有另一个名为“cMod”的扩展,这次是通过经典的C API编写的( https://docs.python.org/2.7/extending/extending.html# )。 在源代码中再次出现一个C全局变量(“int B = 1;”),并且您希望像之前的示例一样访问它,但输入“cMod.cvar.B” 不起作用,因为它只是SWIGfunction。 是否有可能获得像“cMod.cvar.B”和“swigModule.cvar.A1 = cMod.cvar.B”这样的结果? 请注意我是如何仅仅为了简单而声明整数,但在实践中我面对其他类型,我想找到一个通用的解决方案。 我也省略了正确的检查以避免不良影响。

Py_InitModule4()在嵌入式Python解释器上返回NULL(使用Cython)

我正在使用Cython编写C-Plugin。 最后,这应该将Python-Interpreter嵌入到Windows上的iTunes中。 为了使其工作,需要一个引导程序 。 它实现iTunes插件入口点,初始化或最终确定,或者任何需要,然后调用从Cython生成的代码。 我在Windows 7 64Bit和CPython 2.7上使用MinGW gcc 4.6.2 。 前言 Windows上的iTunes插件入口点称为iTunesPluginMain 。 据我所知,实现插件的共享库不会一直保持iTunes运行,因此一旦调用入口点就无法存储任何全局变量。 这就是为什么iTunes要求开发人员将void*指针存储到每次调用iTunesPluginMain传递的句柄。 iTunesPluginMain进行多次通知,例如初始化和清理。 引导程序看起来像这样: /** coding: utf-8 file: bootstrap.c Copyright (c) 2012 by Niklas Rosenstein This file implements the bootstrapper for loading the PyTunes plugin. **/ #include #include #include #include #include “pytunes.c” #define EXPORT(type) __declspec(dllexport) type extern void initpytunes(void); extern […]

当硬币插入时,ccTalk硬币接收器没有反应

我编写了应该处理硬币插入的Linux应用程序(让我们说现在我需要在应用程序中识别插入了什么硬币)。 我使用SCA1 Coin Acceptor(ICT)。 我需要使用波兰硬币(货币 – 波兰兹罗提)。 我能够让PC和Coin Acceptor之间的通信工作,但我有一些问题。 我的设置的简要说明: PC通过cc232协议通过RS232(+ USB转换器)连接到Coin Acceptor。 开关座1:全部关闭,但对于第10个开关,设置为ON(根据文档) 开关座2:全部关闭 我设置禁止状态以允许所有(来自手动文档) 我设置主禁止状态以启用设备(来自手动文档) 我能够从Coin Acceptor获取有关序列号,软件修订等的数据。简单的民意调查也可以。 唯一的问题是关于插入硬币的实际信息。 我发送“读缓冲信用或错误代码”(Header 229)命令 – 根据文档 – 每500ms左右,每次我得到结果0(字节等于0x00),结果都正确返回,它只是看起来就像我没有插入任何硬币一样。 我试图使用抛光硬币以及10美分硬币。 所有硬币都被“拒绝”,被拒绝我的意思是Coin Acceptor似乎不会处理这些硬币(只是返回它们),另一方面,当我发送命令以获得被拒绝的硬币数量时,我再次获得0。 所以现在问你,你知道任何其他设置,以使其工作(最好用波兰硬币)? 此外,默认情况下(假设硬币接收器未连接到PC,但是已通电)硬币接受器应如何对插入的硬币做出反应? 只是返回它们(就像在我的情况下)或“处理”它们然后返回它们或将它们放入“银行”? 我想我发布代码没有意义。 我创建了两个不同的应用程序,问题是一样的。 一个在python中,我采用了https://github.com/Baldanos/ccTools的冒险,第二个应用程序是用C编写的,类似于: https : //github.com/BitCoding/cctalk 。 设备坏了是值得怀疑的,因为我试图使用其他设备没有区别。 此外,这些设备是全新的。 任何建议都会有所帮助。 先感谢您。